报头划分题
这类的题目比较傻,对着报文找对应字段就行。但是提前熟悉一下格式会更有优势。
题干

读报
- 以太网帧头 (14 字节):
- 前 6 字节为目的 MAC 地址:
99 11 20 f7 88 7d - 接下来的 6 字节为源 MAC 地址:
00 11 43 b7 92 43 - 最后 2 字节为类型字段:
08 00(代表 IPv4 协议)
- 前 6 字节为目的 MAC 地址:
- IP 报头 (从第 15 字节开始,通常为 20 字节):
- 第一个字节
45:版本 4,报头长度 20 字节。 - 协议字段(第 24 字节):
06(代表 TCP 协议)。 - 源 IP 地址(第 27-30 字节):
83 f7 03 2a - 目的 IP 地址(第 31-34 字节):
83 f7 03 01
- 第一个字节
- TCP 报头 (从第 35 字节开始):
- 源端口(第 35-36 字节):
08 68 - 目的端口(第 37-38 字节):
00 50 - 标志位(第 48 字节):
18
- 源端口(第 35-36 字节):
- 应用层数据 (TCP 报头之后):
- 从十六进制
47 45 54 20及其对应的 ASCII 码GET可知这是 HTTP 请求。
- 从十六进制
解答
(1) 源结点和目的结点的 MAC 地址(用 16 进制表示)
- 源 MAC 地址:
00-11-43-B7-92-43 - 目的 MAC 地址:
99-11-20-F7-88-7D
(2) 源结点和目的结点的 IP 地址(用标准点分法表示)
- 源 IP(
83 f7 03 2a):131.247.3.42 - 目的 IP(
83 f7 03 01):131.247.3.1
(3) 源结点和目的结点使用的 TCP 端口号
- 源端口(
0x0868):2152 - 目的端口(
0x0050):80
(4) TCP 报文段的类型 SYN, FIN, ACK, PUSH 的值
TCP 标志位字节为 18 (十六进制),转换为二进制为 0001 1000。
根据 TCP 标志位顺序(… ACK, PSH, RST, SYN, FIN):
- SYN = 0
- FIN = 0
- ACK = 1
- PUSH (PSH) = 1
(5) 应用层使用的协议
- 协议名称:HTTP (或 超文本传输协议)
技巧
1. 单字节拆分($XY_{16} = 16 \times X + Y$)
IP 地址的每一段是一个字节(00 到 FF,即 0 到 255)。
- 公式: 十位数字 $\times 16$ + 个位数字。
- 16 的倍数:
- $8 \times 16 = \mathbf{128}$ (一半)
- $A \times 16 = \mathbf{160}$
- $C \times 16 = \mathbf{192}$
- $F \times 16 = \mathbf{240}$
2. 端口号转换:双字节 256($XXYY_{16} = XX_{16} \times 256 + YY_{16}$)
3.两两原则:每两个十六进制数字(4位+4位)代表 1个字节(8位,即1 Byte)。
- 看到
45 00,这就是 2 个字节。
4.MAC帧类型值:08 00 是 IPv4,08 06 是 ARP。如果是 08 00,接下来的就是 IP 包头。
5.IP头“45”:在以太网类型 08 00 之后,绝大多数题目都会紧跟 45。
4:代表版本 IPv4。5:代表首部长度 5 个单位($5 \times 4 = 20$ 字节)。这告诉你 IP 头到哪里结束。
- TCP反向检查技巧:
- 常见端口:如果你算出来的十六进制对应以下数值,说明你找对位置了:
00 50$\rightarrow$ 80 (HTTP)01 BB$\rightarrow$ 443 (HTTPS)00 15$\rightarrow$ 21 (FTP)00 35$\rightarrow$ 53 (DNS)00 17$\rightarrow$ 23 (Telnet)
- 常见端口:如果你算出来的十六进制对应以下数值,说明你找对位置了: