我只是想了解在我的 Linux 机器上 TCP 的情况下重传功能是如何工作的,但是在互联网上你可以找到非常不同的信息,其中大多数已经过时或错误,所以我决定在这里提出这个问题。
当谈到 RTO 时,在 Linux 内核(文件 include/net/tcp.h)中您有两个选择:
#define TCP_RTO_MAX ((unsigned)(120*HZ))
#define TCP_RTO_MIN ((unsigned)(HZ/5))
因此,可以设置数据包重新传输的最小和最大时间。上述两个参数都依赖于HZ
,可以在内核源代码中指定,或者可以通过自定义CONFIG_HZ
,至少在 adm64 的情况下是这样:
$ egrep HZ /boot/config-4.1.0-2-amd64
...
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250
因此最小 RTO 应该在 50ms 左右(250/5)。但是当你检查以下 wireshark 输出时,你会看到一些非常不同的东西:
是一秒。有没有选项也可以影响 RTO 时间?