在 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 的重传也应该延迟到有效窗口大小不等于 0
如果必须延迟数据包 1 的重传,如果在超时后收到数据包 1 的确认,并且在此时间之前,在有效窗口大小变为不等于 0之后,是否必须发送它?
发送方的拥塞窗口大小也将降至 1,那么发送方缓冲区中的数据包会发生什么情况?
编辑:考虑接收器窗口仅在连接建立阶段开始时公布一次,并在连接期间被认为是恒定的。