
这两个问题其实刚好连在一起了。
第 7 题的本质,不是“把十六进制全部老老实实转成十进制”,而是“利用十六进制和二进制的天然对应关系,直接做前缀匹配”;第 8 题的本质,不是“LAN1 包含 LAN2~LAN5”,而是“整个 /23 地址块被切成 5 个彼此独立的子网,其中 LAN1 只是其中一个子网,而且是路由器互连用的中转网段”。
下面分开讲。
一、第 7 题里,十六进制和十进制到底怎么快速转换
先记一个最核心的对应:
每 1 位十六进制 = 4 位二进制
所以:
A = 10B = 11C = 12D = 13E = 14F = 15
1)十六进制转十进制,最快的方法
两位十六进制 XY:
XY(十六进制) = X × 16 + Y
例如:
C4 = 12 × 16 + 4 = 1965E = 5 × 16 + 14 = 9468 = 6 × 16 + 8 = 104
所以:
C4.5E.13.87
可以看成十进制的196.94.19.135
但这里要注意:这题其实通常没必要全部转成十进制再做。
2)十进制转十六进制,最快的方法
做“除 16 取余”。
例如 94:
94 ÷ 16 = 5 ... 14- 14 对应
E - 所以
94 = 5E
例如 196:
196 ÷ 16 = 12 ... 4- 12 对应
C - 所以
196 = C4
二、第 7 题更快的做法:根本不用完整转十进制
这题是 CIDR 最长前缀匹配,而且题目里的地址本来就是十六进制写的,所以最省时间的方法是:
直接按“十六进制位数”看前缀
因为:
/4= 比较 1 个十六进制位/8= 比较 2 个十六进制位/12= 比较 3 个十六进制位/16= 比较 4 个十六进制位/20= 比较 5 个十六进制位/24= 比较 6 个十六进制位
这在考场上特别好用。
三、第 7 题怎么做
题目路由表是:
C4.50.0.0/12 -> AC4.5E.10.0/20 -> BC4.60.0.0/12 -> CC4.68.0.0/14 -> D80.0.0.0/1 -> E40.0.0.0/2 -> F00.0.0.0/2 -> G
注意原则:匹配多个时,选前缀最长的。
1)C4.5E.13.87
先看:
匹配 C4.50.0.0/12 -> A
/12 比较前 3 个十六进制位。
- 路由项:
C45 - 目标地址:
C45
匹配,说明可到 A。
匹配 C4.5E.10.0/20 -> B
/20 比较前 5 个十六进制位。
- 路由项:
C45E1 - 目标地址:
C45E1
也匹配,说明也可到 B。
/20 比 /12 更长,所以选 B。
2)C4.5E.22.09
匹配 C4.50.0.0/12 -> A
- 前 3 个十六进制位:
C45 - 目标地址也是
C45
匹配。
匹配 C4.5E.10.0/20 -> B
- 路由项前 5 位:
C45E1 - 目标地址前 5 位:
C45E2
不匹配。
所以这一项不能走 B,只能走 A。
3)C3.41.80.02
前面几个 C4... 显然都不匹配。
再看 80.0.0.0/1 -> E
/1 表示只看最高 1 位二进制。
C3的第一位二进制是1,因为C=1100
所以匹配 80.0.0.0/1,走 E。
4)5E.43.91.12
看前几个 C4... 都不匹配。
再看:
80.0.0.0/1 -> E
5E 的最高位是 0,因为 5 = 0101
所以不匹配 E。
40.0.0.0/2 -> F
/2 看最高两位。5 的二进制是 0101,最高两位是 01,正好对应 40.0.0.0/2。
所以走 F。
第 7 题答案
C4.5E.13.87→ BC4.5E.22.09→ AC3.41.80.02→ E5E.43.91.12→ F
四、第 7 题里最值得背下来的“速判技巧”
1)前缀刚好是 4 的倍数时,直接按十六进制位比较
这是最重要的。
比如:
/12就比前 3 个十六进制位/20就比前 5 个十六进制位
2)/1、/2 这种就看第一位十六进制数字
因为 1 位十六进制 = 4 位二进制,所以第一位十六进制数字就能看出最高几位。
第一位十六进制数字与最高两位二进制的对应关系:
0 ~ 3:最高两位是004 ~ 7:最高两位是018 ~ B:最高两位是10C ~ F:最高两位是11
所以:
00.0.0.0/2覆盖第一位十六进制是0~340.0.0.0/2覆盖第一位十六进制是4~780.0.0.0/1覆盖最高位为 1,也就是第一位十六进制是8~F
3)不是 4 的倍数的前缀,要特别小心
比如这题的 /14。
/14 不是整 4 位,所以不能只机械地看 3 个十六进制位,而要多看 2 位二进制。
C4.68.0.0/14 的范围其实是:
C4.68.0.0 ~ C4.6B.FF.FF
因为第二个字节 68:
68 = 01101000- 保留前 6 位
011010 - 后 2 位可变成
00, 01, 10, 11 - 所以第二个字节可以是:
68, 69, 6A, 6B
这一类题经常拿来设陷阱。
五、第 8 题你真正困惑的点:LAN1 为什么“不包含” LAN2~LAN5
这个地方非常典型,很多人第一次学子网划分都会混。
先说结论
LAN1 并不是 LAN2~LAN5 的“父网”或者“外层网”。
这题里:
30.138.118.0/23才是整个自治系统拿到的“总地址块”- 然后把这个总地址块再切成 5 个子网
- 这 5 个子网分别分给:
- LAN1
- LAN2
- LAN3
- LAN4
- LAN5
所以它们是 并列关系,不是“包含关系”。
六、LAN1 在图里到底是什么
图里的 LAN1 是下方那条横线,它连接了几台路由器。
这说明:
LAN1 是一个“路由器之间互联的局域网/骨干网段/中转网段”。
而上面的 LAN2、LAN3、LAN4、LAN5 则是这些路由器连接出去的其他局域网。
也就是说:
- LAN1 是一个独立子网
- LAN2 是一个独立子网
- LAN3 是一个独立子网
- LAN4 是一个独立子网
- LAN5 是一个独立子网
它们互相之间靠路由器转发,不是靠“LAN1 包住它们”。
七、是不是“一个路由有两个地址,一个给外面看,一个给里面看”
这个说法有一点接近,但考研里更准确的表达不是这个。
更准确的说法是:
路由器的每一个接口,都属于一个不同的 IP 子网;每个接口都要配置该子网中的一个 IP 地址。
比如图里左边那台路由器:
- 它接到 LAN1 的那个接口,要有一个 LAN1 网段的 IP
- 它接到 LAN2 的那个接口,还要有一个 LAN2 网段的 IP
所以它至少有两个三层地址。
中间那台也是一样。
右边那台更明显,它可能连接:
- LAN1
- LAN4
- LAN5
那它就会有 3 个接口地址。
所以这里不是简单地说“一个内部地址、一个外部地址”,而是:
一台路由器有几个三层接口,通常就有几个不同子网下的 IP 地址。
这个和 NAT 里的“内网地址/外网地址”不是一回事,这里考的是普通路由与子网划分。
八、第 8 题怎么划分
题目给总块:
30.138.118.0/23
/23 表示总共 2^(32-23) = 512 个地址。
范围是:
30.138.118.0 ~ 30.138.119.255
1)先确定每个 LAN 至少需要多大的块
LAN2 到 LAN5 的主机数分别是:
- LAN2:91
- LAN3:150
- LAN4:3
- LAN5:15
另外 LAN1 也要分地址,因为 LAN1 上挂了 3 个路由器接口。
所以可以这样算:
| 局域网 | 需要的主机/接口数 | 至少需要地址数 | 应分配前缀 |
|---|---|---|---|
| LAN3 | 150 | 至少 152 | /24 |
| LAN2 | 91 | 至少 93 | /25 |
| LAN5 | 15 | 至少 17 | /27 |
| LAN4 | 3 | 至少 4 或 5 | /29 |
| LAN1 | 3 个路由接口 | 至少 5 | /29 |
这里解释一下:
/24有 256 个地址,254 个可用/25有 128 个地址,126 个可用/27有 32 个地址,30 个可用/29有 8 个地址,6 个可用
2)按“从大到小”划分,这是变长子网划分的标准做法
一种完全正确的划分方式是:
- LAN3:30.138.118.0/24
- LAN2:30.138.119.0/25
- LAN5:30.138.119.128/27
- LAN4:30.138.119.160/29
- LAN1:30.138.119.168/29
这 5 个子网互不重叠,而且都包含在总块 30.138.118.0/23 里。
九、为什么这种划分是对的
因为整个 /23 先被“切块”:
- 先拿一个
/24给 LAN3 - 剩下部分里再切一个
/25给 LAN2 - 再切一个
/27给 LAN5 - 再切两个
/29分别给 LAN4 和 LAN1
本质上就是在一个大地址池里做切分。
关键点
不是 LAN1 里再去套 LAN2~LAN5。
而是:
30.138.118.0/23
这个大块
→ 切成多个并列的小块
→ 分给不同 LAN
十、把这个拓扑用一句话说清楚
如果按考研术语来表达,这题其实是在说:
一个自治系统内部有 5 个独立的 IP 子网,其中 LAN1 是互连各路由器的骨干网段,LAN2~LAN5 是挂在路由器上的用户局域网;整个自治系统从上级获得一个 /23 地址块,再通过 VLSM 划分给各个局域网。
这句话一旦想通,LAN1 不包含 LAN2~LAN5 就不奇怪了。
十一、这类题最容易错在哪里
最常见的三个误区:
1)把物理连接关系误认为 IP 包含关系
图上 LAN2~LAN5 好像“挂在” LAN1 上,于是就误以为 LAN1 是它们的上层网段。
这是错的。
物理上连接在一起,不代表 IP 子网是包含关系。
路由器一隔开,就是不同子网。
2)忘了 LAN1 也需要地址
很多人只给 LAN2~LAN5 分,忘了下方骨干 LAN1 也需要一个独立网段。
这是做题时很常见的漏项。
3)以为路由器只有一个 IP
路由器是三层设备,每个接口一个网段、一个地址。
所以它当然可以同时出现在多个子网里。
十二、以后碰到类似题怎么快速识别
以后只要看到这种图:
- 下方一条总线/一个共享网段,连着多个路由器
- 每个路由器再往上连不同 LAN
就要立刻意识到:
- 下方那条线本身就是一个子网
- 每个上方 LAN 也是一个子网
- 所有这些子网都是从总地址块里切出来的
- 它们之间是并列,不是嵌套
- 一台路由器会在多个子网里各有一个接口地址
如果按 408 做题角度总结成最短记忆版,就是这两句:
第 7 题:十六进制 CIDR 优先按“1 位十六进制 = 4 位二进制”做前缀匹配,能不转十进制就不转。
第 8 题:LAN1 不是 LAN2~LAN5 的父网,而是 5 个并列子网中的一个骨干互连网段。

这两题确实是 408 里比较“烦”的那一类:表面上像是在考一个 IP 首部,实际上把链路层、网络层、分片、长度、地址表示法、字段偏移,全揉在一起了。
但这类题并不是靠“硬背一大串格式”去做,而是靠“按字节顺序机械拆字段”。一旦形成固定步骤,题目就会稳定很多。
第10题怎么做
题目给出的 IPv4 首部是:
45 00 00 54 00 03 58 50 20 06 FF F0 7C 4E 03 02 B4 0E 0F 02
IPv4 标准首部最少 20B,字段顺序固定,所以直接按顺序切:
45:版本 + 首部长度00:区分服务00 54:总长度00 03:标识58 50:标志 + 片偏移20:TTL06:协议FF F0:首部校验和7C 4E 03 02:源 IPB4 0E 0F 02:目的 IP
先看源 IP 和目的 IP
把 16 进制按字节转十进制:
源 IP:7C 4E 03 02
7C= 1244E= 7803= 302= 2
所以源 IP 是 124.78.3.2
目的 IP:B4 0E 0F 02
B4= 1800E= 140F= 1502= 2
所以目的 IP 是 180.14.15.2
这就是第 1 问答案。
再看数据部分长度
首字节 45:
- 高 4 位
4表示 IPv4 - 低 4 位
5表示首部长度 = 5 个 32 位字 - 一个 32 位字 = 4B
- 所以首部长度 =
5 × 4 = 20B
总长度字段是 00 54
0x0054 = 84
而 IPv4 的“总长度” = 首部 + 数据
所以数据部分长度:
84 - 20 = 64B
这就是第 2 问答案。
再看是否分片、偏移量多少
关键字段是 58 50
它是 16 位,其中:
- 前 3 位:标志位
- 后 13 位:片偏移
第一步:转二进制理解结构
0x5850
58 = 0101 100050 = 0101 0000
合起来:
0101100001010000
按“3 位标志 + 13 位片偏移”切开:
- 标志位:
010 - 片偏移字段:
1100001010000
第二步:判断是否分片
标志位 010 的含义是:
- 保留位 = 0
- DF = 1
- MF = 0
再看片偏移字段:
1100001010000 = 0x1850 = 6224
只要片偏移不为 0,说明这不是第一个分片,分组已经发生过分片。
又因为 MF=0,说明这是最后一个分片。
所以从“机械解题”的角度,这个分组是已经分片的。
第三步:偏移量的单位换算
这里是最容易错的点。
IP 首部中的“片偏移”字段,单位不是字节,而是 8B。
也就是说:
- 片偏移字段值 =
6224 - 实际字节偏移 =
6224 × 8 = 49792B
所以这问最稳妥的写法应该是:
- 已分片
- 片偏移字段值为
6224 - 若换算成实际字节偏移量,则为
49792B
这里要特别提醒一个细节
这组数据里有一个不太协调的地方:
DF=1表示“不允许分片”- 但片偏移又不为 0,说明它像是一个分片
严格按协议语义,这种组合本身是矛盾的。
但考试里这种题通常默认“按字段值机械解析”,不要自己去改题。也就是说,仍然按:
- 偏移不为 0 → 已分片
MF=0→ 最后一个分片
来答。
第10题答案汇总
第 10 题答案可以直接写成:
- 源 IP 地址:
124.78.3.2,目的 IP 地址:180.14.15.2 - 数据部分长度:
64B - 该分组已分片;片偏移字段值为
6224,实际字节偏移量为6224 × 8 = 49792B;且MF=0,说明它是最后一个分片
第11题怎么做
第 11 题给的是一帧的前 64B 十六进制数据:
00 1d 72 98 1d fc 00 00 5e 00 01 01 88 64 11 0075 89 01 92 00 21 45 00 01 90 f0 bf 40 00 33 06f3 15 da c7 66 28 da cf 3d d3 00 50 c4 8f dc a6a2 96 23 4c 44 69 50 18 00 0f 76 3d 00 00 90 b5
题目还告诉:
- 主机 A 的 IP 地址是
218.207.61.211 - 主机 A 的 MAC 地址是
00:1d:72:98:1d:fc
这题关键在于:
先从链路层看,再往网络层剥。
第一步:先看以太网帧头
以太网帧头前 14B:
- 前 6B:目的 MAC
- 接着 6B:源 MAC
- 再 2B:类型
所以前 14B 是:
- 目的 MAC:
00 1d 72 98 1d fc - 源 MAC:
00 00 5e 00 01 01 - 类型:
88 64
题目给的 A 的 MAC 是 00:1d:72:98:1d:fc,正好等于目的 MAC。
说明这帧是发给 A 的。
那么这一跳把帧发给 A 的那个设备,就是 A 所在网段的网关路由器接口。
因此该接口的 MAC 地址就是帧的源 MAC:
00:00:5e:00:01:01
这就是第 1 问答案。
第二步:判断以太网负载里是什么
类型字段是 88 64,这不是普通 IPv4 的 08 00,而是 PPPoE Session。
接下来几个字节:
11 0075 8901 9200 21
这里的 00 21 是 PPP 协议字段,表示里面封装的是 IPv4。
所以真正的 IP 首部要从 45 00 开始看。
也就是说,这题不是“以太网直接封装 IP”,而是:
以太网 → PPPoE → PPP → IPv4
这就是它看起来很跨章节的原因。
第三步:从 45 00 开始解析 IP 首部
从 45 00 开始:
45 00 01 90 f0 bf 40 00 33 06 f3 15 da c7 66 28 da cf 3d d3
拆字段:
45:IPv4,首部长度 5 × 4 = 20B0001 90:总长度f0 bf40 00:标志 + 片偏移33:TTL06:TCPf3 15da c7 66 28:源 IPda cf 3d d3:目的 IP
先把总长度转十进制:
0x0190 = 400
首部长度仍然是 20B
所以 IP 数据部分长度:
400 - 20 = 380B
这就是第 2 问答案。
第四步:判断路由器会不会分片
题目说:若该分组需要被转发到一条 MTU = 380B 的链路上,路由器做什么?
这里比较的是 IP 分组总长度 与 MTU。
- 当前 IP 总长度 =
400B - 新链路 MTU =
380B
显然 400 > 380,正常来说要分片。
但再看 IP 首部中的标志 + 片偏移字段:40 00
0x4000 的二进制最高 3 位是 010
也就是:
- DF = 1
- MF = 0
- 片偏移 = 0
这表示:禁止分片
所以路由器不能分片转发,只能:
- 丢弃该 IP 分组
- 向源主机发送 ICMP 差错报文,说明“需要分片但 DF 置 1”
这就是第 3 问答案。
第11题答案汇总
第 11 题可以直接写成:
- 网关路由器相应端口的 MAC 地址是
00:00:5e:00:01:01 - IP 分组所携带的数据量为
380B - 因为该 IP 分组总长度为
400B,大于下一跳链路的MTU=380B,本应分片;但首部中DF=1,禁止分片,所以路由器将丢弃该分组,并向源主机发送 ICMP 差错报文
这类“链路层 + 网络层混合大题”到底怎么做
这种题最怕的不是知识点多,而是做题时顺序乱。
一乱就会把字段看串,把长度减错,把偏移单位忘掉。
比较稳的做法其实就四步。
第一步:先判断当前看到的是哪一层的首部
见到一长串十六进制,先不要急着算。先问自己:
现在这一串,是不是直接就是 IP 首部?
如果题目说“某 IP 分组首部如下”,那就直接按 IPv4 首部格式拆。
如果题目说“某主机收到一个帧,前 64B 如下”,那就必须先按链路层拆:
- 前 6B 目的 MAC
- 后 6B 源 MAC
- 再 2B 类型
只有定位到 IP 首部真正从哪里开始,后面才不会乱。
第 11 题就是典型:
如果一上来把最前面的 00 1d 72 ... 当成 IP 首部,后面全错。
第二步:长度题一律先抓“总长度”和“首部长度”
IPv4 长度题的核心就是两个字段:
- 首字节低 4 位 → 首部长度
- 总长度字段 → IP 分组总长度
然后固定公式:
数据长度 = 总长度 - 首部长度
这里特别容易和链路层长度混淆。
以太网帧长度、IP 分组总长度、IP 数据部分长度,这三者不是一回事。
第三步:分片题必须单独盯住“标志 + 片偏移”16 位
无论题目多复杂,分片只看这 16 位。
拆法固定:
- 前 3 位:标志位
- 后 13 位:片偏移字段
判断时记住三句话:
片偏移 = 0且MF = 0,通常表示未分片片偏移 ≠ 0或MF = 1,就说明和分片有关- 片偏移字段的单位是
8B,不是1B
所以考试里最稳妥的写法不是只写一个数,而是写双层结果:
- 片偏移字段值 = 某某
- 实际字节偏移 = 某某 × 8 = 某某 B
这样几乎不会丢分。
第四步:遇到 MTU,先比“IP 总长度”,再看 DF
一看到 MTU,就自动进入这个判断流程:
- 先取 IP 总长度
- 判断是否大于下一跳链路 MTU
- 若不大于,直接转发
- 若大于:
- DF = 0 → 可以分片后转发
- DF = 1 → 不能分片,只能丢弃并发 ICMP 差错报文
这个流程在第 11 题里就是标准应用。
这类题最容易错的地方
1. 把“片偏移字段值”和“实际偏移字节数”混为一谈
这是最常见错误。
比如片偏移字段是 100,并不表示偏移了 100B,
而是表示偏移了 100 × 8 = 800B。
所以做题时最好脑子里始终分成两层:
- 字段存的值
- 实际字节偏移量
2. 把 IP 总长度和数据长度混淆
总长度 包含首部。
很多题一看到 0x0190 = 400 就直接写“数据长度 400B”,这是错的。
必须减去 IP 首部长度。
3. 在“帧”里直接找 IP 地址,没有先过 MAC 和类型字段
这种错在跨层题里特别多。
题目一说“收到一个帧”,第一反应必须是:
先看目的 MAC、源 MAC、类型字段。
只有找到网络层报文真正从哪里开始,后面才有意义。
4. 看到 DF=1 就直接说“未分片”
这也不对。
DF 的意思是“不允许继续分片”,
它不等于“当前这个报文一定不是某个分片”。
严格做题还是要结合:
- DF
- MF
- 片偏移
一起判断。
建议记住的一个固定做题模板
以后遇到这种十六进制报文题,直接套这个顺序:
- 先判断给的是帧还是 IP 首部
- 如果是帧,先拆 MAC 和类型字段
- 找到 IP 首部起点后,看
版本/IHL - 用总长度和首部长度求数据长度
- 看
标志 + 片偏移判断是否分片 - 片偏移记得乘
8B才是实际字节偏移 - 如果问 MTU,就比较 IP 总长度和 MTU,再看 DF
这套流程一旦熟了,题目再长,本质上也只是“按固定偏移读字段”。
IPv4 首部十六进制报文题速解模板
这类题表面上是在考“会不会看十六进制”,本质上考的是:能不能把 IPv4 首部格式按字节顺序机械拆开。只要顺序稳定,这类题其实非常适合拿分。真正容易失分的,不是不会,而是做题时字段看乱了、单位忘了、长度减错了。
平时整理时,我更倾向于把它当成一个固定流程,而不是零散知识点去背。考试里拿到一串 IPv4 首部十六进制数据,先不要急着逐字节硬翻译,而是先按标准首部结构切字段。IPv4 最小首部长度是 20B,也就是前 20 个字节一定可以先按下面的顺序读:
第1字节:版本 + 首部长度
第2字节:区分服务
第3~4字节:总长度
第5~6字节:标识
第7~8字节:标志 + 片偏移
第9字节:TTL
第10字节:协议
第11~12字节:首部校验和
第13~16字节:源IP地址
第17~20字节:目的IP地址
如果题目明确说“给出的是 IPv4 分组首部”,那就直接从这里开始拆。若题目给的是“某帧的前若干字节”,就不能一上来直接按 IPv4 首部套,而要先看链路层头部,把 IP 首部真正的起点找出来。这一点在跨章节题里非常关键。
一、先做的第一件事:看第 1 个字节
首字节最重要,因为它一下就把两个高频考点都定下来了。
例如首字节是 45,就拆成:
- 高 4 位:
4,表示 IPv4 - 低 4 位:
5,表示首部长度是 5 个 32 位字
而 1 个 32 位字 = 4B,所以首部长度就是:
5 × 4 = 20B
这一步非常关键,因为后面求数据部分长度、判断有没有选项字段,全部依赖它。
也就是说,看到 45,脑子里要立刻形成两个结论:
- 这是 IPv4
- 首部长度 20B,没有选项字段
若低 4 位不是 5,比如是 6、7,则说明首部长度分别是 24B、28B,说明首部里带了选项字段。
二、长度类题只抓两个量
IPv4 中和长度有关,最常考的就是两个字段:
- 首部长度
- 总长度
总长度字段是第 3~4 字节,表示整个 IP 分组长度,也就是:
总长度 = 首部 + 数据
因此只要题目问“数据部分长度”“IP 分组携带的数据量”“净荷长度”,统一都用:
数据长度 = 总长度 - 首部长度
例如:
- 首部长度 = 20B
- 总长度 =
0x0054 = 84
那么数据长度就是:
84 - 20 = 64B
这类题最容易错的地方,是把“总长度”直接当成“数据长度”,或者把链路层帧长和 IP 总长度混在一起。要记住,IPv4 首部里的总长度只管 IPv4 分组本身,不管以太网首部,也不管帧尾 FCS。
三、地址类题最机械,也最容易白白失分
源 IP 地址固定是第 13~16 字节,目的 IP 地址固定是第 17~20 字节。
做法非常机械:每个字节单独转成十进制,再用点号连接。
比如:
7C 4E 03 02
转换时不要整段一起算,只按字节拆:
7C= 1244E= 7803= 302= 2
所以地址就是:
124.78.3.2
目的 IP 同理。
这种题本质上没有思维难度,只有细心程度,最好的习惯就是“一字节一字节地换”,不要图快。
四、分片题一定盯住“第 7~8 字节”
分片相关的所有判断,核心都在这 16 位里。这个字段由两部分组成:
- 前 3 位:标志位
- 后 13 位:片偏移
也就是说,拿到这两个字节后,第一反应不是直接算十进制,而是先意识到它要拆成“3 + 13”的结构。
三个标志位中,最常用的是后两个:
- DF:是否允许分片
- MF:后面是否还有分片
其中:
DF = 1表示不允许分片MF = 1表示后面还有分片MF = 0表示这已经是最后一个分片,或者根本没分片
但考试里真正容易出错的,不是 DF 和 MF,而是“片偏移的单位”。
五、片偏移字段的单位不是字节,而是 8B
这是分片题的头号陷阱,几乎每年都有人在这里出错。
IP 首部中的片偏移字段,表示的是“当前分片数据部分相对于原始数据部分起点的偏移量”,但它存的不是字节数,而是以 8B 为单位的数值。
也就是说:
实际字节偏移 = 片偏移字段值 × 8
例如某题中第 7~8 字节解析后,片偏移字段值为 6224,那么真正的字节偏移量应该写成:
6224 × 8 = 49792B
因此,凡是题目问“偏移量是多少”,最稳的写法都不是只写一个数字,而是写双层结论:
- 片偏移字段值为
6224 - 实际字节偏移量为
49792B
这样基本不会因为单位问题丢分。
六、如何快速判断“是否已经分片”
这个问题在题里出现频率很高,判断逻辑其实并不复杂。
通常可以这样把握:
- 如果
片偏移 = 0且MF = 0,一般说明未分片 - 如果
片偏移 ≠ 0,说明它一定不是第一个分片,已经处于分片状态 - 如果
MF = 1,说明后面还有分片,也说明发生了分片
也就是说,只要出现下面任一种情况,通常都可以认定“和分片有关”:
片偏移 ≠ 0MF = 1
如果还要进一步判断它是第几个分片,可以这样理解:
片偏移 = 0且MF = 1:第一个分片片偏移 ≠ 0且MF = 1:中间分片片偏移 ≠ 0且MF = 0:最后一个分片
这是很典型的 408 考法。
七、遇到 MTU 题,固定按一个流程走
只要题目里出现了 MTU,基本就是在考“路由器是否需要分片,以及能不能分片”。
这里不要发散,固定按下面的顺序判断:
先比 IP 分组总长度和 MTU 的大小。
如果:
IP 总长度 ≤ MTU
那么可以直接转发,不需要分片。
如果:
IP 总长度 > MTU
那么原则上需要分片。接着再看 DF 位:
DF = 0:允许分片,路由器可以分片后转发DF = 1:不允许分片,路由器不能转发该分组,只能丢弃,并向源主机发送 ICMP 差错报文
这里必须注意,比较的是 IP 总长度 和 MTU,不是 IP 数据长度,也不是链路层帧长。
八、真正做题时的完整速解流程
考试里拿到一道 IPv4 首部十六进制题,我更建议直接套下面这个做题顺序:
先看首字节,判断版本和首部长度。
再看总长度字段,得到整个 IP 分组长度。
然后用“总长度 – 首部长度”算出数据部分长度。
接着定位源 IP 和目的 IP,逐字节转十进制。
再看“标志 + 片偏移”字段,判断是否分片、是不是最后一个分片。
如果题目问偏移量,记得把片偏移字段值再乘 8,得到实际字节偏移。
如果题目出现 MTU,再把 IP 总长度和 MTU 比较,并结合 DF 判断“分片转发”还是“丢弃并发送 ICMP”。
把这个流程固定下来之后,题目哪怕给一长串十六进制,看起来再乱,本质也只是照着模板往下填空。
九、一个可以直接套用的答题模板
考试时如果想写得快一些,可以直接按这个格式组织答案:
1. 第1字节为 XX:
- 版本 = X
- 首部长度 = X × 4 = XXB
2. 总长度字段为 XXXX:
- 总长度 = XXB
3. 数据部分长度:
- 数据长度 = 总长度 - 首部长度 = XXB
4. 源IP地址:
- XX.XX.XX.XX
5. 目的IP地址:
- XX.XX.XX.XX
6. 标志 + 片偏移字段为 XXXX:
- DF = X
- MF = X
- 片偏移字段值 = XX
- 实际字节偏移量 = XX × 8 = XXB
7. 若涉及 MTU:
- 若总长度 > MTU,且 DF=0,则分片转发
- 若总长度 > MTU,且 DF=1,则丢弃并发送 ICMP 差错报文
这个模板的好处在于,它把常考点全部串起来了。题目无论怎么变,核心都绕不开这几个字段。
十、最后把最容易错的点再压一遍
复习这类题时,我通常会反复提醒自己三件事。
第一,首部长度的单位是“4B”,不是 1B。
首字节低 4 位如果是 5,表示的是 5 个 32 位字,所以要乘 4 才得到字节数。
第二,片偏移字段的单位是“8B”,不是 1B。
字段值和真实字节偏移量不是同一个东西。
第三,MTU 比较的是 IP 总长度,而不是数据长度。
这个地方一混,后面整题就容易错。
如果把这三个单位问题压住,这类题大多数时候都能做对。



