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 由两个重要的理由,然而这两个理由都没有压服咱们:
- PAWS, Protection Against Wrapped-Around Sequence-Numbers。在超高速网络中,可
能须要一个大的 TCP 窗口,这种状况下,有些包重传的时候,这个重传的旧包可能会当成
新的包。假如 TCP 接管窗口有 4G 那么大,因为序列号是 4 字节的,有一个序列号是 x
的包失落重传的时候,这个包可能被当作 x+4G 地位的包。当初是 2022 年,我不置信这样的
事件真会产生。
- 能够帮忙计算 RTT。Selective ACK 也能够啊。
此外,我还找到一个理由:
- TCP Cookie 能够利用 TSval 保留 cookie,缩小哈希抵触。是个有吸引力的理由,但
SYN FLOOD 也不是每时每刻都在产生的。
为什么要敞开 TCP Timestamp
既然 TCP Timestamp 存在的理由没有压服咱们,那就没有必要顺便关上它。但要咱们将它
敞开,依然须要令人信服的理由。
- TSval 的值是递增的,这就有人靠这个推算服务器的启动工夫。
这个问题在 2016 年修复了。 - 关上了 Timestamp 之后每个包多了 12 字节,本来是 20 字节。在 Linux 源码
include/net/tcp.h
能够看到TCPOLEN_TSTAMP_ALIGNED
。
有人试验过关掉 Timestamp 之后带宽减少了约 1% - S3 遇到过对于 Timestamp 的诡异问题。
最终,咱们敞开了 TCP Timestamp 选项。