TCP 重传:将重发多少数据包?
TCP Retransmission: how many packets will be re-sent?
TCP重传是怎么实现的?
重发多少包决定哪个公式?
我知道它设置在 cubic tcp 的某个地方,但是在哪里?
对它在 Linux 中的工作方式感兴趣。我使用 Debian 8,只是在寻找转储。我使用 netcat 建立了到 27000 端口的连接。我通常在使 iptables 丢弃端口 27000 上的所有数据包并发送一个数据包的服务器上(并查看该数据包已重新发送了多少次。)。
这是一个非常宽泛的问题。
不,这基本上不是也不一定是 CUBIC。
重传首先在 TCP "basic" RFC 793 (1981), section 3.7 Data Communication, paragraph "Retransmission Timeout".
中指定
从那时起,有很多(真的 很多[*])改进。一个非常值得注意的是 "slow-start",最后由 RFC 5681 指定,但其根源可以追溯到 1997 RFC 2001,"TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery Algorithms".
这个领域没有 "one size fits all",总有取舍。另外 "smart" 算法将占用更多空间(软件 + CPU 使用),因此它们可能会或可能不会被使用,甚至可能只是可用,具体取决于应用程序(想想嵌入式设备)。由于这些东西 在实现中 (即在主机之间的交换数据中看不到),你永远无法确定哪个主机使用哪个。例如,您会在段中看到 TCP window 大小和比例,但您不知道它是由哪种算法管理的。
至于Linux,从3.2开始它应该默认到PRR。在此之前是 CUBIC,之前是 BIC。
不过,默认并不意味着它是唯一可用的。在我的 debian stock 4.4.0 内核上,它是 CUBIC:
jbmaillet@sumo:~$ cat /proc/sys/net/ipv4/tcp_congestion_control
cubic
尽管 Reno 也可用:
jbmaillet@sumo:~$ cat /proc/sys/net/ipv4/tcp_allowed_congestion_control
cubic reno
...在内核配置的 "TCP: advanced congestion control" 部分中有十几个可用。
*:
https://en.wikipedia.org/wiki/TCP_congestion-avoidance_algorithm
TCP重传是怎么实现的? 重发多少包决定哪个公式? 我知道它设置在 cubic tcp 的某个地方,但是在哪里?
对它在 Linux 中的工作方式感兴趣。我使用 Debian 8,只是在寻找转储。我使用 netcat 建立了到 27000 端口的连接。我通常在使 iptables 丢弃端口 27000 上的所有数据包并发送一个数据包的服务器上(并查看该数据包已重新发送了多少次。)。
这是一个非常宽泛的问题。
不,这基本上不是也不一定是 CUBIC。
重传首先在 TCP "basic" RFC 793 (1981), section 3.7 Data Communication, paragraph "Retransmission Timeout".
中指定从那时起,有很多(真的 很多[*])改进。一个非常值得注意的是 "slow-start",最后由 RFC 5681 指定,但其根源可以追溯到 1997 RFC 2001,"TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery Algorithms".
这个领域没有 "one size fits all",总有取舍。另外 "smart" 算法将占用更多空间(软件 + CPU 使用),因此它们可能会或可能不会被使用,甚至可能只是可用,具体取决于应用程序(想想嵌入式设备)。由于这些东西 在实现中 (即在主机之间的交换数据中看不到),你永远无法确定哪个主机使用哪个。例如,您会在段中看到 TCP window 大小和比例,但您不知道它是由哪种算法管理的。
至于Linux,从3.2开始它应该默认到PRR。在此之前是 CUBIC,之前是 BIC。
不过,默认并不意味着它是唯一可用的。在我的 debian stock 4.4.0 内核上,它是 CUBIC:
jbmaillet@sumo:~$ cat /proc/sys/net/ipv4/tcp_congestion_control
cubic
尽管 Reno 也可用:
jbmaillet@sumo:~$ cat /proc/sys/net/ipv4/tcp_allowed_congestion_control
cubic reno
...在内核配置的 "TCP: advanced congestion control" 部分中有十几个可用。
*: https://en.wikipedia.org/wiki/TCP_congestion-avoidance_algorithm