gpt4 book ai didi

tcp - TCP如何处理cwnd的超时?

转载 作者:可可西里 更新时间:2023-11-01 02:34:09 25 4
gpt4 key购买 nike

最近在研究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 个完整数据包],最旧的已发送但未确认的数据包将被重新发送,rto 将加倍,重传计时器将被重置。因此,如果我们说当计时器关闭时 rto 为 1 秒,它将更新为 2 秒,并且重传计时器将再次启动,等待时间为 2 秒。

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

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

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


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

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

最佳答案

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

[On a retransmission timeout] the next send sequence number (snd_nxt) is set to the oldest unacknowledged sequence number (snd_una). ... By moving snd_nxt back, [TCP can begin to retransmit all unacknowledged data].

换句话说,flightSize 将被重置,因此数据可以继续发送(在慢启动模式下)。只是这些数据中有一部分可能是之前已经发送过的数据。可能会出现一个累积的 ack,以防止重新发送所有数据。

关于tcp - TCP如何处理cwnd的超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/534957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com