了解 TCP 的最佳方法是打开 Wireshark,使用 HTTP 或任何 TCP 协议下载一个大文件,然后查找表示 DUP ACK、Fast Retransmit 或 Retransmit 的黑色行以在屏幕上滚动。
通常,您会在 Internet 连接上看到一些数据包丢失,您可以自己进一步深入研究,以查看您自己的客户端为丢失的数据包发送 DUP ACK。
或者更好的是,进行上传,您可以看到您的客户端在看到 3 个相同的 ACK 后进行快速重传。
您还可以仔细查看 TCP 选项并查看 manbearpig 所指的 SACK。
关于快速重传的另一个很好的信息来源是 RFC。第二段回答了您关于为什么 3 ACK 与 1、2、4、5 的评论。
https://www.rfc-editor.org/rfc/rfc2001
3. 快速重传
1990 年提出了对拥塞避免算法的修改[3]。在描述更改之前,请意识到 TCP 可能会
在
收到乱序段时生成立即确认(重复 ACK)([1] 的第 4.2.2.21 节,并注意
这样做的一个原因是实验性快速
重传算法)。这个重复的 ACK 不应该被延迟。
这个重复的 ACK 的目的是让另一端知道一个段被乱序接收,并告诉它
期望的序列号。
由于 TCP 不知道重复 ACK 是由丢失的段引起的还是只是段的重新排序引起的,因此它等待接收少量重复的 ACK。假设如果
只是对段进行重新排序,则
在处理重新排序的段之前将只有一个或两个重复的 ACK,然后将
生成新的 ACK。 如果连续
收到三个或更多重复的 ACK ,则强烈表明段已
丢失。 然后,TCP 会重新传输看似
丢失的数据段,而无需等待重新传输计时器
到期。