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