当 AIMD TCP 连接中的**延迟 ACK**“最终会达到超时”时,发送方缓冲区中的数据包会发生什么情况?

网络工程 tcp 协议论 传输协议 第 4 层
2022-03-04 00:30:39

在 AIMD TCP 连接中,当发送方特定数据包的延迟 ACK “最终会达到超时”时,发送方缓冲区中的数据包会发生什么情况?

假设发送方拥塞窗口的单位是(数据包),并且发送方有拥塞窗口 = 2 个数据包(已经发送),并且此时接收方占用的缓冲区等于(已经从发送方接收到的 2 个数据包中的 2 个,即缓冲区已被完全占用)。

当超时发生时,由于 AIMD 的乘法减少,发送方的拥塞窗口大小将下降到 1 个数据包,并且发送方发送的有效窗口已经 = 0,(即发送方和发送方之间的路径中没有可用空间)接收方接受更多数据包),那么在这种情况下,发送方缓冲区中的数据包(数据包 1 和数据包 2)会发生什么情况?
假设发送方缓冲区包含数据包 1 和数据包 2,并且数据包 1 延迟 ACK 导致超时。
注意:

 MAXWINDOW = min(sender congestion window, advertised window of the receiver)
 Effective window = MAXWINDOW -[last packet sent - last packet ACKED]
  1. 我知道超时必须发生,但是在零有效窗口大小时如何发生重传。在这种情况下,重传不应在超时后立即发生的另一件事是,接收方将不会接收重传的数据包 1,因为另一侧的缓冲区即接收方已被完全占用。

  2. 因此数据包 1 的重传也应该延迟到有效窗口大小不等于 0

  3. 如果必须延迟数据包 1 的重传,如果在超时后收到数据包 1 的确认,并且在此时间之前,在有效窗口大小变为不等于 0之后,是否必须发送它?

  4. 发送方的拥塞窗口大小也将降至 1,那么发送方缓冲区中的数据包会发生什么情况?

编辑:考虑接收器窗口仅在连接建立阶段开始时公布一次,并在连接期间被认为是恒定的。

1个回答

您似乎将拥塞窗口与接收窗口混淆了。拥塞窗口总是 >=1。接收窗口可以为0。拥塞窗口由发送方控制,只有发送方知道,接收窗口由接收方控制,发送给发送方。它们是两种完全不同的东西。

接收窗口在 ACK 中通告,因此没有 ACK,接收窗口不会改变。如果 ACK 丢失,那么拥塞窗口将下降到 1,但接收窗口不会改变,任何丢失 ACK 的数据包都可以重传。