今天開始進行計算機網絡相關的總結及細節剖析,將會對常考的相關知識進行更詳細的解讀,本章是TCP相關的,圖文并茂,也是花了作者一個周末時間搞定的,歡迎大家點贊轉發。
那就開始正文嘍~
1、TCP主要特點
1.面向連接:
?TCP連接只能有兩個端點,TCP連接是一對一的。
?TCP提供可靠連接服務。
?TCP提供全雙工通信。
2.面向字節流:
?TCP和應用程序交互是一次一個數據塊進行交互。但是TCP會把應用程序交下來的數據塊看成一串無結構的字節流。
?TCP報文收發之間的數據塊不一定相同(因為我不一定一次接受多少受網絡情況,擁塞情況控制)但是字節流一定相同。
?TCP根據對方的接收能力和網絡擁塞情況將字節流分成大小不同的段發送給接收緩存。
3.TCP的連接套接字連接兩端的插口包含IP和端口號。全雙工抽象連接。
2、TCP的報文格式
1.源端口,目的端口各占兩個字節是運輸層與應用層交互的接口。
2.序號(4B):seq,字節序號本報文段所攜帶數據的第一個字節的序號。
3.確認號(4B):ack,期望對方下次發來數據的第一個字節的序號。
4.數據偏移(4bit):標志著報文段數據部分起始位置距離報文段起始位置的距離即首部長度。
5.URG(1B),緊急位置1,立刻將TCP發送緩存中的字節流打包成報文發送出去。
6.ACK(1B),ACK = 1代表確認號有效。
7.PSH(1B),PSH = 1,接收方立刻將接收緩存數據上交給應用進程。
8.RST(1B),RST = 1,TCP連接中出現嚴重差錯必須釋放連接然后在重新建立運輸連接。
9.SYN(1B),SYN = 1,表示這是一個連接請求或連接接受的報文。
10.FIN(1B),FIN = 1,用來釋放一個連接。FIN為1表明報文段發送端已發送完成,并要求釋放連接。
11.窗口(2B),告訴對方從確認號開始接收方目前允許對方發送的數據量。
12.檢驗和(2B),類似于UDP首部和數據這兩部分計算時要在TCP報文段之前加上偽首部。
13.緊急指針,16位,當URG = 1時,這部分記錄了緊急數據的大小把它放在數據部分的最前面發出去。
14.選項字段:長度可變最大報文段數據部分長度MSS,MSS告訴對方TCP我緩存最大能接受的長度為MSS。
MSS太大IP層分片只要有一片出錯就得重傳。
MSS太小效率低下。
15.其它選項:
窗口擴大選項:占3字節,其中一個字節S為窗口擴大的位數,比如(16+S)但是最大值不能超過30位
時間戳選項:
1.計算往返時延。
發送時打一個時間戳放在timestamp中,收到確認報文后再打一個時間戳此時將之前的timestamp中的時間放在timestamp echo中然后將收到確認報文的時間戳放在timestamp中二者相減可以得到RTT。
2.防止序號回繞。
由于序號編碼空間是32位的所以一共是2的32次方。對于高帶寬的網絡很容易消耗完,也就是說接收方可能會收到兩次相同序號的報文,如果不加標記,接收方會認為這兩個報文是相同的然后就會丟棄。時間戳選項會將兩個報文標記好時間戳這樣接收方就不會丟棄了。
16.填充。
為了保證TCP首部是4字節的整數倍。
3、TCP的可靠傳輸
3.1、TCP連接的兩個端點都有兩個窗口:
發送窗口:準備發送的數據和已發送但未收到確認的數據。
接收窗口:按序接收但沒有上交的數據,不按序接收的數據。
?P3 - P1 = A的發送窗口(又稱為通知窗口)
?P2 - P1 = 已發送但尚未收到確認的字節數
?P3 - P2 = 允許發送但尚未發送的字節數(又稱為可用窗口)
如圖所示發送窗口按序發送窗口中的字節流,如果發送且收到確認則滑出窗口如果已發送但未收到確認則留在發送窗口中用來準備重傳。
接收窗口將按序接收字節流如果收到的字節流無序則仍然會留在接收窗口中。比如我先收到了37則37不會被確認交付主機因為前面的34-36還沒有被接收當前面的34-36被接收后34-37才會一起被交付主機。
-
緩沖區
+關注
關注
0文章
33瀏覽量
9142 -
TCP
+關注
關注
8文章
1374瀏覽量
79159 -
UDP
+關注
關注
0文章
327瀏覽量
34005
發布評論請先 登錄
相關推薦
評論