接收者是 A ,发送者是 B
接收方将窗口大小设置为 1000,然后 B 发送段。
假设第 500 至 521 段丢失。
然后接收方 A 会ack
向发送方发送一个 501 的段。一旦发送方收到ack
501 的段,它就会再次开始发送 501 到 1000 的段。
发送方是否会发送所有 501 到 1000 个消息而不期望中间收到确认?
答案1
不,发送方将以正常方式等待确认。
思考这个问题的最佳方式是,从发送方最基本的原语开始:发送、接收确认、标记为已接收(当然,许多序列并行运行)。如果已发送但未确认,则重试整个过程。
这也适用于确认数据包丢失,而不仅仅是数据。TCP(=大多数实现)应对严重数据包丢失的最佳描述是“它几乎不起作用”
我很好奇为什么你需要如此详细的知识,它适用于实际问题吗?
答案2
这看起来更像是一项家庭作业:>如果它不是一项练习,最好告诉我们您使用的是哪种 TCP(里诺、维加斯、太浩湖……)?
回答你的问题...发送方将等待超时后再重新传输数据包。为了限制这种延迟(在某些情况下),某些实现支持三重确认。如果接收方发现损坏的数据包,它会发回三重确认,而不是什么也不做。因此,当发送方收到该数据包时,他会立即开始传输。
此外,这取决于您的实现是否使用 go-back-n、选择性重复等。每种情况下都遵循不同的方法。