TCP重传如何? 哪个公式取决于将重新发送多少个数据包? 我知道它设置在立方tcp的某个地方,但在哪里?
对Linux中的工作方式感兴趣。我使用Debian 8只是看转储。我使用netcat设置连接到27000端口。我通常在服务器上做,使iptables丢弃端口27000上的所有数据包并发送数据包(并查看数据包被重新发送的次数。)。
答案 0 :(得分:1)
这是一个非常广泛的问题。
不,这基本上不是CUBIC。
重传首先在TCP“基本”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