如果 TCP 连接中 3 次握手后的第一个数据段被丢弃,会发生什么情况

问题描述 投票:0回答:1

如果我有两个主机的场景。主机 A 和主机 B。假设主机 A 向主机 B 发起 TCP 连接。假设在 3 次握手后已建立连接。如果主机 A 发送到主机 B(握手后)的第一个数据段丢失/丢弃,会发生什么情况。我们可以在第一张图中看到第二个段丢失,因此第一个段的重复 ack 不断发送到主机 A,因为 ack 是累积的。我不明白如果握手后发送的第一个数据段被丢弃会发生什么。在这种情况下,在超时间隔内将发送什么 ack #。

我的假设是这涉及最初的 3 次握手。当 3 次握手完成时,我们有一个 ack # = x + 1,如第二张图所示。因此,我假设 x + 1 的 ack # 不断发送,直到快速重传图(第一张图片)中发生重传。我的理解正确吗?

networking tcp retransmit-timeout
1个回答
1
投票

假设

A
在 3 次握手后发送 3 个数据包来启动 TCP 流。

  1. {seq=92, size=8}
  2. {seq=100, size=20}
  3. {seq=120, size=10}

假设第一个数据包在网络上丢失,但 B 收到了第二个和第三个数据包。

B
实际上会丢弃第二个和第三个数据包,因为它会观察到序列号(100 和 120)超出预期(92)。请记住,B 的状态机在 3 次握手后知道第一个序列号应该是什么。

因此,它将两个不按顺序到达的数据包视为根本没有到达。

A
耐心等待第一个ACK,但始终没有到达。最终它会超时并从序列 = 92 开始重新传输数据

我是说它重新传输数据,但数据包大小不一定相同。它可以选择发送 seq=92 且 size=38 的单个 TCP 分段。

© www.soinside.com 2019 - 2024. All rights reserved.