知道這個算法的用途是啥呢?
在工作種,涉及網絡編程開發的程序員,在測試檢查是否應用程序存在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打開一個網絡包進行分析:
大家把計算算法帶入,看是否正確。
你覺得對嗎?歡迎在留言區和我討論哦:)
既然看到這了,送我一個「贊同」吧,支持我的創作。
也可以「關注」我,持續分享所得所見,謝謝~
內容包括:架構設計|K8S丨Linux網絡編程丨項目管理丨個人學習路線。
做難事,才有所得,必有所得!
Stay hungry,Stay foolish!
讓我們繼續向前,明天會更好!
閱讀更多 barbarian 的文章