基础知识: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的计算方法,你们都知道吗?

七层架构


分享到:


相關文章: