在教科书上,我们学过 TCP 的 3 次握手和 4 次挥手,请读者思考一下:TCP 握手一定会使用 3 个包吗?TCP 的挥手一定会使用 4 个包吗?
下载这个抓包文件,并且分析以下问题:
问题1: 这个抓包文件中,一共有几个 TCP 连接?
问题2: 对于每一个 TCP 连接,请找出来和 TCP 握手有关的 3 个包,以及和 TCP 挥手有关的 4 个包。
TCP 是可靠的传输层协议,这意味着在 TCP 连接中,丢失的每一个数据都会被识别出来。考虑这种情况:在一个 TCP 连接中,发送端发送完最后一个 segment,然后发送 FIN 包结束连接。即,发送端发送了两个包。这时候:
- 假设 segment 数据丢失了,那么发送端不会得到这个 segment 的 ACK,需要重传 segment 数据;
- 如果 FIN 丢了,也需要重传 FIN,4 次挥手中,ACK 的作用就是确保 FIN 也得到了 ACK 确认。
那么最后的问题是:如果发送端发送了 segment 数据和 FIN,但是只收到一个 ACK,发送端如何知道 ACK 的是 segment 数据,还是 FIN 包,还是二者都是?注意,ACK 会有 ACK 的序列号,表示这个号码之前的数据都已收到。但是 FIN 的数据长度是 0。那么 ACK 如何区分 FIN这个包 和 FIN 之前的数据呢?

提示:TCP 肯定已经处理好了这种情况,所以答案就在 RFC 793 中。如果不想阅读 RFC,那么可以仔细分析 ACK number 来找到答案。
==抓包破案录==
这篇文章是抓包破案录系列文章(之前叫做《计算机网络实用技术》,后来改名了)中的一篇,这个系列正在连载中,我计划用这个系列的文章来分享一些网络抓包分析的实用技术。这些文章都是总结了我的工作经历中遇到的问题,经过精心构造和编写,每个文件附带抓包文件,通过实战来学习网络抓包与分析。
如果本文对您有帮助,欢迎扫博客右侧二维码打赏支持,正是订阅者的支持,让我公开写这个系列成为可能,感谢!
如果您正在阅读的是题目类的文章,这个目录内容正好用来隔离其他读者的评论。读完题目可以稍作暂停,进行思考,继续向下滑动,可能会被其他的读者剧透答案。
没有链接的目录还没有写完,敬请期待……
- 序章
- 抓包技术以及技巧
- 理解网络的分层模型
- 数据是如何路由的
- 网络问题排查的思路和技巧
- 不可以用路由器?(答案和解析)
- 网工闯了什么祸?(答案和解析,阅读加餐!)
- 重新认识 TCP 的握手和挥手(答案和解析)
- 3.5 秒初始延迟问题 (答案和解析)
- 网络断断续续…… (答案和解析)
- 延迟增加了多少?(答案和解析)
- 压测的时候 QPS 为什么上不去?(答案和解析)
- TCP 下载速度为什么这么慢?(答案和解析)
- 请求为什么超时了?(答案和解析)
- 0.01% 的概率超时问题 (答案和解析)
- 后记:学习网络的一点经验分享
与本博客的其他页面不同,本页面使用 署名-非商业性使用-禁止演绎 4.0 国际 协议。























