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
根据此 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