wireshark驗證TCP3次握手

wireshark過濾條件:ip.addr == 120.79.36.180
千萬別寫成 ip.dst == 120.79.36.180 ,這樣子就看不到服務器給咱們返回的包了
此時,在瀏覽器輸入120.79.36.180:8080,敲下回車,而後查看wireshark的捉包;
在計算機網絡課上,咱們知道有下面的理論;如今我就從wireshark抓包中論證這個理論。瀏覽器

image_1cduvgvfd1fq4sd1thq1t5pht99.png-31.9kB

tcp 的頭部

英文版

image_1cduvirj5ib613ct8gl12fret816.png-144.1kB

中文版

image_1cduvma3j1pjr6261kbte3311hb1j.png-150.9kB

上圖中有幾個字段須要重點介紹下:
(1)序號:Seq序號,佔32位,用來標識從TCP源端向目的端發送的字節流,發起方發送數據時對此進行標記。
(2)確認序號:Ack序號,佔32位,只有ACK標誌位爲1時,確認序號字段纔有效,Ack=Seq+1。
(3)標誌位:共6個,即URG、ACK、PSH、RST、SYN、FIN等,具體含義以下:
(A)URG:緊急指針(urgent pointer)有效。
(B)ACK:確認序號有效。
(C)PSH:接收方應該儘快將這個報文交給應用層。
(D)RST:重置鏈接。
(E)SYN:發起一個新鏈接。
(F)FIN:釋放一個鏈接。
須要注意的是:
(A)不要將確認序號Ack與標誌位中的ACK搞混了。
(B)確認方Ack=發起方Req+1,兩端配對。 服務器

接下來咱們來看wireshark捉到的包網絡

第一次握手

書中寫第一次握手的包是 syn = 1 , seq = x ,這裏的x是任意的,tcp

image_1cdv02vbh10r01pvu13dm1q061gvu20.png-269.4kB

咱們從第一個捕捉到的包開始看,這個從source、destination中咱們能夠知道,這是我本地發送給120.79.36.180的一個tcp請求;再看下面的信息;
能夠看到 Sequence number :0 還有 Flags.Syn = 1 ,這裏跟書中的理論描述是一致的,這也印證了這是tcp第一次握手的包。spa

第二次握手

書中寫第二次握手的包是 Syn = 1 , Ack = x + 1 , Seq = y ;
這裏的Ack是確認序號,不是標記爲的Ack,標記位的Ack的
用 1 表示第一次握手, 2表示第二次握手,3表示第三次握手
這裏的 x 是第一次握手中的x,也就是第一次握手的Seq,說明第二次握手的Ack等於第一次握手的Sqe + 1,咱們獲得公式 2.Ack = 1.Seq + 1
而第二次握手的Seq變成了y,說明第二次握手的Seq是任意的。
image_1cdv0lock1t2i1cu1hh5sqpfvn2d.png-263.9kB
從上圖中咱們看到 2.Seq = 1 , 2.Ack = 1,印證了理論2.Ack = 1.Seq + 1.net

第三次握手

書中寫第三次握手的包是Ack = y + 1 ,Seq = z ;
這說明第三次握手的包的Seq是任意的,3.Ack = 2.Seq + 1計算機網絡

咱們再從下面的包中找到第一個從本地發給服務器的包,協議是TCP
image_1cdv21mi01sst1s7q87ks212m02q.png-284.4kB
從上圖中,咱們能夠看到 3.Ack = 1, 而2.Seq = 0 也就是 3.Ack = 2.Seq + 1;從而印證了書中的理論。3d

參考:TCP三次握手指針

相關文章
相關標籤/搜索