飞翔飞翔
主页
  • 计算机基础

    • TCP协议
  • 数据库

    • SQL教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP协议
  • 数据库

    • SQL教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • TCP协议

    • TCP 简介与分层模型
    • TCP 连接管理
    • TCP 可靠传输机制
    • TCP 粘包与拆包
    • TCP 拥塞控制
    • TCP 头部字段详解
    • TCP 与 UDP 对比
    • TCP Socket 编程实践
    • TCP 抓包实战
    • TCP 安全与面试综合题

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 - 安全与综合:攻击防御、跨章节面试题
上一页
TCP 抓包实战