乐趣区

关于linux:我们为什么要关闭-TCP-timestamp

sysctl -w net.ipv4.tcp_timestamps=0

如君所见,咱们在所有的 Linux 服务器上,应用上述命令敞开了 TCP timestamp。

查看原文

TCP Timestamp 是什么

Timestamp 是 TCP 协定包首部的可选项,蕴含 2 个值,别离是报文发送的工夫 (TSval),
以及收到的对端发送来的 TSval 原样返回 (TSecr)。

+-------+-------+---------------------+---------------------+
|Kind=8 |  10   |   TS Value (TSval)  |TS Echo Reply (TSecr)|
+-------+-------+---------------------+---------------------+
    1       1              4                     4

RFC-7323 给出了具体的阐明和用处,这篇文章也有个好名字,值得一读。照 RFC-7323 描
述,TCP Timestamp 由两个重要的理由,然而这两个理由都没有压服咱们:

  1. PAWS, Protection Against Wrapped-Around Sequence-Numbers。在超高速网络中,可

能须要一个大的 TCP 窗口,这种状况下,有些包重传的时候,这个重传的旧包可能会当成
新的包。假如 TCP 接管窗口有 4G 那么大,因为序列号是 4 字节的,有一个序列号是 x
的包失落重传的时候,这个包可能被当作 x+4G 地位的包。当初是 2022 年,我不置信这样的
事件真会产生。

  1. 能够帮忙计算 RTT。Selective ACK 也能够啊。

此外,我还找到一个理由:

  1. TCP Cookie 能够利用 TSval 保留 cookie,缩小哈希抵触。是个有吸引力的理由,但

SYN FLOOD 也不是每时每刻都在产生的。

为什么要敞开 TCP Timestamp

既然 TCP Timestamp 存在的理由没有压服咱们,那就没有必要顺便关上它。但要咱们将它
敞开,依然须要令人信服的理由。

  1. TSval 的值是递增的,这就有人靠这个推算服务器的启动工夫。
    这个问题在 2016 年修复了。
  2. 关上了 Timestamp 之后每个包多了 12 字节,本来是 20 字节。在 Linux 源码
    include/net/tcp.h 能够看到 TCPOLEN_TSTAMP_ALIGNED
    有人试验过关掉 Timestamp 之后带宽减少了约 1%
  3. S3 遇到过对于 Timestamp 的诡异问题。

最终,咱们敞开了 TCP Timestamp 选项。

退出移动版