0

TCP如何重传?哪个公式取决于将重新发送多少数据包?我知道它设置在立方 tcp 的某个地方,但是在哪里?

对它在 Linux 中的工作方式感兴趣。我使用 Debian 8,只是寻找转储。我使用 netcat 建立了到 27000 端口的连接。我通常在使 iptables 丢弃端口 27000 上的所有数据包并发送数据包的服务器上执行此操作(并查看该数据包被重新发送了多少次。)。

4

1 回答 1

1

这是一个非常广泛的问题。

不,这基本上不是也不一定是 CUBIC。

重传首先在 TCP "basic" RFC 793 (1981),第 3.7 节数据通信,段落“重传超时”中指定。

从那时起,有很多(真的很多[*])增强。一个非常引人注目的是“慢启动”,最后由 RFC 5681 指定,但其根源可以追溯到 1997 年 RFC 2001,“TCP 慢启动、拥塞避免、快速重传和快速恢复算法”。

在这个领域没有“一刀切”,总是需要权衡取舍。此外,“智能”算法将占用更多空间(软件 + CPU 使用),因此它们可能会被使用,也可能不会被使用,或者甚至只是可用,具体取决于应用程序(想想嵌入式设备)。并且由于这些东西在实现中(即在主机之间交换的数据中看不到),您永远无法确定哪个主机使用哪个。例如,您会在段中看到 TCP 窗口的大小和比例,但您不会知道它是由哪种算法管理的。

至于 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:高级拥塞控制”部分中有十几个可用。

*: https ://en.wikipedia.org/wiki/TCP_congestion-avoidance_algorithm

于 2016-04-04T14:57:16.183 回答