基礎知識:TCP的seq,ack的計算方法,你們都知道嗎?

知道這個算法的用途是啥呢?

在工作種,涉及網絡編程開發的程序員,在測試檢查是否應用程序存在BUG,連接狀態是否正常,套接字使用是否正確時,肯定會進行抓包分析,當網絡不良情況,會出現抓包丟包,掌握了這個算法,你就能計算到底丟了多少包。

先講基礎概念:

seq是數據包本身的序列號;

ack是期望對方繼續發送的那個數據包的序列號。

注意,SYN/FIN的傳輸雖然沒有data,但是會讓下一次傳輸的packet seq增加一,但是,ACK的傳輸,不會讓下一次的傳輸packet加一。

重點:seq,ack算法(同一連接下)

數據傳輸階段(Q:請求,R:應答)

序號  方向  seq ack datasize

Qn C->S Qnseq Qnack Qnsize

Rn S->C Rnseq Rnack Rnsize

算法一:請求滿足:

Q(n)seq = Q(n-1)seq + Q(n-1)size

若滿足:Q(n)ack = Q(n-1)ack,則n-1與n是同一請求包,網上IP分片,重組原理。

算法二:應答滿足:

R(n)seq = R(n-1)seq + R(n-1)size

若滿足:R(n)ack = R(n-1)ack,則n-1與n是同一應答包,網上IP分片,重組原理。

算法三:請求應答滿足(QR包):

R(n)ack = Q(n)seq + Q(n)size

下面我們通過wireshark打開一個網絡包進行分析:

基礎知識:TCP的seq,ack的計算方法,你們都知道嗎?

正常三次握手、四次揮手的網絡包

大家把計算算法帶入,看是否正確。


你覺得對嗎?歡迎在留言區和我討論哦:)


既然看到這了,送我一個「贊同」吧,支持我的創作。

也可以「關注」我,持續分享所得所見,謝謝~

內容包括:架構設計|K8S丨Linux網絡編程丨項目管理丨個人學習路線。


做難事,才有所得,必有所得!

Stay hungry,Stay foolish!

讓我們繼續向前,明天會更好!


基礎知識:TCP的seq,ack的計算方法,你們都知道嗎?

七層架構


分享到:


相關文章: