三次握手和四次揮手的包分析

原文鏈接:https://www.cnblogs.com/god-of-death/p/7905817.html

下圖爲網絡編程實戰學習筆記(八)中demo的實驗抓包情況
在這裏插入圖片描述
TCP ------ 抓包分析(seq ack)總結的挺好的,直接抄過來了。

總結:

1、ACK包可以和其他包合在一起,比如ACK包可以攜帶數據

2、可以接收多個數據包後,一次性給一個應答,不用每個數據包一一對應給應答

3、在通信過程中,通過接收到的包的ack值可以判斷是否是上一個本機發送包的應答包(ack值與上一個本機發送包的seq有關),seq值和ack值的確定規則如下:

三次握手:

第一次握手(發送):seq爲x(x爲任意值),無視ack(因爲是第一個包,不需要給其他包應答)

第二次握手(發送):seq爲y(y爲任意值),ack等於接收包seq+1(即x+1)

第三次握手(發送):seq等於上一個本機發送包seq+1(即x+1),也就是1,ack等於接收包seq+1(即y+1)

數據傳輸:

某主機發送的seq和ack是根據上一個接收包的seq、ack和len得到,具體爲:seq=ack,ack=seq+len

提醒:如果某一主機連續發了4個包,後三個包的seq和ack和第一個包的一樣

提醒:seq會單調增大

特別:如果握手完第一個數據包是客戶端發送,第一個數據包的seq和ack和第三次握手的一樣

四次揮手:

如果是服務器發起的揮手,揮手前最後一個包是服務器發送:

如果是客戶端發起的揮手,揮手前最後一個包是客戶端發送:

第一次揮手(發送):seq爲上一個本機發送包seq+len,ack爲上一個本機發送包ack

第二個揮手(發送):seq爲本次接收包ack,ack爲本次接收包seq+1

第三次揮手(發送):和第二次揮手一樣

第四次揮手(發送):seq爲本次接收包ack,ack爲本次接收包seq+1

如果是服務器發起的揮手,揮手前最後一個包是客戶端發送:

如果是客戶端發起的揮手,揮手前最後一個包是服務器發送:

第一次揮手(發送):seq爲本次接收包ack,ack爲本次接收包seq+len

第二個揮手(發送):seq爲本次接收包ack,ack爲本次接收包seq+1

第三次揮手(發送):和第二次揮手一樣

第四次揮手(發送):seq爲本次接收包ack,ack爲本次接收包seq+1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章