注:以下习题参考 计算机网络(第八版)谢希仁 编著,数据结构与算法 王曙燕 主编。
一、计算机网络第4章 网络层 习题与解答
4-01 网络层向上提供的服务有哪两种?试比较其优缺点。
答案:
两种服务:面向连接的虚电路服务 和 无连接的数据报服务。
| 对比项 | 虚电路服务 | 数据报服务 |
|---|---|---|
| 连接建立 | 需要 | 不需要 |
| 目的地址 | 仅在连接建立时使用 | 每个分组都有完整目的地址 |
| 路由选择 | 固定路径 | 每个分组独立选择 |
| 分组顺序 | 按序到达 | 可能乱序 |
| 差错处理 | 由网络层负责 | 由运输层负责 |
| 优点 | 时延小、按序到达 | 健壮、灵活、无连接开销 |
| 缺点 | 需建立连接、故障时通信中断 | 可能乱序、每个分组开销大 |
4-02 网络互连有何实际意义?进行网络互连时,有哪些共同的问题需要解决?
答案:
实际意义:
-
扩大通信范围
-
实现资源共享
-
提高网络可靠性
-
便于网络管理
共同问题:
-
不同网络的寻址方式
-
不同网络的最大分组长度(MTU)
-
不同网络的接入控制方式
-
不同网络的差错处理
-
不同网络的路由选择
-
不同网络的计时机制
4-03 作为中间设备,转发器、网桥、路由器和网关有何区别?
答案:
| 设备 | 工作层次 | 功能 |
|---|---|---|
| 转发器 | 物理层 | 放大、整形信号,扩展物理距离 |
| 网桥 | 数据链路层 | 过滤、转发帧,隔离冲突域 |
| 路由器 | 网络层 | 路由选择、分组转发,隔离广播域 |
| 网关 | 运输层及以上 | 协议转换,连接异构网络 |
4-04 试简单说明下列协议的作用:IP、ARP 和 ICMP。
答案:
-
IP(网际协议):提供无连接的、不可靠的数据报传输服务,实现异构网络的互连。
-
ARP(地址解析协议):将 IP 地址解析为对应的 MAC 地址。
-
ICMP(互联网控制报文协议):传递差错报告和控制信息(如 ping、traceroute)。
4-05 IP 地址如何表示?
答案:
IP 地址由 32 位二进制数组成,采用点分十进制表示,每 8 位一组转换为十进制,用点分隔。
例如:128.96.39.10
4-06 IP 地址的主要特点是什么?
答案:
-
每个 IP 地址唯一标识一台主机(或路由器接口)
-
由网络号 + 主机号组成
-
分为 A、B、C、D、E 五类
-
由 ICANN 统一分配
-
具有层次性(便于路由聚合)
4-07 试说明 IP 地址与 MAC 地址的区别。为什么要使用这两种不同的地址?
答案:
| IP 地址 | MAC 地址 | |
|---|---|---|
| 层次 | 网络层 | 数据链路层 |
| 长度 | 32 位(IPv4) | 48 位 |
| 分配 | 软件配置 | 硬件固化 |
| 范围 | 逻辑地址,可跨网络 | 物理地址,仅在本地网络有效 |
| 变化 | 可随网络变化 | 固定不变 |
原因:IP 地址用于跨网络寻址,MAC 地址用于同一链路内通信,两者分工明确,实现网络层与数据链路层的解耦。
4-08 IP 地址方案与我国电话号码体制的主要不同点是什么?
答案:
| IP 地址 | 电话号码 | |
|---|---|---|
| 结构 | 网络号 + 主机号 | 区号 + 用户号 |
| 长度 | 固定 32 位 | 可变长度 |
| 管理 | 全球统一分配 | 各国自行管理 |
| 移动性 | 支持(移动 IP) | 一般不支持 |
4-09 IP 数据报中的首部检验和并不检验数据报中的数据。这样做的最大好处是什么?坏处是什么?
答案:
好处:
-
提高转发效率(路由器只需检验首部)
-
减少计算开销
坏处:
- 数据部分出错无法在 IP 层检测,需依赖上层(如 TCP)校验
4-10 当某个路由器发现一个 IP 数据报的检验和有差错时,为什么采取丢弃的办法而不是要求源站重传此数据报?计算首部检验和为什么不采用 CRC 检验码?
答案:
丢弃而非重传的原因:
-
IP 协议是无连接的,不维护状态信息
-
路由器不知道源站地址(可能已被 NAT 转换)
-
重传应由端到端的 TCP 负责
不用 CRC 而用反码求和的原因:
-
CRC 计算复杂,不适合硬件快速处理
-
反码求和简单高效,便于路由器快速校验
4-11 设IP数据报使用固定首部,其各字段的具体数值如图4-76所示(除IP地址外,均为十进制形式表示)。试用二进制运算方法计算应当写入到首部检验和字段中的数值(用二进制形式表示)。

二进制运算方法:
-
将首部按16位一组分组
-
所有组进行反码求和
-
将和取反码,填入首部检验和字段
**答案:**1000 1011 1011 0001
4-12 使用十六进制运算方法
答案:与二进制方法等价,只是将每16位二进制转换为4位十六进制,按十六进制加法(带进位)计算,最后取反码。
结果: 8B B1
4-13 什么是最大传送单元 MTU?它和 IP 数据报首部中的哪个字段有关系?
答案:
MTU:数据链路层所能传送的最大数据帧长度(不含帧头尾)。
相关字段 :IP 首部中的总长度字段 (16位)和片偏移字段(13位)。
4-14 在互联网中将 IP 数据报分片传送的数据报在最后的目的主机进行组装。还可以有另一种做法,即数据报片通过一个网络就进行一次组装。试比较这两种方法的优劣。
答案:
| 方式 | 优点 | 缺点 |
|---|---|---|
| 目的主机组装 | 中间路由器简单、高效 | 可能有重复分片、增加端到端时延 |
| 逐网络组装 | 减少后续网络的分片 | 增加中间路由器负担、可能多次重装 |
实际采用:目的主机组装(因 IP 协议无连接,中间路由器不维护分片状态)。
4-15 一个 3200 位长的 TCP 报文传到 IP 层,加上 160 位的首部后成为数据报。下面的互连网由两个局域网通过路由器连接起来,但第二个局域网所能传送的最长数据帧中的数据部分只有 1200 位,因此数据报在路由器中必须进行分片。试问第二个局域网向其上层要传送多少比特的数据?(这里的"数据"当然指的是局域网看见的数据)
答案:
-
MTU = 1200 位(包含首部)
-
每片数据最大长度 = 1200 - 160 = 1040 位
答案:3840 比特
-
分片数 = ceil(3200 / 1040) = 4 片
-
总传送比特 = 4 × 160 + 3200 = 3840 位
4-16 (1) 试解释为什么 ARP 高速缓存中存入一个项目就要设置 10~20 分钟的超时计时器。这个时间设置得太长或太短会出现什么问题?
(2) 举出至少两种不需要发送 ARP 请求分组的情况。
答案:
(1) 超时原因:
-
MAC 地址可能变化(如网卡更换、IP 地址迁移)
-
及时删除无效条目,避免通信失败
太长 :ARP 表不更新,导致通信失败
太短:频繁发送 ARP 请求,增加网络开销
(2) 不需要 ARP 请求的情况:
-
目的 IP 是本机 IP
-
目的 IP 在 ARP 高速缓存中已有映射
4-17 主机 A 发送 IP 数据报给主机 B,途中经过了 5 个路由器。试问在 IP 数据报的发送过程中总共使用了几次 ARP?
答案:
-
每段链路需要一次 ARP(源主机→路由器,路由器→路由器,路由器→目的主机)
-
经过 5 个路由器 = 6 段链路
-
总共 6 次 ARP
4-18 根据转发表计算下一跳
转发表:
| 前缀匹配 | 下一跳 |
|---|---|
| 192.4.153.0/26 | R3 |
| 128.96.39.0/25 | 接口 m0 |
| 128.96.39.128/25 | 接口 m1 |
| 128.96.40.0/25 | R2 |
| *(默认) | R4 |
计算(最长前缀匹配):
| 目的地址 | 匹配前缀 | 下一跳 |
|---|---|---|
| 128.96.39.10 | 128.96.39.0/25 | m0 |
| 128.96.40.12 | 128.96.40.0/25 | R2 |
| 128.96.40.151 | 默认(无其他匹配) | R4 |
| 192.4.153.17 | 192.4.153.0/26 | R3 |
| 192.4.153.90 | 192.4.153.0/26 | R3 |
4-19 某单位分配到一个地址块 129.250/16,该单位有 4000 台计算机,平均分布在 16 个不同的地点。试给每一个地点分配一个地址块,并算出每个地址块中 IP 地址的最小值和最大值。
答案:
一、已知条件
-
分配地址块:
129.250.0.0/16 -
总 IP 数:65536
-
总计算机:4000 台
-
地点数:16
-
每个地点计算机数:4000 / 16 = 250 台
每个地点至少需要的 IP 数:
250+2=252(网络号+广播地址)250+2=252(网络号+广播地址)
取大于等于 252 的最小 2 的幂:256
因此每个地点分配 /24 子网。
二、分配的地址块(16 个 /24)
从 129.250.0.0/24 开始,依次分配:
| 地点 | 地址块(CIDR) |
|---|---|
| 1 | 129.250.0.0/24 |
| 2 | 129.250.1.0/24 |
| 3 | 129.250.2.0/24 |
| ... | ... |
| 16 | 129.250.15.0/24 |
三、每个地址块中的 IP 最小值、最大值(部分示例)
| 地点 | 地址块 | 最小 IP | 最大 IP |
|---|---|---|---|
| 1 | 129.250.0/24 | 129.250.0.1 | 129.250.0.254 |
| 2 | 129.250.1/24 | 129.250.1.1 | 129.250.1.254 |
| 3 | 129.250.2/24 | 129.250.2.1 | 129.250.2.254 |
| ... | ... | ... | ... |
| 16 | 129.250.15/24 | 129.250.15.1 | 129.250.15.254 |
4-20 一个数据报长度为 4000 字节(固定首部长度)。现在经过一个网络传送,但此网络能够传送的最大数据长度为 1500 字节。试问应当划分为几个短的数据报片?各数据报片的数据字段长度、片偏移字段和 MF 标志应为何数值?
答案:
-
IP 首部固定 20 字节
-
每片最大数据长度 = 1500 - 20 = 1480 字节
-
原始数据长度 = 4000 - 20 = 3980 字节
分片数 = ceil(3980 / 1480) = 3 片
| 片 | 数据长度 | 片偏移(/8) | MF |
|---|---|---|---|
| 1 | 1480 | 0 | 1 |
| 2 | 1480 | 185 | 1 |
| 3 | 1020 | 370 | 0 |
4-21 写出互联网的 IP 层查找路由的算法。
答案:
- 从 IP 数据报提取目的 IP 地址 D
- 对转发表中每条路由项(前缀、掩码、下一跳):
if (D & mask == 前缀) 记录匹配(最长匹配) - 若有匹配,转发到对应下一跳
- 若无匹配但有默认路由,转发到默认路由
- 否则丢弃,发送 ICMP 差错报文
4-22 有如下的 4 个/24 地址块,试进行最大可能的聚合。
212.56.132.0/24
212.56.133.0/24
212.56.134.0/24
212.56.135.0/24
答案:
-
二进制:
132 = 10000100
133 = 10000101
134 = 10000110
135 = 10000111 -
前 6 位相同(132~135 前 6 位都是 100001)
-
掩码 = 24 - 2 = 22 位
聚合结果:212.56.132.0/22
4-23 有两个 CIDR 地址块 208.128/11 和 208.130.28/22。是否有哪一个地址块包含了另一个的地址块?如果有,请指出,并说明理由。
答案:
-
208.128/11 范围:208.128.0.0 ~ 208.159.255.255
-
208.130.28/22 范围:208.130.28.0 ~ 208.130.31.255
-
后者的范围完全在前者范围内
结论:208.128/11 包含 208.130.28/22
4-24 路由器 R₁ 的转发表如表 4-10 所示。试画出各网络和必要的路由器的连接拓扑,标注出必要的 IP 地址和接口。对不能确定的情况应当指明。
答案:

4-25 一个自治系统分配到的 IP 地址块为 30.138.118/23,包括 5 个局域网,其连接图如图 4-77 所示,每个局域网上的主机数标注在图 4-77 上。试给出每一个局域网的地址块(包括前缀)。

已知:
-
总地址块:30.138.118.0/23
-
地址范围:30.138.118.0 ~ 30.138.119.255(共 512 个地址)
-
各 LAN 主机数:
-
LAN₁:未说明,但至少要留三个地址给三个路由器
-
LAN₂:91 台
-
LAN₃:150 台
-
LAN₄:3 台
-
LAN₅:15台
-
答案(以下给出两组参考答案,均符合主机数要求):
第一组答案
| 局域网 | 地址块 | 前缀 |
|---|---|---|
| LAN₁ | 30.138.119.192/29 | /29 |
| LAN₂ | 30.138.119.0/25 | /25 |
| LAN₃ | 30.138.118.0/24 | /24 |
| LAN₄ | 30.138.119.200/29 | /29 |
| LAN₅ | 30.138.119.128/26 | /26 |
第二组答案
| 局域网 | 地址块 | 前缀 |
|---|---|---|
| LAN₁ | 30.138.118.192/27 | /27 |
| LAN₂ | 30.138.118.0/25 | /25 |
| LAN₃ | 30.138.119.0/24 | /24 |
| LAN₄ | 30.138.118.224/27 | /27 |
| LAN₅ | 30.138.118.128/27 | /27 |
二、数据结构 树 习题与解答
一、单项选择题
(1) 树最适合用来表示的结构是______。
A. 元素间的有序结构
B. 元素间具有分支及层次关系的结构
C. 元素间的无序结构
D. 元素间无联系的结构
答案:B
(2) 设一棵二叉树的结点个数为18,则它的高度至少为______。
A. 4
B. 5
C. 6
D. 18
答案:B
解析:高度最小的二叉树是完全二叉树。结点数 n 与最小高度 h 满足:2^(h-1) ≤ n ≤ 2^h - 1。2^4=16,2^5=32,18≤32,高度至少为5。
(3) 任意一棵二叉树的叶子结点在其先序、中序、后序序列中的相对位置是______。
A. 肯定发生变化
B. 有时发生变化
C. 肯定不发生变化
D. 无法确定
答案:C
解析:叶子结点的相对位置在三种遍历中保持不变(按从左到右的顺序)。
(4) 判断线索二叉树中某结点 P 有左孩子的条件是______。
A. p != NULL
B. p->lchild != NULL
C. p->lTag = 0
D. p->lTag = 1
答案:C
解析:lTag=0 表示指向左孩子,lTag=1 表示指向线索前驱。
(5) 二叉树在线索化后,仍不能有效求解的问题是______。
A. 先序线索二叉树中求后继
B. 中序线索二叉树中求后继
C. 中序线索二叉树中求前驱
D. 后序线索二叉树中求后继
答案:D
解析:后序线索二叉树中,求后继需要知道父结点信息,线索化无法直接提供。
(6) 设森林中有4棵树,其结点个数分别为 n₁, n₂, n₃, n₄,那么当森林转换成一棵二叉树时,则根结点的右子树上有______个结点。
A. n₁ - 1
B. n₁
C. n₁ + n₂ + n₃
D. n₂ + n₃ + n₄
答案:D
解析:森林转二叉树规则:第一棵树为根,其余树为根结点的右子树。
(7) 由权值分别为9, 2, 5, 7的4个叶子结点构造一棵哈夫曼树,则该树的带权路径长度WPL为______。
A. 23
B. 37
C. 44
D. 46
答案:C
解析:构造哈夫曼树:
-
2+5=7,新结点7
-
7+7=14,新结点14
-
14+9=23
WPL = 2×3 + 5×3 + 7×2 + 9×2 = 6+15+14+18 = 44
(8) 设T是一棵哈夫曼树,有8个叶结点,则树T的高度最可以是______。
A. 4
B. 6
C. 8
D. 10
答案:C
解析:哈夫曼树不一定是完全二叉树,8个叶结点时高度最小为4(完全),最大可能为8。
二、填空题
(1) 树形结构中,树根结点没有______结点,其余每个结点有且仅有一个______结点;树的叶子结点没有______结点,其余每个结点的子结点数不受限制。
答案:前驱(父);父;后继(子)
(2) 对于一棵具有n个结点的树,树中所有结点的度之和为______。
答案:n - 1
解析:树的边数 = 结点数 - 1,而度之和 = 边数
(3) 在二叉树的顺序存储中,下标为5的结点,它的双亲结点的下标为______。若它存在左孩子,则左孩子结点的下标为______;若它存在右孩子,则右孩子结点的下标为______。
答案:2;10;11
解析:双亲下标 = floor(i/2) = 2,左孩子 = 2i = 10,右孩子 = 2i+1 = 11
(4) 若某叶子结点是二叉树中序遍历序列中的最后一个结点,则它必定是该二叉树的先序遍历序列中的______。
答案:最后一个结点
解析:中序最后右子树最右结点,也是先序最后访问的结点。
(5) 一棵完全二叉树按层次遍历的序列为 ABCDEFG,则在先序遍历中结点E的直接前驱是______,后序遍历中结点B的直接后继是______。
答案:D;E
解析:
-
先序:A B D E C F G → E的前驱是D
-
后序:D E B F G C A → B的后继是E
(6) 已知某二叉树的中序序列为 ABCDEFG,后序序列为 BDCAFEG,则该二叉树的前序序列为______,该二叉树对应的森林包括______棵树。
答案:
后序最后为G,中序G在最后 → G为根,右子树空
构建的二叉树如下

前序序列:G E A C B D F
森林棵树:1棵(根有右孩子时才有多棵树)
(7) 把由树转化得到的二叉树称为该树对应的二叉树,则树的先根遍历序列与该树对应的二叉树的______遍历序列相同,树的后根遍历序列与该树对应的二叉树的______遍历序列相同。
答案:先序;中序
(8) 在哈夫曼树中,若编码长度只允许小于等于4,则除了已确定两个字符的编码为0和10外,还可以最多对______个字符进行编码。
答案:4
解析:编码长度≤4,已用0和10,剩余可用:11,100,101,110,111,1000等,但需满足前缀码,最多4个。
三、完成题
(1) 已知一棵二叉树的后序遍历序列为 ABCDEFG,中序序列为 ACBGEDF。试完成下列操作。
① 画出该二叉树的树形图。
推导过程:
-
确定根节点
后序序列最后一个元素是 G → 根节点为 G -
分割中序序列
中序序列 ACBGEDF,根节点 G 左边为 ACB (左子树),右边为 EDF(右子树) -
确定右子树
-
右子树中序:EDF,后序(从整体后序中分离):DEF
-
后序最后 = F → 右子树根为 F
-
F 在中序 EDF 中,左为 ED,右为空
-
右子树的左子树:中序 ED,后序 DE
-
后序最后 = E → 该子树根为 E
-
E 在中序 ED 中,左为空,右为 D
-
D 无左右子树
右子树结构:
F
/
E
\
D -
-
确定左子树
-
左子树中序:ACB,后序:ABC
-
后序最后 = C → 左子树根为 C
-
C 在中序 ACB 中,左为 A ,右为 B
-
A、B 无左右子树
左子树结构:
C
/ \
A B -
-
合并为完整二叉树
G
/ \
C F
/ \ /
A B E
\
D
② 先序序列:
先序遍历顺序:根 → 左 → 右
遍历过程:
-
访问 G
-
访问左子树 C:访问 C → 左 A → 右 B
-
访问右子树 F:访问 F → 左子树 E:访问 E → 右 D
先序序列:G C A B F E D
③ 顺序存储结构(编号从1开始):
|----|-------|-------|-------|-------|-------|-------|---|---|---|-------|----|----|----|----|----|
| 下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 结点 | G | C | F | A | B | E | ∅ | ∅ | ∅ | D | ∅ | ∅ | ∅ | ∅ | ∅ |
(2) 已知一棵树的层次表示法如下表,试完成下列操作。
| data | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| parent | -1 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | 5 | 6 | 6 | 7 | 8 |
① 画出该树的树形图。(上左)
② 孩子兄弟二叉链表存储结构(上右)
③ 对应二叉树的中序线索二叉树(下)

(3) 假设某通信报文的字符集由 A、B、C、D、E、F 共6个字符组成,它们在报文中出现的次数分别为16, 12, 9, 30, 3, 6。试构造一棵哈夫曼树。
① 带权路径长度 WPL
构造过程:
-
3+6=9(新结点9)
-
9+9=18(新结点18)
-
12+16=28(新结点28)
-
18+28=46
-
30+46=76
WPL = 3×4 + 6×4 + 9×3 + 12×3 + 16×3 + 30×2 = 12+24+27+36+48+60 = 207
② 哈夫曼编码
| 字符 | 出现次数 | 编码 |
|---|---|---|
| D | 30 | 0 |
| A | 16 | 10 |
| B | 12 | 110 |
| C | 9 | 1110 |
| F | 6 | 11110 |
| E | 3 | 11111 |
注:以上习题的解答基于作者自己的理解和计算,如果有任何错误,希望各位读者和大佬指出改正,非常感谢!!!