計算機網絡 傳輸層 (慕課學習筆記)

6.1傳輸層概述

傳輸層提供高效、可靠的數據傳輸服務。
完成傳輸層任務的硬件或軟件叫傳輸實體

傳輸實體

  1. 傳輸實體可以在操作系統的內核
  2. 可以以一個鏈接庫的形式綁定到網絡應用中
  3. 可以以一個獨立的用戶進程運行
  4. 甚至可以實現在網絡接口卡(網卡)上

傳輸層利用網絡層的服務,爲它的上層應用層提供服務
與網絡層提供的服務相似,傳輸層提供的服務也分爲 面向連接的服務無連接的服務

網絡層運行在由承運商操作的路由器上,因此用戶無法真正控制到網絡層
把另一層放在網絡層之.上,可以讓用戶能夠控制到服務質量(some control)
傳輸層原語獨立於網絡層原語,而網絡層原語會因爲網絡的不同而不同

傳輸層服務和網絡層服務的作用範圍不同
網絡層負責把數據從源機送達到目的機(主機到主機),而傳輸層負責把數據送達到具體的應用進程(端到端)

傳輸層協議數據單元
數據段(TPDU):是從傳輸實體發到對端傳輸實體的信息。
TPDUs 作爲數據(載荷)被封裝在分組(packet)中,由網絡層傳輸交換。
分組作爲數據(載荷)被封裝在幀(frames)中,由數據鏈路層傳輸交換。

傳輸層的兩個常用協議

  1. 用戶數據報協議UDP
  2. 傳輸控制協議TCP

6.2用戶數據報協議UDP

UDP是一個無連接的傳輸層協議。

UDP數據段頭
在這裏插入圖片描述

  1. UDP數據段包括4個字段共8字節的頭部和數據兩個部分
  2. 其中第3個字段,長度字段(域)表示:包括頭部和數據總共有多少字節
  3. 第4個是校驗和(checksum)是可選的,如果不計算校驗和,則該字段/域置爲0
  4. UDP數據段中最獨特、最重要的字段是第1、2個字段,分別表示源端口和目的端口,都是用16比特表示的

校驗和計算方法:
在這裏插入圖片描述

2^16=65536 端口範圍0-65536
端口(port)被分成了三段:
在這裏插入圖片描述

定義一個自由端口:本地分配,動態的隨機端口。

UDP提供端點標識,端到端的數據傳輸,不提供差錯檢測和可靠傳輸,但簡潔高效

6.3通信模型

端點就是套接字(Socket),包括IP地址和端口號,可以寫成(IP,Port)

通信5元組
在這裏插入圖片描述
端點之間的傳輸協議可以使UDP,也可以是TCP

另一種說法:

在這裏插入圖片描述

6.4.TCP數據段

傳輸控制協議
支持TCP的機器都有一個TCP實體,或者是用戶進程或者是操作系統內核,都可以管理TCP流和跟IP層的接口
發方:封裝
TCP實體接收本地進程的用戶數據流,將其分割成不超過64KB的分片(實踐中,通常分割成1460個字節,以通過以太網傳輸)
收方:解封裝
當包含TCP數據段的報文到達某臺機器的時候,被提交給傳輸實體,傳輸實體將其重構出原始的字節流

TCP協議
》TCP連接上的每個字節都有它自己獨有的32位序列號
》但收、發雙方的TCP實體不是以字節,而是以數據段的形式交換數據

兩個因素限制了數據段的長度:

  1. TCP數據段必須適合IP分組的65515字節(65535B-20B)的載荷限制
  2. 每個TCP數據段必須適合於下層網絡的MTU

TCP數據段(TPDU)格式
在這裏插入圖片描述
在這裏插入圖片描述
第3個字段:
在這裏插入圖片描述
第4個字段:
在這裏插入圖片描述

第5個字段:
4比特,TCP段頭長度單位32位(4字節)

第6個字段:
保留字段,也逐步啓用,比如用來做擁塞控制等

第7個字段:
都是1比特的6個字段(控制比特):URG,ACK,PSH,RST,SYN和FIN
URG
當緊急指針使用的時候,URG被置爲1。緊急指針是一個對於當前序列號的字節偏移量,標明緊急數據從哪裏開始。
即使win=0 (是告訴對方不可以發送數據),也可以發送這樣的緊急數據段。比如,用戶發出ctrl+c中斷命令。
當URG=1時,表明有緊急數據,必須首先處理;收方收到這樣的數據後,馬上處理,處理完後恢復正常操作。
ACK
可設爲1和0.當爲1時,表明確認號有效;爲0則無效。
PSH
表示這是帶有PUSH標誌的數據,接收方收到這樣的數據,應該立刻送到上層,而不需要緩存它。
RST
被用來重置一個已經混亂的連接,如果在連接建立階段,就直接拒絕建立連接。
SYN
用在連接建立過程。若SYN=1且ACK=0,則表示連接請求;若SYN=1且ACK=1,則表示連接接受
FIN
被用來釋放連接,它表示發送方已經沒有數據要傳輸了,但是可以繼續接收數據。

窗口尺寸(Window size):
16位,告訴對方可以發送的數據字節數,即從確認字節號開始,連續發送的字節總數。窗口尺寸的大小,取決於接收方。

校驗和(Checksum):
計算方法跟UDP數據段中校驗和計算一樣,唯一不一樣的就是僞頭部中的用戶協議值取爲6。

緊急指針(Urgent pointer):
和URG控制位配合使用,指明瞭緊急數據。

6.5 TCP三次握手建立連接

TCP數據段傳送之前,一定要建立TCP連接。

通過三次握手建立TCP連接
》一次: SYN=1,ACK=0
》二次: SYN=1,ACK=1
》三次: SYN=0, ACK=1

三次握手建立連接是一個同步的過程,交換初始序列號,保證後續的每一個字節的可靠傳輸。
在這裏插入圖片描述

6.6 TCP連接釋放

  1. 任何一方在沒有數據要傳送的時候,都可以發送一個FIN置位了的TCP數據段
  2. 當FIN被確認的時候,該方向的連接被關閉
  3. 當雙向連接都關閉了的時候,連接釋放

解決確認問題:
》一方發送連接釋放請求DR (Disconnect Request),且期待對方的確認ACK
》當DR到達接收端,它回發ACK, 並且也發送一個DR
》ACK到達發送端的時候,連接釋放;同時,它回發確認ACK,當這個ACK到達接收端,反方向的連接也釋放了

爲了避免兩軍對壘問題,或者爲了避免DR和ACK丟失而引發的問題,採用定時器
任何時候,發出DR的同時,都啓動一個定時器
》如果一方發送了FIN置位了的DR數據段出去,卻在定時器超期之時都沒有收到應答,釋放連接
》另一方最終會注意到連接的對方已經不在了,超時後連接釋放

半開放連接:發送者將因超時放棄發送且釋放連接,但是,另外一 端卻不知道這些情況,仍然處於活躍的狀態

殺死半開放連接方式:
》如果在一定的時間內,沒有TPDUs 到達的話,連接自動釋放
》如果這樣,傳輸實體在發送一個TPDU的時候必須啓動定時器,定時器超期,將發動一個啞TPDU(dummy TPDU),以免被斷掉

四次握手正常釋放連接:
在這裏插入圖片描述

6.7 TCP傳輸策略

當窗口數爲0時,發送者不能正常發送數據段,除非:
Urgent數據。 比如,用戶想殺掉遠端機器上的進程的時候, 可以發送數據
》發送者可以發送一個字節的數據段,以便讓接收者再次發送期待接收的字節號(確認)和窗口數(避免死鎖)

傳輸優化:
發送方(Nagle算法):
》儘量不發送數據含量小的數據段
》緩存應用層的數據,達到一定量再發送

接收方(Clark解決方案):
》不請求對方發送短數據段(window size)
》延遲窗口變更信息,使接收緩衝區足夠大

6.8 TCP擁塞控制

(遵循分組守恆定律)
擁塞檢測
所有的互聯網TCP算法都假定超時是由擁塞引起的,並且通過監視超時的情況來判斷是否出現問題
擁塞控制
》當一個連接建立的時候,雙方選擇一個合適的窗口大小,接收方根據自己的緩衝區大小來指定窗口的大小
》如果發送者遵守這個窗口大小的限制,則接收端不會出現緩衝區溢出的問題,但可能由於網絡內部的擁塞而發生問題

擁塞的兩種情形:1.接收方容量不夠 2.網絡內部瓶頸
(接受者容量,網絡容量)
每個發送者維護兩個窗口:
接受者窗口:反映了目前接收者的處理能力(容易獲取)
擁塞窗口(CWND):大小反映了網絡目前的容量(難於獲取)
(保證發送者發送的數據字節數是兩個窗口中小的那個窗口數)

決定擁塞窗口的大小(慢啓動算法):
》當連接建立的時候,發送者用當前使用的最大數據段長度初始化擁塞窗口,然後發送一個最大的數據段
》如果在定時器超期之前收到確認,則將擁塞窗口翻倍,然後發送兩個數據段,直到超時或達到接收方窗口的大小)
例如:如果試圖發送4096字節沒有引發超時,但是發送8192字節的時候,超時沒有收到確認,則擁塞窗口設爲4096個字節
(設定閾值,到達閾值就變爲線性增長,超時後閾值降爲獲得的擁塞窗口的一半,重新從1開始慢啓動算法)

注意:

  1. 線性增長,可以將越來越粗放的窗口嘗試粒度變小,以獲得更準確的擁塞窗口值;
  2. TCP慢啓動算法就是這樣不斷超時、不斷重啓,嘗試出的擁塞窗口值也隨着網絡狀況的變化而發生變化,達到擁塞控制的目的;
  3. 重新慢啓動的時候,擁塞窗口值不用重置爲一個數據段大小,而是可以設置爲閾值大小,從這裏直接開始線性增長,這就是所謂的快速恢復。(呈現出鋸齒形狀)
  4. 任何時候,如果TCP傳輸實體收到一個ICMP抑制分組,則爲超時。

6.9 TCP定時器等

死鎖現象:接收方發送一個窗口數爲0的確認(窗口更新),告訴對方等待;稍後,接收方空出緩存,發送更新窗口的數據段,但是該分組丟失。於是收發雙方都在等待的現象。

解決死鎖的方法:發送方在收到win=0時,啓動一個持續定時器,如果定時器超期沒有收到更新窗口,則發送一個探測數據段,引發對方重新發出更新窗口!

保活定時器:用來檢測連接是否存活。當連接空閒時間超過保活定時器時間則被殺掉。
肯定確認定時器:用來保證數據段的可靠傳輸。

在這裏插入圖片描述
TCP:
1.可靠傳輸方式
2.可讓應用程序簡單化,程序員可以不必進行錯誤檢查、修正等工作

UDP:
1.爲了降低對計算機資源的需求(DNS)
2.應用程序本身已提供數據完整性的檢查機制,毋須依賴傳輸層的協議來保證
3.應用程序傳輸的並非關鍵性的數據(路由器週期性的路由信息交換)
4.一對多方式,必須使用UDP (TCP限於一對一的傳送)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章