客户端经历哪些 TCP 状态?
- 发送 SYN 报文, 进入
SYN_SENT;
- 收到 SYNACK 并回送 ACK, 连接建立, 进入
ESTABLISHED;
- 关闭连接时发送 FIN 报文, 进入
FIN_WAIT_1;
- 收到服务器 ACK 报文, 进入
FIN_WAIT_2;
- 收到服务器 FIN 报文并回送 ACK, 进入
TIME_WAIT;
- 等待若干时间后关闭连接, 进入
CLOSE;

服务器经历哪些 TCP 状态?
- 创建 TCP 后进入
LISTEN;
- 收到客户端 SYN 并回送 ACK, 进入
SYN_RCVD;
- 收到客户端 ACK, 连接建立, 进入
ESTABLISHED;
- 收到客户端 FIN 并回送 ACK, 进入
CLOSE_WAIT;
- 剩余数据发完后发送 FIN 报文, 进入
LAST_ACK;
- 收到客户端 ACK, 关闭连接, 进入
CLOSE;

SYN 洪泛攻击如何产生?
- 服务器成本: 发出 SYNACK 后必须维持一个半开连接, 等待客户端确认;
- 攻击方式: 攻击者发送大量 SYN 报文段, 但从不确认服务器回送的 SYNACK;
- 后果: 服务器为大量半开连接耗尽资源, 无法服务正常客户端;
SYN cookie 如何防御?
- 不立即分配: 服务器收到 SYN 后不生成半开连接;
- 构造序号: 基于 SYN 报文的 IP 地址与端口号计算出一个 TCP 序列号作为
server_isn;
- 延迟分配: 直到收到客户端回送的合法 ACK 报文, 才创建全开连接并分配资源;