不知道我是不是写过了。

sysctl中有一个内核设定:

net.ipv4.tcp_timestamps = 1

这个值默认被设定为1,但是当这个设定被设定为0时,会导致tcp序列号高速绕回,从而导致传输速度上限。

tcp的最大报文生存时间(MSL)默认值为60s(这也是为何TIME_WAIT默认120s的原因)。而tcp序列号只有32位,未来区域只有2^31。

**31 * 8 / 60.0 / 1024 / 1024 = 273Mbps

因此当关闭timestamp时,最大传输速率不超过273Mbps。

在公司内部曾出现过这个现象(由于某个理由,错误的关闭timestamp),在自建系统上的测试也验证了这点。

使用iperf对性能进行测试,最大速度为266Mbps。

但请注意,被设定后,需要长达10分钟以上的时间才会发生效果。因此需要在设定后半小时后,去用iperf检验设定是否生效。