第八章:TCP 报文结构与抓包实战详解

在网络排障与性能分析过程中,理解 TCP 报文结构以及抓包工具的使用至关重要。本章将详细讲解 TCP 报文的每个字段,并结合实际抓包案例,教你如何通过抓包分析网络问题。

一、TCP 报文结构总览

TCP 是一种面向连接的传输层协议,具备可靠性。其报文格式如下:

 0      4      8      12             16            20            24             28          32
+-------+-------+--------+----------------+------------+-------------+----------------+--------+
| 源端口 | 目标端口 | 序列号(SEQ)       | 确认号(ACK)    |
+------------------------+----------------+----------------+----------------+
| 数据偏移 | 保留 | 控制位 | 窗口大小(Window)       |
+------------------------+----------------+----------------+
| 校验和(Checksum)     | 紧急指针(Urgent Pointer) |
+------------------------+----------------+
| 可选项(Options)...   |
+------------------------+
| 数据(Data)...        |
+------------------------+

二、重要字段详解

字段名称描述
源/目的端口表示通信双方的端口号
序列号(SEQ)表示本段数据的起始序号
确认号(ACK)告知对方下一个期望接收的数据序号
数据偏移表头长度(以 4 字节为单位)
控制位(Flags)控制连接状态,例如 SYN、ACK、FIN、RST 等
窗口大小告知接收方的缓冲区剩余容量,用于流量控制
校验和用于校验数据完整性
紧急指针用于紧急数据传输(很少使用)
可选字段如最大段长 MSS、窗口扩大因子、时间戳等

三、常见 TCP 控制位及含义 

控制位说明
SYN请求建立连接
ACK确认应答
FIN请求释放连接
RST强制重置连接
PSH接收方应尽快处理
URG表示紧急数据

四、抓包实战:tcpdump 使用基础

安装工具

sudo apt install tcpdump      # Debian/Ubuntu
sudo yum install tcpdump      # CentOS/RHEL

 抓取 TCP 报文示例

sudo tcpdump -i eth0 tcp 

抓取指定端口的通信:

sudo tcpdump -i eth0 port 80 

抓取并保存到文件:

sudo tcpdump -i eth0 tcp -w tcp_traffic.pcap 

五、分析报文示例(抓包解析)

使用 Wireshark 打开 .pcap 文件后,重点关注:

  • 三次握手是否正常(SYN → SYN-ACK → ACK)

  • 四次挥手是否完整(FIN → ACK → FIN → ACK)

  • 是否有重传(Retransmission)

  • 是否存在 TCP window full 报文

  • 是否有 DUP ACK 或 RST 报文

示例 1:正常三次握手

1. 客户端 → 服务端:SYN
2. 服务端 → 客户端:SYN, ACK
3. 客户端 → 服务端:ACK

示例 2:连接重传情况

查找是否出现如下字段:

  • [TCP Retransmission]

  • [TCP Dup ACK #x]

  • [TCP Out-Of-Order]

六、常用 Wireshark 过滤器

表达式说明
tcp.port == 80指定端口为 80
tcp.flags.syn == 1只看 SYN 报文
tcp.analysis.retransmission显示重传的数据包
ip.addr == 192.168.1.1指定某个 IP 的通信
tcp.len > 0显示包含数据的 TCP 报文

 七、进阶分析技巧

  • 使用 tcpdump + Wireshark 组合,灵活掌控线上流量

  • 识别流量瓶颈:是否存在 Zero Window(窗口为 0)

  • 分析延迟问题:利用 TCP Timestamp 选项字段

  • 用过滤器快速定位问题源头(IP、端口、连接状态)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值