【问题标题】:TCP Retransmission: how many packets will be re-sent?TCP 重传:将重新发送多少个数据包?
【发布时间】:2016-04-04 13:33:54
【问题描述】:

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

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

【问题讨论】:

  • 这是一个非常广泛的问题(见我的回答)。 您可能希望更具体。您的问题很可能会被标记为“太宽泛”或离题(因为与编程没有直接关系),然后搁置。

标签: tcp retransmit-timeout


【解决方案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

【讨论】:

  • 我也使用 Debian(只是我使用 netcat 并查看转储)。这确实是一个难题,我现在了解什么是 rto,但我还没有找到总 rto(或总重传数据包)。我不明白为什么选择 /proc/sys/net/ipv4/tcp_retries2。我会继续看 RFC。
  • 所以你当然读过kernel.org/doc/Documentation/networking/ip-sysctl.txt,也许还有(122页长)RFC 1122。这本身就是一个巨大的话题,Linux网络实现是一个巨大的一堆代码。 2 条建议: 1/ 请记住,在网络中 Linux 并不“孤单”:我在嵌入式 Linux 上工作了 15 年,主要是在网络中间件上,而且经常发现自己与 other TCP/IP 实现,从 Windows CE 到专有的航空电子设备堆栈再到其他。所以你从 Linux 中学到的东西不会转化为“现实世界”。
  • (...和第二条建议,) 2/ 可能有一些更简单的 TCP/IP 拥塞处理实现需要研究,看看 eCos、RTEMS、FreeRTOS 等。但如果你想专注在 CUBIC 上,就这样吧,也许 Linux 实现没问题。至于我自己,我什至不知道(也不需要知道)/proc/sys/net/ipv4/tcp_retries2 是否与 CUBIC 有任何关系。示例:只是为了测试,我切换到 Reno,它仍然存在,具有相同的 '15' 值。
  • 非常感谢!用 RENO 工作 tcp_retries2(其实都是误会。tcp_retries2 = 10,但是包重传的数量是 11。tcp_retries2 = 7,重传的数量是 10)。非常有趣的主题(感谢您的建议:eCos、RTEMS、FreeRTOS)。也许有一天我会学习如何在CUBIC中计算最后一个重传包。
猜你喜欢
  • 2013-08-23
  • 2017-03-11
  • 1970-01-01
  • 2019-01-15
  • 2014-06-14
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多