是什么

  • 定义:通过捕获网络传输中的十六进制原始数据流,结合 IPv4 首部TCP 报文段首部 的定长偏移结构,逆向解析网络层与传输层的控制信息、连接状态及数据载荷。

  • 大白话:考试给你一串像密码一样的十六进制数字,你拿协议规定的“尺子”去一段一段切开,还原出这台电脑到底在发什么、发给谁、发了多少字节。

核心内容

1. 零基础数学与进制底层机制(做题前提)

(1) 为什么 2 个十六进制字符 = 1 字节(1B)?

  • 1 字节(Byte)= 8 个二进制位(bit)。

  • 1 个十六进制符号可以表示 (即 ),恰好占用 4 个二进制位(半字节)。

  • 因此:==2 个十六进制符号 = ==。

    • 例如题目给出的 454 占 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 004 对应二进制 0100,表示 DF=1(不分片);偏移量为 0
第 9 字节生存时间 (TTL)80每经过一个路由器减 1。80H = 128,40H = 64,31H = 49
第 10 字节协议号 (Protocol)0606H 代表上层协议是 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 7bit 6bit 5bit 4bit 3bit 2bit 1bit 0
保留保留URGACKPSHRSTSYNFIN

记忆口诀紧急确认推重同终(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 字节标志位,锁定握手阶段

    • 02H SYN=1(握手第 1 步)。

    • 12H SYN=1, ACK=1(握手第 2 步)。

    • 10H ACK=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 内容(十六进制)
145 00 00 30 01 9b 40 00 80 06 1d e8 c0 a8 00 08 d3 44 47 50




0b d9 13 88 84 6b 41 c5 00 00 00 00 70 02 43 80 5d b0 00 00
245 00 00 30 00 00 40 00 31 06 6e 83 d3 44 47 50 c0 a8 00 08




13 88 0b d9 e0 59 9f ef 84 6b 41 c6 70 12 16 d0 37 e1 00 00
345 00 00 28 01 9c 40 00 80 06 1d ef c0 a8 00 08 d3 44 47 50




0b d9 13 88 84 6b 41 c6 e0 59 9f f0 50 10 43 80 2b 32 00 00
445 00 00 38 01 9d 40 00 80 06 1d de c0 a8 00 08 d3 44 47 50




0b d9 13 88 84 6b 41 c6 e0 59 9f f0 50 18 43 80 e6 55 00 00
545 00 00 28 68 11 40 00 31 06 06 7a d3 44 47 50 c0 a8 00 08




13 88 0b d9 e0 59 9f f0 84 6b 41 d6 50 10 16 d0 57 d2 00 00

回答下列问题:

  1. 表 1 中的 IP 分组中,哪几个是由 H 发送的?哪几个完成了 TCP 连接建立过程?哪几个在通过快速以太网传输时进行了填充?

  2. 根据表 1 中的 IP 分组,分析 S 已经收到的应用层数据字节数是多少。

  3. 若表 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 06

    13 88 a1 08 e0 59 9f f0 84 6b 41 d6 50 10 16 d0 b7 d6 00 00

分析

  1. 谁发送:H 的 IP 为 192.168.0.8,转换为十六进制为 c0 a8 00 08。核对各分组第 13~16 字节(源 IP),分组 1、3、4 的源 IP 为该值,故由 H 发送。

  2. 握手过程:查看第 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 完成了连接建立。

  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 进行了填充。

  4. 数据字节数

    • 分组 1 中 H 发送的初始序号为 84 6b 41 c5H。因 SYN 报文段虚拟占用 1 个序号,实际数据起始序号为

    • 分组 5 是 S 发出的最新确认报文,其确认号(第 29~32 字节)为 84 6b 41 d6H

    • 已经接收的字节数 =

    • 十六进制

  5. 路由器跳数:表 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 个字节(021210)。

  • 标志位二进制展开位权颠倒:低 6 位排布是 URG ACK PSH RST SYN FIN02H 展开是 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 字节。