简介:《计算机网络》第5版严伟、潘爱民译本的课后答案,定位为计算机专业学生、考研者及自学者的习题辅导资料,覆盖教材第一章至第二章课后习题,帮助核对解题过程、理解网络核心原理。内含1个doc文档,压缩包仅733KB,节选内容涉及数据传输时间计算、LAN模型可拓展性与单一线路风险、互联网高延迟与带宽特点、数字语音及视频流量对投递时间的要求、交换机延迟影响、请求响应传输延迟计算、路由选择复杂性、协议层次模型、报文流与字节流边界差异、协商参数、TCP面向连接与UDP无连接区别、移动运营商位置知晓利弊、同轴电缆光速与比特长度、图像数据量计算、隐藏节点问题及标准化优缺点等,并配有具体数值推导,便于逐题对照。已有273人学习下载,适合课后自测、考前梳理与教学参考,能有效提升对网络分层、传输协议和性能计算的综合把握。
1. 先弄清这份答案属于哪本“计算机网络”:严伟、潘爱民译本是哪个版本
网上流传的这份《计算机网络_第5版_严伟_潘爱民_课后答案.doc》,很多人下载后翻两页就懵了:题号对不上、章节对不上,甚至和另一本同名教材的答案混在一起。原因很简单——严伟、潘爱民是 Andrew S. Tanenbaum《计算机网络(第5版)》中文版的译者,这本书以 OSI 七层模型为主线,和谢希仁的《计算机网络》、Kurose 的《计算机网络:自顶向下方法》是三条完全不同的复习路径。这份 doc 的价值不是让你背答案,而是当你做完全书课后题后,用来校验推导过程的草稿纸。下面按这本书的章节顺序,讲清楚课后答案怎么用、哪些题必须亲手算、哪些答案本身有坑,最后落到计算机网络期末复习和 408 备考的可执行动作上。
2. 用课后答案反推复习主线:七个章节的知识权重与优先级
2.1 从目录结构看复习顺序:物理层不是入门,是硬骨头
Tanenbaum《计算机网络(第5版)》的目录是从第 1 章“引言”开始,但真正劝退人的是第 2 章物理层。很多初学者以为物理层就是网线、光纤这些实物,翻到课后题才发现要算奈奎斯特准则、香农公式、dB 与线性信噪比换算,直接破防。这本书的复习顺序和“计算机网络自顶向下”那本完全相反:自顶向下先把应用层和 HTTP 摆在你面前,让你觉得网络很简单;Tanenbaum 则从物理层一路往上,每一层都给你一堆公式和协议状态机,计算机网络基础不扎实的人很容易在第 2 章就放弃。
所以拿到这份课后答案,第一件事不是做题,而是把目录翻出来,按“物理层→数据链路层→介质访问控制子层→网络层→传输层→应用层→网络安全”的顺序过一遍,确认每个章节下有哪些题型。这本书第 1 章是概念题的大本营:协议分层、OSI 与 TCP/IP 的对应关系、面向连接与无连接服务的区别,这些在复习题里反复出现,答案里的表述可以直接作为简答题的答题模板。而第 2 章、第 3 章、第 5 章、第 6 章是计算题重灾区,答案里往往只有最终数值没有推导过程,这恰恰说明你需要自己把过程补出来。
一个实用做法:把这份 doc 打印出来(或者用 PDF 阅读器做标注),按章节在每道题旁边标三个状态——已独立做对、看答案才懂、答案本身存疑。这个三档标注法会在第 6 章展开细说,但它从复习第一天就该开始,而不是考前一周才临时抱佛脚。
2.2 课后题分档:必做基础题、核心计算题、选做扩展题
Tanenbaum 这本书每章的课后题分“复习题”和“习题”两类,但很多流传的答案 doc 并没有保留这个分类,而是把所有题目混编在一起。如果按混编顺序硬刷,效率很低。我一般会按题型把题目拆成三档,这份答案的定位也就清楚了。
第一档是必做基础题:集中在第 1 章引言和第 7 章应用层,题型是“什么是协议”“DNS 的递归查询和迭代查询有什么区别”这类概念题。做这一档的目的是建立答题语感——用书上的术语、按书上的逻辑组织答案,而不是用自己的大白话。课后答案里这些题的表述通常很规范,值得逐字对照。
第二档是核心计算题:集中在第 2 章物理层(奈奎斯特、香农)、第 3 章数据链路层(CRC、海明码、滑动窗口)、第 5 章网络层(距离向量路由、链路状态路由、子网划分)、第 6 章传输层(TCP 拥塞控制、往返时间估算)。这一档必须亲手算到最后一个数字,而且算完一定要对着答案问一句:如果带宽从 3kHz 改成 4kHz,结果怎么变?如果信噪比从 30dB 改成 20dB,结果差多少?这些变式才是考试的真正考法。
第三档是选做扩展题:比如第 8 章网络安全里的 RSA 计算题、数字签名流程题。这些题如果考研院校不考网络安全章节,可以战略性跳过,但答案里涉及“公钥和私钥谁加密谁解密”的结论性表述值得扫一眼,因为面试会被问到。
下面是按章节的优先级参考表,可以直接照着排复习计划:
| 章节 | 典型题型 | 复习优先级 | 建议投入时间 |
|---|---|---|---|
| 1 引言 | 概念问答、OSI/TCP-IP 对比 | 高(背诵为主) | 1~2 天 |
| 2 物理层 | 奈奎斯特、香农公式、dB 换算 | 高(计算密集) | 3~4 天 |
| 3 数据链路层 | CRC、海明码、滑动窗口时序图 | 高(计算+画图) | 3~4 天 |
| 4 介质访问控制子层 | CSMA/CD、二进制指数退避 | 中(计算量适中) | 2~3 天 |
| 5 网络层 | 路由算法迭代、IP 子网划分 | 极高(全书核心) | 5~7 天 |
| 6 传输层 | TCP 拥塞控制、滑动窗口、RTT 估算 | 极高(面试热点) | 4~5 天 |
| 7 应用层 | DNS、HTTP、电子邮件协议 | 中(概念问答) | 2 天 |
| 8 网络安全 | RSA、对称/公钥密码概念 | 低~中(按考纲定) | 1~2 天 |
2.3 一个可复制的三周刷题节奏:答案在最前面还是最后面
这份课后答案最常见的误用方式是把 doc 放在手边,做一题看一眼答案。这等于把推导过程外包给了参考答案,合上书还是不会。我建议把复习分成三轮,每轮一星期,答案的出场顺序完全不同。
第一轮做“拆题”:不看答案,把每章的复习题和习题按上面的表格快速过一遍,能写出多少算多少。目标不是做对,而是标记出“完全没思路”的题号和“有点思路但算不出”的题号。这一轮结束后,翻开答案只看这两类题目的最终结论,确认自己卡在哪一步。第一轮最忌讳的是逐题对答案,那会让“看答案以为自己懂了”的错觉提前出现。
第二轮做“重算”:针对第一轮标记的计算题,闭卷重算,算完拿答案比对最终数值。数值对不上就回看书上的公式定义,不要急着说“答案错了”——大概率是你的信噪比换算少了一步,或者滑动窗口的序列号空间算错了边界。第二轮是投入产出比最高的阶段,因为此时你对每道题已经有过一次思考,重新推导的记忆深度远超第一轮。
第三轮做“变式”:把答案里的数值全改掉,自己出题自己算。带宽、传播时延、窗口大小、链路开销都换一遍,然后用第 3 章的脚本验算。这一轮做完,这本书的课后题才算真正消化。
提示:第 5 版英文原版的书后习题编号和中文版存在差异,答案 doc 里如果出现“题号对不上”,先检查你手里的是不是“第 5 版(中文翻译版)”而不是“第 5 版英文影印版”,两者的习题顺序不完全一致。
3. 让答案自己说话:用 Python 重算课后计算题,验证每一道关键题
Tanenbaum 课后答案里最让人头疼的不是题难,而是很多 doc 版本只给最终结果,过程全被跳过。尤其是路由表迭代、CRC 校验这类需要多步计算的大题,答案直接扔给你一张收敛后的表,你根本不知道中间过程长什么样。解决这个问题不需要什么高深工具,三个 Python 脚本就能把物理层、数据链路层、网络层的典型计算题完整复现出来。
3.1 香农公式与奈奎斯特准则:一道物理层经典题的自动验算
第 2 章物理层最经典的课后题是:给定带宽和信噪比,求信道容量。很多新手直接拿信噪比的 dB 值代公式,算出个离谱结果,然后怀疑答案错了。实际上香农公式里的 S/N 必须是线性比值,而题目给的 30dB 是分贝值,必须先换算再代入。
import math def shannon_capacity(bandwidth_hz, snr_db): # 将 dB 形式的信噪比转换为线性比值,这是最常见的错误来源 snr_linear = 10 ** (snr_db / 10) # C = W * log2(1 + S/N) capacity_bps = bandwidth_hz * math.log2(1 + snr_linear) return capacity_bps # 例:带宽 3kHz,信噪比 30dB —— Tanenbaum 书中的经典数据 capacity = shannon_capacity(3000, 30) print(f"信道容量: {capacity:.2f} bps") # 输出约为 29907 bps,即约 30kbps # 变式练习:把信噪比改成 20dB,看容量变化 capacity_20db = shannon_capacity(3000, 20) print(f"信噪比 20dB 时: {capacity_20db:.2f} bps")代码逻辑很直接:先完成 dB 到线性比值的换算——10 的(dB 值除以 10)次幂,这是香农公式唯一容易出错的前置步骤;然后代入 C = W·log₂(1+S/N)。参数说明:bandwidth_hz 用赫兹(Hz),snr_db 用分贝(dB)。课后题如果给的是线性信噪比(比如 1000:1),那就把 snr_db 参数换成 snr_linear,直接做math.log2(1 + snr_linear),不要重复换算。做题时拿这个脚本验算一遍,你会发现答案里那些整数值(比如约等于 30kbps)背后的十进制展开全都能对上。
3.2 CRC 校验与海明码:手算和脚本对照的验算姿势
第 3 章数据链路层的 CRC 计算题也是重灾区。手算 CRC 的过程是在二进制序列上做模 2 除,每步异或、逐位后移,书里讲得清楚但手算极易错位。尤其是生成多项式位数较多时,答案 doc 里经常直接给余数,过程一笔带过。用脚本复现多项式除法的过程,就能看到每一步的异或结果。
def crc_remainder(data_bits, divisor_bits): # data_bits: 待计算的数据位列表,如 [1,1,0,1,0,1] # divisor_bits: 生成多项式的系数列表,如 [1,1,0,1] data = list(data_bits) divisor = list(divisor_bits) # 在数据后补 (len(divisor)-1) 个零 padded = data + [0] * (len(divisor) - 1) # 逐位做模 2 异或 for i in range(len(data)): if padded[i] == 1: for j in range(len(divisor)): padded[i + j] ^= divisor[j] # 返回余数部分(末尾 len(divisor)-1 位) return padded[-(len(divisor)-1):] # 例:数据 110101,生成多项式 1101(对应 x^3 + x^2 + 1) data = [1,1,0,1,0,1] divisor = [1,1,0,1] remainder = crc_remainder(data, divisor) print("CRC 余数:", remainder) # 输出 [0,0,1] 即余数为 001,与手算结果对照这段代码模拟的是模 2 除法:从被除数最高位开始,遇到 1 就对当前位起的一段序列做异或,相当于把除数“减”下去,然后继续右移。参数说明:data_bits 和 divisor_bits 都用 0/1 列表传入,方便对照书上的二进制表达式;注意生成多项式的写法是“系数列表”,比如 x³+x²+1 对应 [1,1,0,1],最高位一定是 1。有些答案 doc 把余数写成十进制或八进制,对照前先统一成二进制位串。数据链路层的差错检验题做完,你顺带也能理解头歌这类实训平台上的以太网帧校验实验为什么总让你先算再抓包——抓包工具显示的 FCS 字段,本质就是同一套 CRC 余数。
3.3 距离向量路由的迭代表:用代码复现 Bellman-Ford 的每一轮
第 5 章网络层的距离向量路由题,可以说是这份课后答案里最容易让人“看不懂过程”的题型。答案通常直接给最终路由表,但考试考的是中间迭代过程——比如“第一轮后 B 的路由表是什么”。用下面这段 Bellman-Ford 风格的迭代脚本,可以逐轮打印每台路由器的距离向量变化。
def distance_vector_iteration(nodes, links, max_rounds=10): # nodes: 节点列表,如 ['A','B','C','D'] # links: 无向链路列表,每项为 (u, v, cost) INF = float('inf') dist = {n: {m: INF for m in nodes} for n in nodes} next_hop = {n: {m: None for m in nodes} for n in nodes} for n in nodes: dist[n][n] = 0 for round_no in range(1, max_rounds + 1): updated = False for (u, v, cost) in links: # 每个邻居交换自己当前的距离向量 for dest in nodes: if dist[u][dest] + cost < dist[v][dest]: dist[v][dest] = dist[u][dest] + cost next_hop[v][dest] = u updated = True if dist[v][dest] + cost < dist[u][dest]: dist[u][dest] = dist[v][dest] + cost next_hop[u][dest] = v updated = True print(f"第 {round_no} 轮后各节点距离向量: {dist}") if not updated: break return dist, next_hop # 例:A-B 开销 2,B-C 开销 1,C-D 开销 3,D-A 开销 6 nodes = ['A','B','C','D'] links = [('A','B',2), ('B','C',1), ('C','D',3), ('D','A',6)] dist, next_hop = distance_vector_iteration(nodes, links)这段代码的关键是按“轮”同步迭代,而不是像最短路径算法那样直接扫一遍所有边收敛。距离向量协议的特性就是每轮只和直连邻居交换路由表,所以打印结果能和课后答案的迭代表逐行对上。参数说明:max_rounds 设大一点没关系,循环会在距离向量不再变化时提前 break;链路开销建议用整数,避免浮点比较误差。如果答案里的最终路由表和脚本算出的不一致,先检查是不是把单向链路误当双向链路——课后题经常在这里埋坑。
4. 避坑:这份课后答案常见的五个翻车现场
4.1 题号对不上,答案像“黑匣子”
现象:做第 3 章 CRC 相关习题时,按中文版题号去找答案,发现答案文档里的题目内容和自己的书完全对不上。原因:严伟、潘爱民翻译的《计算机网络(第 5 版)》依据的是英文原版第 5 版,但很多流传的答案 doc 其实是从英文原版第 4 版或更早的配套答案整理来的,题号自然不一样。解决:先花十分钟做“题号映射”,用题目内容而不是题号去匹配。比如答案里写“Problem 3-12”,你去看内容是不是“计算一个 12 位数据序列的 CRC 余数”,内容对上再往下做。
4.2 混入其他教材答案
现象:一份 doc 里前半部分还在讲 OSI 七层模型,后半部分突然冒出“套接字编程作业”这种自顶向下教材才有的题型。原因:这个 doc 在网盘被多次转载,整理者把不同书的答案合并保存了,文件名却只写了“计算机网络第5版”。解决:遇到这种混编情况,直接看章节关键词——Tanenbaum 版习题很少出现“编写一个 HTTP 客户端”这类套接字编程题,那是“计算机网络自顶向下答案”的特征;Tanenbaum 更喜欢“计算传播时延”“画出滑动窗口时序图”这类计算与画图题。混编内容可以直接跳过。
4.3 答案跳步,路由表只给收敛结果
现象:距离向量路由题和链路状态路由题的答案只有最终路由表,没有“第 1 轮后”“第 2 轮后”的中间表。原因:doc 最早由学生手打整理,计算过程被省略,只保留了最终结果。解决:用前文第 3.3 节的迭代脚本把过程补出来,逐轮打印后对照最终表是否一致。这也算一种验算方式——中间表既然答案不给,你就自己生成一份,考试时按脚本输出的顺序默写即可。
4.4 背答案换参数就翻车
现象:把答案背得滚瓜烂熟,期末试卷上把“带宽 3kHz”改成“带宽 4kHz”,把“信噪比 30dB”改成“25dB”,当场卡壳。原因:课后题考察的不是某个数值,而是公式的使用边界和单位换算过程。解决:每次对完答案,把题目里的一个参数改掉,用自己的推导重算一遍。用第 3.1 节的香农公式脚本做变式练习,几分钟就能覆盖五六个改参版本。这个习惯在计算机网络期末复习阶段尤其值钱。
4.5 把它当 408 真题复习,方向错了
现象:考 408 的同学拿这本书的课后答案当刷题资料,背了大量“面向连接与无连接服务”的概念问答,结果真题里考的是综合组网和抓包分析。原因:Tanenbaum 这本书偏重原理推导,和 408 的考法不完全匹配——408 更接近“给一个网络拓扑算子网”“给一段 TCP 时序画拥塞窗口”的工程应用题。解决:把这本书的课后答案当“原理词典”用,用来理解概念和推导过程;做题训练还是回到王道或谢希仁配套的题目上去。这本书适合打底子,不适合当真题库。
5. 把课后题变成面试弹药:从原理问答到追问链
5.1 一个追问链模板:TCP 拥塞控制课后题怎么变成面试连环问
第 6 章传输层有一道经典课后题:描述 TCP 拥塞控制中慢启动、拥塞避免、快重传和快恢复的工作过程。答案 doc 里通常给出一段完整的书面表述,可以背,但面试官不会让你背,他们会追问:“慢启动的窗口为什么是翻倍而不是加一?”“ssthresh 是怎么定的?”“如果收到三个重复 ACK,窗口减半还是减到 1?”
把这道题变成追问链,需要按“现象→原因→边界”三层拆解。现象层:慢启动阶段每经过一个 RTT,拥塞窗口翻倍。原因层:指数增长是为了快速探测可用带宽,因为新连接不知道网络状况,只能从小窗口开始试。边界层:ssthresh 通常设为检测到拥塞时窗口的一半;一旦发生丢包,窗口减半而不是回到 1,这是快恢复和慢启动的关键区别。你在面试时把这三层说全,比背答案里那段规范表述有用得多。整理追问链时,可以拿这份课后答案当索引——答案里的每段长句都是“现象层”,书里的图(比如拥塞窗口随时间变化的折线图)就是“边界层”,而“原因层”需要你自己补。
下面是一个可以直接套用的追问链模板:
| 课后题知识点 | 现象层(照答案说) | 原因层(自己补) | 边界层(面试追问) |
|---|---|---|---|
| TCP 三次握手 | 客户端发 SYN,服务端回 SYN-ACK,客户端再回 ACK | 防止历史重复连接请求建立错误连接 | 为什么不是两次?第三次握手丢了会怎样 |
| 滑动窗口 | 发送端维护发送窗口,接收端通告接收窗口 | 对流量进行端到端控制,避免接收方来不及处理 | 窗口零怎么办(窗口探测) |
| 距离向量路由 | 路由器只和邻居交换路由表 | 坏消息传播慢,可能出现计数到无穷问题 | 毒性逆转技术怎么消除环路 |
5.2 用课后题清单自检 408 覆盖度:哪些题可以直接对标真题
很多人问湖科大教书匠这类细讲视频适合考 408 吗,我的看法是:视频能帮你把推导讲透,但真正让你记住推导的是自己动手算一遍——而课后题就是最廉价的动手材料。把 408 考纲上的知识节点拿出来,逐个对照这本书的课后题:物理层的奈奎斯特和香农公式对应“数据通信基础”;数据链路层的 CRC 和滑动窗口对应“流量控制与可靠传输”;网络层的路由算法对应“路由与转发”;传输层的拥塞控制对应“TCP 可靠传输”。每找到一个对应题号,就在考纲清单上打个勾。
这个动作的价值是查出“考纲覆盖盲区”。比如 408 考纲里“IPv6 基本概念”和“移动 IP 的概念”这两条,在这本书里能找到对应章节的复习题,但答案 doc 往往只有一两行结论。如果你只是对着答案背,就很难应对考试里那些绕弯的题。覆盖度清单做完后,你会发现大部分计算题的知识点都集中在网络层和传输层,这与王道那类复习资料把网络层和传输层列为重点章节的做法完全一致——不是资料编得偏心,而是考点本身就这么分配。
5.3 组一个“答案校对小组”:用抓包结果反查答案
课后答案不是不能质疑,而是要有依据地质疑。第 4 章避坑里提到答案可能跳步、可能混编,但真正判断一道题“答错了”,最好用实验事实说话。这本书第 6 章的 TCP 状态转换图有配套课后题,答案里写“主动关闭方最后要经过 TIME_WAIT 状态,等待 2 倍最大报文段生存时间”,这个结论用 Wireshark 抓一次包就能验证:本机发起一次 HTTP 请求后关闭连接,在过滤器中输入tcp.flags.fin == 1,观察最后一个 FIN 之后的状态,就能看到 TIME_WAIT 的实际表现。
这种做法本质上是在给答案做“双盲测试”——先自己写答案,再用工具验证,最后才翻开 doc 对照。很多学校的计算机网络实验一就是抓包看三次握手,本质是同一件事:协议栈的行为是公开的,课后答案只是对协议行为的文字描述,描述得对不对,抓包一看便知。把这种习惯带到复习中,这份 doc 就不再是权威,而是你学习过程中的一个普通核对对象。
6. 最后一章:期末冲刺的一个验证技巧:给每道题标三档状态
期末冲刺阶段,别再从头到尾翻答案了。把做过的每道课后题按“能默写结论、能独立推导、能给别人讲明白”三档重新标注一遍。能默写结论是最低档,说明只是短期记忆;能独立推导是中间档,说明你掌握了公式和过程;能给别人讲明白是最高档,说明你连边界条件和易错点都心里有数。每道计算题都问自己一句:“如果把信噪比从 30dB 改成 20dB,我能不能不查公式直接写出推导?”能写出,这道题才真正属于你。
这个方法我当年期末复习时没做到,代价是考试考了一道变式题——把书上的经典例题改了带宽参数,我按背下来的答案填,结果整个数量级都错了。那次之后我才明白,课后答案最大的陷阱不是答案本身有错,而是它让你误以为“看懂了”就等于“会做了”。从那以后,凡是涉及公式的题,我都坚持把公式推导手写一遍,再用脚本验算,确认数值对得上才在题号前打勾。
这套做法放到现在依然适用:网络上这份严伟、潘爱民版的课后答案 doc 不会消失,它仍然是很多人期末冲刺时的救命稻草。但真正让计算机网络这门课变得有用的,从来不是背下答案里的哪句话,而是你能不能在遇到一个没见过的网络问题时,自己把那句话推导出来。希望这份复习思路帮到你,也祝你把这本书啃透之后,面对任何网络问题都能心里有底。
本文还有配套的精品资源,点击获取