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