是什么
-
定义:通过捕获网络传输中的十六进制原始数据流,结合 IPv4 首部 与 TCP 报文段首部 的定长偏移结构,逆向解析网络层与传输层的控制信息、连接状态及数据载荷。
-
大白话:考试给你一串像密码一样的十六进制数字,你拿协议规定的“尺子”去一段一段切开,还原出这台电脑到底在发什么、发给谁、发了多少字节。
核心内容
1. 零基础数学与进制底层机制(做题前提)
(1) 为什么 2 个十六进制字符 = 1 字节(1B)?
-
1 字节(Byte)= 8 个二进制位(bit)。
-
1 个十六进制符号可以表示 (即 ),恰好占用 4 个二进制位(半字节)。
-
因此:==2 个十六进制符号 = ==。
-
例如题目给出的
45,4占 4 位,5占 4 位,45就是一个完整的字节。
-
(2) 为什么 00 30H = 48 字节?(十六进制转十进制)
-
在题目中,末尾带
H或开头带0x代表该数值是十六进制(Hexadecimal)。 -
00 30H占 2 个字节,其数值为十六进制的 : -
同理:
-
00 28H= -
00 38H= -
40H(TTL) = -
31H(TTL) =
-
2. 报文定位标尺(逐字节完全拆解)
题目给出的报文每行包含 20 个字节(40 个十六进制字符)。两行刚好是 40 字节:
-
第 1 行(前 20 字节):必定为 IP 首部。
-
第 2 行(后 20 字节):紧跟其后,必定为 TCP 首部。

(1) IP 首部结构对齐表(第 1 ~ 20 字节)
| 字节偏移 | 字段名称 | 题目对应十六进制 | 核心考点与换算说明 |
|---|---|---|---|
| 第 1 字节 | 版本 + 首部长度 | 45 | 高 4 位 4 表示 IPv4;低 4 位 5 表示首部长度为 |
| 第 2 字节 | 区分服务 (ToS) | 00 | 优先级与服务类型,默认全 0 |
| 第 3~4 字节 | 总长度 (Total Length) | 00 30 | 整个 IP 数据报总字节数。30H = 48 字节,用于判断链路层是否填充 |
| 第 5~6 字节 | 标识 (ID) | 01 9b | 标识同一个数据报的分片,用于在匹配报文时确认是否为同一分组 |
| 第 7~8 字节 | 标志 + 片偏移 | 40 00 | 4 对应二进制 0100,表示 DF=1(不分片);偏移量为 0 |
| 第 9 字节 | 生存时间 (TTL) | 80 | 每经过一个路由器减 1。80H = 128,40H = 64,31H = 49 |
| 第 10 字节 | 协议号 (Protocol) | 06 | 06H 代表上层协议是 TCP(若为 11H 则代表 UDP) |
| 第 11~12 字节 | 首部校验和 | 1d e8 | 仅用于检验 IP 首部是否出现传输差错 |
| 第 13~16 字节 | 源 IP 地址 | c0 a8 00 08 | 转为点分十进制:192.168.0.8(主机 H) |
| 第 17~20 字节 | 目的 IP 地址 | d3 44 47 50 | 转为点分十进制:211.68.71.80(服务器 S) |
(2) TCP 首部结构对齐表(第 21 ~ 40 字节)
| 字节偏移 | 相对 TCP 偏移 | 字段名称 | 题目对应十六进制 | 核心考点与换算说明 |
|---|---|---|---|---|
| 第 21~22 字节 | 第 1~2 字节 | 源端口 | 0b d9 | 发送方进程端口号(0bd9H = 3033) |
| 第 23~24 字节 | 第 3~4 字节 | 目的端口 | 13 88 | 接收方进程端口号(1388H = 5000) |
| 第 25~28 字节 | 第 5~8 字节 | 序号 (seq) | 84 6b 41 c5 | 本报文段发送数据的首字节序号。握手首包为初始序号(ISN) |
| 第 29~32 字节 | 第 9~12 字节 | 确认号 (ack) | 00 00 00 00 | 期望对方下一个发送的数据字节序号 |
| 第 33 字节 | 第 13 字节 | 首部长度+保留 | 70 / 50 | 高 4 位为首部长度:7 表明 ;5 表明 |
| 第 34 字节 | 第 14 字节 | 标志位 (Flags) | 02 / 12 / 10 | 决定 TCP 连接状态(SYN/ACK/FIN等),握手解题关键 |
| 第 35~36 字节 | 第 15~16 字节 | 接收窗口 (rwnd) | 43 80 | 通告发送方的剩余空闲缓存大小 |
| 第 37~38 字节 | 第 17~18 字节 | TCP 校验和 | 5d b0 | 校验 TCP 首部与数据部分 |
| 第 39~40 字节 | 第 19~20 字节 | 紧急指针 | 00 00 | 仅在 URG=1 时有效 |
3. 第 34 字节标志位(Flags)展开推导法则
TCP 标志位位于 TCP 首部的第 14 字节(整包第 34 字节)。该字节的 8 个二进制位排布如下:

| bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 |
|---|---|---|---|---|---|---|---|
| 保留 | 保留 | URG | ACK | PSH | RST | SYN | FIN |
记忆口诀:紧急确认推重同终(URG - ACK - PSH - RST - SYN - FIN)
经典取值二进制推导:
-
02H的推导(SYN 请求,第 1 次握手):-
十六进制
02H展开为 8 位二进制:0000 0010。 -
对应倒数第 2 位(bit 1)为 1,其余全为 0。
-
结论:==SYN = 1,ACK = 0==。
-
-
12H的推导(SYN+ACK 响应,第 2 次握手):-
十六进制
12H展开为 8 位二进制:0001 0010。 -
对应倒数第 5 位(bit 4)为 1,倒数第 2 位(bit 1)为 1。
-
结论:==SYN = 1 且 ACK = 1==。
-
-
10H的推导(ACK 确认,第 3 次握手 / 纯数据确认):-
十六进制
10H展开为 8 位二进制:0001 0000。 -
对应倒数第 5 位(bit 4)为 1,倒数第 2 位(bit 1)为 0。
-
结论:==ACK = 1,SYN = 0==。
-
4. 标准解题流程与实战模板

-
步骤 1:看源与目的 IP,分清发送端(第 13~20 字节)
-
源 IP 为
c0 a8 00 08(192.168.0.8) 主机 H 发送。 -
源 IP 为
d3 44 47 50(211.68.71.80) 服务器 S 发送。
-
-
步骤 2:看第 34 字节标志位,锁定握手阶段
-
02HSYN=1(握手第 1 步)。 -
12HSYN=1, ACK=1(握手第 2 步)。 -
10HACK=1(握手第 3 步或数据确认)。
-
-
步骤 3:看第 3~4 字节总长度,判断链路层填充
-
以太网最小帧长为 64 字节,去除以太网首部(14B)和尾部校验(4B),==IP 载荷门槛为 ==。
-
若第 3~4 字节总长度(16 进制转 10 进制),则链路层必被填充。
-
-
步骤 4:算应用层已收数据量(减法模型)
-
公式:
-
核心细节:SYN 报文段不携带数据但虚拟消耗 1 个序号,因此数据起始序号为 。
-
计算式:
-
注意将十六进制差值转为十进制。
-
-
步骤 5:算途径路由器数(TTL 差值)
-
根据标识字段或序号匹配同一分组。
-
公式:
-
例题
题目
(2012年408统考第47题)主机 H 通过快速以太网连接 Internet,IP 地址为 192.168.0.8,服务器 S 的 IP 地址为 211.68.71.80。H 与 S 使用 TCP 通信时,在 H 上捕获的其中 5 个 IP 分组如下表所示:
| 编号 | IP 分组的前 40B 内容(十六进制) |
|---|---|
| 1 | 45 00 00 30 01 9b 40 00 80 06 1d e8 c0 a8 00 08 d3 44 47 500b d9 13 88 84 6b 41 c5 00 00 00 00 70 02 43 80 5d b0 00 00 |
| 2 | 45 00 00 30 00 00 40 00 31 06 6e 83 d3 44 47 50 c0 a8 00 0813 88 0b d9 e0 59 9f ef 84 6b 41 c6 70 12 16 d0 37 e1 00 00 |
| 3 | 45 00 00 28 01 9c 40 00 80 06 1d ef c0 a8 00 08 d3 44 47 500b d9 13 88 84 6b 41 c6 e0 59 9f f0 50 10 43 80 2b 32 00 00 |
| 4 | 45 00 00 38 01 9d 40 00 80 06 1d de c0 a8 00 08 d3 44 47 500b d9 13 88 84 6b 41 c6 e0 59 9f f0 50 18 43 80 e6 55 00 00 |
| 5 | 45 00 00 28 68 11 40 00 31 06 06 7a d3 44 47 50 c0 a8 00 0813 88 0b d9 e0 59 9f f0 84 6b 41 d6 50 10 16 d0 57 d2 00 00 |
回答下列问题:
-
表 1 中的 IP 分组中,哪几个是由 H 发送的?哪几个完成了 TCP 连接建立过程?哪几个在通过快速以太网传输时进行了填充?
-
根据表 1 中的 IP 分组,分析 S 已经收到的应用层数据字节数是多少。
-
若表 1 中的某个 IP 分组在 S 发出时的前 40B 如下表所示,则该 IP 分组到达 H 时经过了多少个路由器?
45 00 00 28 68 11 40 00 40 06 ec ad d3 44 47 50 ca 76 01 0613 88 a1 08 e0 59 9f f0 84 6b 41 d6 50 10 16 d0 b7 d6 00 00
分析
-
谁发送:H 的 IP 为 192.168.0.8,转换为十六进制为
c0 a8 00 08。核对各分组第 13~16 字节(源 IP),分组 1、3、4 的源 IP 为该值,故由 H 发送。 -
握手过程:查看第 34 字节(标志位):
-
分组 1 为
02H(二进制0000 0010,SYN=1),为连接请求(第 1 次握手); -
分组 2 为
12H(二进制0001 0010,SYN=1, ACK=1),为连接接受响应(第 2 次握手); -
分组 3 为
10H(二进制0001 0000,ACK=1),为连接确认(第 3 次握手)。 -
故分组 1、2、3 完成了连接建立。
-
-
填充判断:以太网最小帧长为 64B,去除 MAC 头(14B)和 FCS(4B),最小载荷为 。核对第 3~4 字节(IP 总长度):
-
分组 1、2:
00 30H= 48 字节 (不填); -
分组 3:
00 28H= 40 字节 (填充); -
分组 4:
00 38H= 56 字节 (不填); -
分组 5:
00 28H= 40 字节 (填充)。 -
故分组 3、5 进行了填充。
-
-
数据字节数:
-
分组 1 中 H 发送的初始序号为
84 6b 41 c5H。因 SYN 报文段虚拟占用 1 个序号,实际数据起始序号为 。 -
分组 5 是 S 发出的最新确认报文,其确认号(第 29~32 字节)为
84 6b 41 d6H。 -
已经接收的字节数 = 。
-
十六进制 。
-
-
路由器跳数:表 2 报文的标识为
68 11,TCP 序号为e0 59 9f f0,确认号为84 6b 41 d6,与表 1 分组 5 完全对应。S 发出时 TTL(第 9 字节)为40H= 64,到达 H 时 TTL 为31H= 49。跳数 = 。
答案
1)
(1) 由 H 发送的 IP 分组:分组 1、分组 3、分组 4。
依据:源 IP 地址字段(第 13~16 字节)为 c0 a8 00 08(即 192.168.0.8)。
(2) 完成 TCP 连接建立过程的 IP 分组:分组 1、分组 2、分组 3。
依据:分组 1 标志位为 SYN=1, ACK=0;分组 2 标志位为 SYN=1, ACK=1;分组 3 标志位为 SYN=0, ACK=1,三者构成 TCP 三次握手。
(3) 传输时进行了填充的 IP 分组:分组 3、分组 5。
依据:快速以太网最小数据载荷长度为 46 字节。分组 3 和分组 5 的 IP 总长度字段均为 00 28H(40 字节),小于 46 字节,故在数据链路层必须进行填充。
2)
根据分组 1,H 发送的初始序号为:
因 SYN 报文段消耗 1 个序号,数据流起始序号为:
根据 S 发送的最新确认分组(分组 5),其确认号字段为:
S 已经收到的应用层数据字节数为:
S 已经收到的应用层数据字节数是 16。
3)
对比可知该分组对应表 1 中的分组 5。
S 发出时该分组的 TTL 字段(第 9 字节)为:
到达 H 时捕获的 TTL 字段为:
途经路由器数为:
该 IP 分组到达 H 时经过了 15 个路由器。
⚠️ 易错点
Warning
标志位字段定位规则:TCP 标志位固定在整包第 34 字节(TCP 首部第 14 字节)。不要整包去数第几个字符,直接看第 2 行的第 14 个字节(
02、12、10)。标志位二进制展开位权颠倒:低 6 位排布是
URG ACK PSH RST SYN FIN。02H展开是0000 0010,倒数第二位对应 SYN;10H展开是0001 0000,倒数第五位对应 ACK。最小帧长门槛不是 64 而是 46:以太网最小帧长是 64 字节,但链路层头部和尾部共占 18 字节(14B MAC + 4B FCS),留给 IP 分组的门槛是 ====。若误拿 IP 总长度与 64 比较,会导致分组 1、2、4 误判为填充。
SYN 消耗 1 个序号:SYN 和 FIN 报文段虽然不携带用户数据,但要消耗 1 个逻辑序号。计算有效数据时起点必须加 1,即 。
进制混淆手误: 是十六进制,必须换算为十进制的 16 字节,切勿直接答 10 字节。