如何调整初始TCP重传超时?


14

对于大多数基于LAN的应用程序,TCP RTO的初始值为3s太长。我该如何调低它?是否有系统?

Answers:


12

不,你不能;它被硬编码在内核中。因此,更改内核并重新编译。

#define TCP_TIMEOUT_INIT ((unsigned)(3*HZ))     /* RFC 1122 initial RTO value   */

这就是您应该包含在include / net / tcp.h中的内容。

但是我可以看到有人提供了补丁,即使我自己从未尝试过


4

初始设置不会对您的整体性能产生太大影响,因为RTO会根据网络条件进行自我调整。如果您确实更改了RTO,则可以将其设置为1秒(但不能更低)。

RFC 1122中对此进行了讨论:

        The following values SHOULD be used to initialize the
        estimation parameters for a new connection:
        (a)  RTT = 0 seconds.

        (b)  RTO = 3 seconds.  (The smoothed variance is to be
             initialized to the value that will result in this RTO).

        The recommended upper and lower bounds on the RTO are known
        to be inadequate on large internets.  The lower bound SHOULD
        be measured in fractions of a second (to accommodate high
        speed LANs) and the upper bound should be 2*MSL, i.e., 240
        seconds.

        DISCUSSION:
             Experience has shown that these initialization values
             are reasonable, and that in any case the Karn and
             Jacobson algorithms make TCP behavior reasonably
             insensitive to the initial parameter choices.

RFC 6298是一项提议的更新(于2011年6月发布),其中说RTO可以初始化为一个较低的值(但不小于1秒),并且包含一个附录,该附录包含证明1秒作为合理初始值的数据。


1秒是应该的,不是必须的;顺便说一句,您可以查看一个著名搜索引擎前端的rto =)
SaveTheRbtz 2011年

我不同意“初始设置不会对您的整体效果产生太大影响”这一说法。这可能会影响您在初始通信中的应用程序错误率。当后端应用程序将读取超时设置为3秒或更短时,在初始TCP通信期间网络上的数据包丢失(正常事件,如果有任何拥塞)将无法正确地重新传输丢失的数据包。初始值必须小于接收端设置的读取超时,并且应基于您所运行的网络的QOS进行设置。

3秒是本地网络上的永恒,而丢包是真正快速的一个网络,其往返时间为毫秒。

我同意现代CPU可以在3秒内完成很多工作。我的理解是,此初始延迟仅在驱动程序初始化时应用,仅在系统首次启动时才会发生。
杰伊·埃尔斯顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.