> 技术文档 > 服务端处于 TIME_WAIT 状态的 TCP 连接,收到相同四元组的 SYN 后会发生什么?详解

服务端处于 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 状态进入三次握手流程
服务端处于 TIME_WAIT 状态的 TCP 连接,收到相同四元组的 SYN 后会发生什么?详解

三、收到非法 SYN

服务端处于 TIME_WAIT 状态的 TCP 连接,收到相同四元组的 SYN 后会发生什么?详解
服务端收到 RST 后,看 Linux 内核参数 tcp_rfc1337 值

  • /proc/sys/net/ipv4/tcp_rfc1337=0(默认):提前结束 TIME_WAIT 状态,释放连接
  • /proc/sys/net/ipv4/tcp_rfc1337=1:丢掉 RST