# TCP TIME_WAIT 与 PAWS 机制说明
快速回收 TIME_WAIT 会破坏 TCP 用来区分“旧连接”和“新连接”的时间边界,
导致 PAWS 使用的 `ts_recent` 把“新连接的包”误判成“旧连接的迟到包”,从而直接丢弃。
---
## 在不开快速回收时的流程
1. **连接 A 关闭**
2. **进入 TIME_WAIT**(2MSL,≈60~120 秒)
- 相同四元组不能复用
- 旧连接的所有迟到包能自然消失
3. **TIME_WAIT 结束**
4. **新连接 B 建立**
- 新的 ISN
- 新的 TSval 基线
- `ts_recent` 被安全更新
> 👉 TIME_WAIT 给了 PAWS 一个“安全隔离区”
# TCP 快速回收 TIME_WAIT(tcp_tw_recycle)流程示意
当启用快速回收 TIME_WAIT 后,TCP 连接的处理流程如下:
---
## 1️⃣ 连接 A 关闭
- 客户端或服务器主动关闭连接。
- 正常情况下会进入 TIME_WAIT,但快速回收开启后:
- TIME_WAIT 状态被提前清理。
- 四元组(src_ip, src_port, dst_ip, dst_port)可以被立即复用。
---
## 2️⃣ 新连接 B 尝试建立
- 使用相同四元组立即发送 SYN。
- TCP 时间戳 TSval 可能:
- 与旧连接 TSval 接近
- 或由于客户端 NAT/重启导致比服务端 ts_recent 记录的值小
---
## 3️⃣ ts_recent 检查
- PAWS(Protection Against Wrapped Sequence numbers)使用 ts_recent 防止旧连接包干扰新连接。
- ts_recent 逻辑:
```text
if new_SYN_TSval <= ts_recent[四元组]:
drop SYN
else:
accept SYN
ts_recent 更新为 new_SYN_TSval
快速回收 TIME_WAIT 破坏了“旧连接和新连接”的时间边界:
ts_recent 认为新连接的 SYN 是“旧连接迟到的包”
直接丢弃 SYN