“终点将拥堵视为延迟增加;因此,它们会加剧拥堵而不是缓解拥堵。”
- 有人能向我解释一下这句话吗?
第二个问题:为什么快速恢复不能很好地从多次丢失中恢复?
- 以下是我对快速恢复的理解:在收到三个重复 ACK 后,TCP 启动重新传输,然后执行快速恢复:拥塞窗口减半,并为每个重复 ACK 增加一个段。因此,我认为这包括已启动快速重传的三个重复 ACK,这意味着对于每个进一步传入的重复 ACK,cwnd_new = cwnd_old + 3 + 1。出于某种原因(为什么?),在第一个非重复 ACK 到达接收方后,cwnd 设置为 cwnd_old / 2,然后执行拥塞避免。
感谢任何帮助!
答案1
在没有更多背景信息的情况下,我们只能推测对你说这话的人到底想表达什么,但我们还是开始吧。
TCP(Reno)中的重传可以通过两种方式触发:RTO 和 DUPACK。RTO 是重传超时 - 当发送方数据没有 ACK 时达到的状态。DUPACK - 当发送方丢失数据包或重新排序时发送重复确认。
对于您的第一个问题:我看不出 TCP 是如何加剧拥塞的,除非这与 RTO 有关。当达到 RTO 时,TCP 会在即时时间内使网络更加拥塞,因为它会重新发送未确认的段。但是,RTO 事件会将拥塞窗口重置为一个段,然后开始慢启动阶段,这应该会在重新传输后缓解拥塞。
对于你的第二个问题:这是因为TCP 里诺算法在遇到多次丢失时,通常会达到唯一的恢复机制是重传超时的状态。这是如何发生的,请观看此视频以了解示例:https://www.youtube.com/watch?v=M6pG9sEVTkg
For some reason (why?) after the first non-duplicate ACK arrives at the receiver, cwnd is set to cwnd_old / 2 and then Congestion Avoidance is performed.
当收到正常确认时,拥塞避免启动,它将 cwnd 定义为cwnd_old / 2
(cwnd_old 是在超时或 3xdupacks 期间达到的 cwnd_old)。选择这个值是因为它很方便。您不想从 开始,cwnd_old
因为它会给您带来问题;您不想从 1 开始,因为它效率不高,因此从 @ cwnd_old / 2 开始是相当合理的。