我是TCP协议的新手,最近有个问题困扰了我一段时间……
我的问题来自以下示例:
假设我们的MSS 是 1KB,最大序列号是 30K-1。我们可以忽略拥塞控制窗口并假设接收器的窗口大小恒定为 30K(接收器能够立即将数据分段传送到应用层)。
假设初始 seqNum 为 0,sender 同时发出 30 个数据包,seqNum 分别为 0, 1K, 2K ... 28K 和 29K。
接收方成功接受了所有 30 个数据包,并相应地回复了 30 个 ACK 数据包,每个数据包的确认编号为1K、2K、... 29K 和 0。(这是第一个 ACK 数据包 1K 出现的地方)
但是,由于乱序交付,发送方在 1K 之前获得了 2K 确认号。虽然现在还不是问题,因为发送方可以通过累积确认的原理推断出前两个数据包被接受了。
然后,发送方再发送两个带有 seqNum 0 和 1K 的数据包以及更新的数据(由于序列号环回,序列号 0 和 1K 被重用),接收方接受它们并回复 ACK 数据包1K和 2K。(这是第二个ACK包1K出现的地方)
但是,这导致了一个问题,即存在两个确认编号均为 1K 的 ACK 数据包。发送方如何判断哪个 ACK 数据包比另一个新?