TCP三次握手与SYN洪泛攻击
字数 1138 2025-11-02 17:10:18
TCP三次握手与SYN洪泛攻击
题目描述
TCP三次握手是建立网络连接的基础过程,但恶意攻击者可能利用其设计缺陷发起SYN洪泛攻击(SYN Flood)。请解释三次握手的步骤,并说明SYN洪泛攻击的原理及防御方法。
1. TCP三次握手流程
TCP通过三次握手确保双方通信能力正常,步骤如下:
步骤1:客户端发送SYN包
- 客户端生成随机初始序列号(例如
x),将TCP标志位中的SYN设为1,发送SYN包到服务器。 - 此时客户端进入
SYN_SENT状态,等待服务器响应。
步骤2:服务器回复SYN-ACK包
- 服务器收到SYN包后,分配连接资源(如缓冲区),生成自己的随机序列号(例如
y),并设置SYN=1和ACK=1。 - 确认号(Acknowledgment Number)设为
x+1,表示已收到客户端的序列号x。 - 服务器进入
SYN_RECEIVED状态。
步骤3:客户端发送ACK包
- 客户端检查确认号是否为
x+1,确认无误后发送ACK=1的包,确认号设为y+1。 - 服务器收到后,双方进入
ESTABLISHED状态,连接建立完成。
关键点:三次握手确保双方均能发送和接收数据,且序列号随机化避免旧连接干扰。
2. SYN洪泛攻击原理
攻击者利用三次握手的缺陷:
- 在步骤2中,服务器收到SYN包后需分配资源并等待客户端的ACK(默认等待数十秒)。
- 攻击者伪造大量虚假IP的SYN包,服务器不断分配资源,但永远收不到第三步的ACK回复。
- 服务器资源被耗尽,无法响应合法用户的连接请求,导致服务拒绝(DoS)。
举例:
攻击者发送SYN包时源IP随机伪造,服务器向不存在的IP发送SYN-ACK,最终资源池(如半连接队列)被占满。
3. 防御SYN洪泛攻击的方法
(1)SYN Cookie
- 服务器在步骤2中不立即分配资源,而是通过加密算法(如哈希)生成序列号
y,将连接信息编码其中。 - 收到客户端的ACK后,验证序列号合法性再分配资源。这样攻击包不会占用实际资源。
(2)增加半连接队列长度
- 通过操作系统调整半连接队列大小(如Linux的
tcp_max_syn_backlog参数),缓解少量攻击。
(3)防火墙与入侵检测系统(IDS)
- 设置阈值监控SYN请求频率,自动拦截异常IP。
- 使用黑名单过滤已知恶意源。
(4)负载均衡与云防护
- 通过CDN或云安全服务(如AWS Shield)分散流量,清洗恶意请求后再转发至服务器。
总结
三次握手是TCP可靠性的基石,但需注意其安全风险。SYN洪泛攻击利用协议设计中的资源分配机制,通过资源耗尽实施DoS。防御需结合协议优化(如SYN Cookie)与外部防护措施。