TIME-WAIT 连接拒绝接受新的 SYN,即使它有更大的 ISN

TIME-WAIT connection refuse to accept a new SYN even it has a lager ISN

根据此 SO post Can a TCP port be re-used before TIME-WAIT expires?,如果新的 SYN 数据包具有更大的 ISN,则可以重用 TIME-WAIT。

但如果 ISN 大于旧连接,则以下 SYN 失败事件。

Detailed info:
Failed SYN: NO(54365) , ISN(3853063683)
Elder connection max packet: NO(50379), ISN(2103445551)

知道了。

服务器和客户端都启用了选项'net.ipv4.tcp_timestamps'(centos下默认启用)。所以服务器会先检查新来的SYN的时间戳(Ignore ISN now):如果它比旧连接对应的值大,那么服务器重用TIMEWAIT连接(不管ISN现在是小还是大)。否则认为是老连接丢包,发送老连接的最后一个ack(不管现在ISN是小还是大)。

数据包 54365 的时间戳(tsval) 值小于数据包 50379,因此失败。

有用参考:https://vincent.bernat.ch/en/blog/2014-tcp-time-wait-state-linux