【问题标题】:How does TCP deal with timeouts with cwnd?TCP 如何处理 cwnd 的超时?
【发布时间】:2010-10-06 19:18:09
【问题描述】:

最近一直在研究TCP拥塞控制,但是有一个问题困扰着我……

如果我理解正确,除非 cwnd(拥塞窗口)和 rwnd(接收方窗口)允许,否则 TCP 不会发送新数据。换句话说:

if(flightSize < MIN(cwnd, rwnd))
{
    // Send some new data (if possible)
    // Taking into account other details that we don't need
    // to get into such as Nagle's algorithm, etc.
}

其中 flightSize 是已发送但尚未确认的数据量。

让我们假设 TCP 正在运行,发送数据,并酌情增加 cwnd。假设 cwnd = [10 个完整数据包],而 flightSize == cwnd。然后在网络中发生丢包,发送方的重传计时器关闭。 New Reno 如何/何时重新传输未确认的数据?

这是我目前的理解/误解:

当定时器关闭时,cwnd 将被重置为 [1 full packet],最旧的发送但未确认的数据包将被重新发送,rto 将加倍,重传定时器将被重置。所以如果我们说定时器关闭时rto是1秒,它会更新为2秒,重传定时器会重新启动,等待时间为2秒。

这就是我感到困惑的原因:

在上述情况下,TCP 只会重新发送一个数据包。即使该数据包立即得到确认,TCP 也无法发送任何新数据,因为 cwnd 仍然小于 flightSize。那么它有什么作用呢?坐等到 2 秒重传计时器再次关闭,然后再重新发送另一个数据包?由于无法发送新数据,是否会强制重新发送旧数据?它是否重置了 flightSize,并重新考虑所有以前发送的数据未发送?

我已经阅读了我能找到的所有 RFC,以及各种关于 TCP 的指南和解释。我一定是在什么地方漏掉了什么……


澄清: 我正在考虑多次丢失,其中 TCP 不使用 SACK。

如果收到重复的确认,TCP 将在第 3 次重复确认时重新发送最旧的确认(快速重传),并在第 4 次重复确认之后发送新数据(快速恢复)。我的问题是如果 TCP 发送方收到少于 3 次重复确认会发生什么?

【问题讨论】:

  • 我在你的标题上尽力了。它可能已关闭,但您的原件几乎没用。请随时对其进行进一步编辑以澄清。

标签: tcp


【解决方案1】:

我在“TCP/IP Illustrated, Volume 2”一书中找到了答案,第 25.11 节,第 842-844 页:

[在重传超时]下一个 发送序列号 (snd_nxt) 已设置 到最旧的未确认序列 编号(snd_una)。 ...通过移动 snd_nxt 返回,[TCP 可以开始 重新传输所有未确认的数据]。

换句话说,flightSize 将被重置,因此可以继续发送数据(在慢启动模式下)。只是其中一些数据可能是之前已经发送过的数据。不过,可能会出现累积确认,从而阻止所有数据重新发送。

【讨论】:

    【解决方案2】:

    要求澄清:您是否考虑单个数据包丢失?还是一个窗口内多次亏损?

    在单个丢失的情况下,由于在丢失后收到的数据包,将收到重复的确认。我相信 New Reno 将传输后续数据包(“新数据”)以响应重复的确认。然后这会重置超时计时器。

    【讨论】:

    • 我正在考虑多次丢失,其中 TCP 未使用 SACK。如果收到重复确认,TCP 将在第 3 次重复确认时重新发送最旧的确认(快速重传),并在第 4 次重复确认之后发送新数据(快速恢复)。但是如果 TCP 发送方只得到 2 次重复确认呢?
    • 我正在考虑多次丢失,其中 TCP 未使用 SACK。如果收到重复确认,TCP 将在第 3 次重复确认时重新发送最旧的确认(快速重传),并在第 4 次重复确认之后发送新数据(快速恢复)。但是如果 TCP 发送方只得到 2 次重复确认呢?
    • 如果远程不再接收数据包(例如,丢失或窗口结束),您只会停止收到重复的确认。但是,如果您真的看到多次丢失,那应该表明拥塞并且您可能会以缓慢启动的速度结束。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 2016-12-04
    • 2012-01-10
    相关资源
    最近更新 更多