知道这个算法的用途是啥呢?
在工作种,涉及网络编程开发的程序员,在测试检查是否应用程序存在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 的文章