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是根據上一個接收包的seqacklen得到,具體為: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

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM