服务端处于 TIME_WAIT 状态的 TCP 连接,收到相同四元组的 SYN 后会发生什么?详解
文章目录
- 一、先判断 SYN 是否合法
- 1、开启「时间戳」机制
- 1.1、合法 SYN
- 1.2、非法 SYN
- 2、关闭「时间戳」机制
- 1.1、合法 SYN
- 1.2、非法 SYN
- 二、收到合法 SYN
- 三、收到非法 SYN
一、先判断 SYN 是否合法
1、开启「时间戳」机制
1.1、合法 SYN
客户端的 SYN「序列号」比服务端「期望下一个收到的报文序列号」要大,并且 SYN「时间戳」比服务端「最后收到的报文时间戳」要大
1.2、非法 SYN
客户端的 SYN「序列号」比服务端「期望下一个收到的报文序列号」要小,或者 SYN「时间戳」比服务端「最后收到的报文时间戳」要小
2、关闭「时间戳」机制
1.1、合法 SYN
客户端的 SYN「序列号」比服务端「期望下一个收到的报文序列号」要大
1.2、非法 SYN
客户端的 SYN「序列号」比服务端「期望下一个收到的报文序列号」要小
二、收到合法 SYN
提前结束 TIME_WAIT 状态进入三次握手流程
三、收到非法 SYN
服务端收到 RST 后,看 Linux 内核参数 tcp_rfc1337 值
- /proc/sys/net/ipv4/tcp_rfc1337=0(默认):提前结束 TIME_WAIT 状态,释放连接
- /proc/sys/net/ipv4/tcp_rfc1337=1:丢掉 RST