TCP 安全与面试综合题
本篇覆盖 TCP 安全相关的攻击手段,以及跨章节的综合面试题——考察你对 TCP 整体体系的理解深度。
第一部分:TCP 安全
1.1 SYN 洪水攻击(SYN Flood)
本系列第二篇已介绍过基本原理,这里做更完整的总结。
攻击原理:攻击者发送大量伪造源 IP 的 SYN 包,服务端为每个 SYN 分配资源并回复 SYN+ACK,等待第三次握手的 ACK。由于源 IP 是伪造的,ACK 永远不会来,服务端的半连接队列被占满,正常连接无法建立。
攻击者 服务器
|── SYN (伪造IP) ──────→| 分配资源,加入半连接队列
|── SYN (伪造IP) ──────→| 分配资源,加入半连接队列
|── SYN (伪造IP) ──────→| ... 队列满,拒绝正常连接
|── SYN (伪造IP) ──────→|
防御手段:
| 手段 | 说明 |
|---|---|
| SYN Cookie | 不分配资源,将状态编码在 SYN+ACK 的序列号中,收到 ACK 后才分配资源 |
| 增大半连接队列 | 提高承载能力,但不能根治 |
| 缩短 SYN+ACK 重试超时 | 更快释放无效半连接 |
| 防火墙限速 | 限制单位时间内的 SYN 包数量 |
| 源地址验证 | 丢弃明显伪造的源 IP 包(如 RFC 2827 过滤) |
1.2 RST 攻击(TCP 重置攻击)
攻击原理:攻击者伪造一个 RST 包发送给通信双方中的一方,接收方会立即关闭连接。关键是伪造的 RST 包的序列号必须在接收方的合法窗口范围内。
客户端 服务器
|── 正常通信 ──→|
| |
|←── 伪造的 RST ──| ← 攻击者注入
| 连接被重置!
防御手段:
- 使用加密的传输层(如 TLS/SSL),RST 包无法伪造
- 操作系统增加序列号窗口检查的严格程度
1.3 TCP 会话劫持(Session Hijacking)
攻击原理:攻击者嗅探到通信双方的序列号后,伪造一方发送数据给另一方,接管会话。
攻击者嗅探到:
客户端 → 服务器:seq=1000, ack=2000
攻击者伪造:
客户端 → 服务器:seq=1000, "恶意命令"
(服务器以为是客户端发的)
防御手段:
- 使用 TLS 加密通信
- 使用随机的初始序列号(ISN),增加预测难度
- 网络层加密(如 IPsec)
1.4 安全总结
| 攻击类型 | 目标 | 核心防御 |
|---|---|---|
| SYN Flood | 耗尽半连接队列 | SYN Cookie、防火墙限速 |
| RST 攻击 | 强制断开连接 | TLS 加密 |
| 会话劫持 | 接管通信会话 | TLS 加密、随机 ISN |
一句话:TCP 本身不提供加密和认证,安全要靠上层协议(TLS/SSL)来保证。
第二部分:跨章节综合要点
以下要点涉及多个章节的知识综合,检验对 TCP 整体体系的理解。
- 从输入 URL 到页面加载:DNS 解析 → TCP 三次握手 → TLS 握手(HTTPS)→ HTTP 请求/响应 → 四次挥手(或 keep-alive 复用连接)
- TCP 保证可靠传输的六大机制:序列号、确认应答、超时重传、校验和、流量控制(滑动窗口)、拥塞控制(慢启动/拥塞避免/快速重传恢复)
- 完整通信状态变化——客户端:CLOSED → SYN_SENT → ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED;服务端:CLOSED → LISTEN → SYN_RCVD → ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED
- ISN(初始序列号)基于时钟和伪随机算法生成:防攻击(不可预测)+ 防旧连接干扰(避免序列号重叠)
- TCP 发送 RST 的场景:端口未监听、异常中止(setSoLinger)、半关闭违规、序列号非法、Keepalive 探测失败
- TIME_WAIT 持续 2MSL 的原因:① 确保最后的 ACK 到达(可重发);② 让旧段从网络中消失。过多时用 keep-alive、SO_REUSEADDR、连接池解决
- 流量控制 vs 拥塞控制:前者保护接收方(rwnd),后者保护网络(cwnd),实际发送量 = min(rwnd, cwnd)
- TCP 队头阻塞:一个段丢失会阻塞后续所有已到达段的交付,QUIC(HTTP/3)通过基于 UDP 的独立流彻底解决
- TCP 处理网络中断:有数据时靠超时重传多次失败后报错;无数据时靠 TCP Keepalive(默认 2 小时开始探测)或应用层心跳
- TCP 与 HTTP 的关系:TCP 是传输层负责可靠传输,HTTP 是应用层定义请求/响应格式;一个 HTTP 请求可能跨多个 TCP 段,多个请求也可复用一条连接
附录:全系列知识体系总览
01 - TCP 简介:是什么、分层模型、套接字对、封装路径
02 - 连接管理:三次握手、四次挥手、状态机、TIME_WAIT
03 - 可靠传输:序列号、确认应答、超时重传、滑动窗口、SACK
04 - 粘包拆包:字节流特性、四种解决方案、代码实现
05 - 拥塞控制:慢启动、拥塞避免、快速重传/恢复、BBR
06 - 头部详解:20 字节逐字段、TCP 选项
07 - TCP vs UDP:对比、场景选择、QUIC
08 - Socket 编程:BIO 实战、多线程服务端、API 细节
09 - 抓包实战:Wireshark 操作、问题排查
10 - 安全与综合:攻击防御、跨章节面试题