1. TCP協(xié)議
TCP協(xié)議的頭部格式很重要橙困,里面的很多參數(shù)都是必須要掌握的拿穴。
- Source Port
源端口 - Destination Port
目標端口 - Sequence Number
序列號严卖,報文的第一個字節(jié)在數(shù)據(jù)流的序號宴抚,主要用來解決網(wǎng)絡中亂序的可能袄膏。 - Acknowledgment Number
確認序號践图,是上一次收到的數(shù)據(jù)字節(jié)號加1,解決丟包問題 - Offset
用來確認可選字段的長度 - TCP的各個標志位
- URG:表示緊急指針域沉馆。用來保證TCP連接不被中斷码党,并且監(jiān)督中間層設備盡快處理這些數(shù)據(jù)。
- ACK:取值為0和1,0表示應答無效斥黑,1表示應答有效揖盘。
- PSH:表示Push操作。數(shù)據(jù)包在到達接收端后不要經過緩沖锌奴,直接到達應用程序兽狭。
- RST:復位操作,用來復位那些產生錯誤的連接鹿蜀。
- SYN:同步序號箕慧,建立連接。待會會講怎么建立連接茴恰。
- FIN:結束報文颠焦,表示發(fā)送端已經到達數(shù)據(jù)末尾。
- Window:窗口大小往枣,滑動窗口伐庭,用來進行流量控制粉渠。(之后博文分析)
2 三次握手的實現(xiàn)
三次握手的過程如下:首先客戶端發(fā)送連接請求,將SYN標志位置為1似忧,并將序號發(fā)送給服務端渣叛。服務端接收到后將確認號+1,同時將自己的序號發(fā)送給客戶端盯捌〈狙茫客戶端收到服務器的SYN和ACK后,將ACK序號置為服務器的序號+1饺著,完成三次握手箫攀。
四次揮手的過程如下:
第一次 結束方(客戶端或者服務器)設置序號和ACK,發(fā)送FIN報文幼衰,靴跛,結束方此時進入FIN_WAIT_1狀態(tài)。
第二次 在收到結束方的FIN報文的時候渡嚣,回復一個ACK報文梢睛,結束方進入FIN_WAIT_2狀態(tài)。
第三次 被結束方向結束方發(fā)送FIN報文段识椰,請求關閉連接绝葡。
第四次 結束方收到FIN報文后回復ACK報文,結束方進入了TIME_WAIT階段腹鹉。結束方等待2MSL后關閉連接藏畅。
問題:
- 為什么采用三次握手而不是兩次握手?
保證傳輸?shù)目煽啃院透咝У膫鬏敼χ洹H绻莾纱挝帐值脑捰溲郑蛻舳擞锌赡懿粫_認自己收到了服務器的序號(客戶端第一次請求很晚被服務器收到,而客戶端認為這是一個失敗的請求)力奋,導致資源浪費榜旦。