简介:《计算机网络:自顶向下方法》是计算机专业经典教材,这份中文版习题答案面向正在学习该课程或准备考研复试的学生,帮助读者逐章核对课后习题、理解关键知识点。资源为PDF文档,共1个文件,大小12.59MB,文件独立便于在电脑、平板或手机上直接阅读,也适合配合原书进行章节同步练习。目前已有3100人学习下载。答案内容覆盖应用层、运输层、网络层等核心章节,包含解题思路与关键步骤,不只是给出结果,还会解释协议交互流程与设计动机,便于深入理解P2P架构、TCP拥塞控制、IP编址与子网划分、路由算法等重点难点;对照教材使用,可以及时发现薄弱环节,构建网络分层体系,为后续网络编程或系统设计打下扎实基础,是一份实用的课后学习辅助资料。
1. 习题答案 PDF 人人都有,但能把它用成「第二个老师」的人不多
期末复习、考研刷题、408 冲刺,几乎人手一份《计算机网络自顶向下方法习题答案(中文版).pdf》。我见过太多人把它当成「背题手册」:打开 PDF,找到对应章节,照着答案抄一遍,合上,以为自己会了。结果考试换个数、换个场景,照样不会。这份答案的真正价值不在「知道第几题选什么」,而在「每一道题背后都在逼你补一块网络协议栈的拼图」。它能帮你做三件事:验证作业对不对、看懂错题错在哪、把书上抽象的概念落到具体计算和数据流里。适合三类人:刚学完一章想自测的本科生、期末冲刺靠刷题找感觉的复习党、以及考研 408 里计算机网络部分想拿满计算题分的人。这篇文章不讨论去哪下载、文件多大,只讲一件事——怎么把手里的答案用出性价比。
2. 自顶向下到底在讲什么:先弄懂答案背后的那根「协议栈主线」
2.1 为什么「自顶向下」不是教学噱头,而是排错方法论
传统教材讲网络,习惯从物理层开始,把双绞线、集线器、交换机讲完,学生早忘了学这些干嘛。Kurose 和 Ross 的《计算机网络:自顶向下方法》反着来,从你每天都在用的应用层讲起——浏览器发一个 HTTP 请求,数据怎么一步步封装、路由、到达服务器再返回。这个视角不是学术偏好,而是工程排错的基本逻辑:问题先出现在应用层(页面打不开),再逐层往下查(DNS 解析失败?TCP 连接没建立?IP 包没到?)。你手里的习题答案,每一道题都是在帮你练这个排查链路。
PDF 里的答案虽然按章节编排,但你要在脑子里把这十几章串成一条线:应用层(HTTP、FTP、SMTP、DNS)→ 传输层(TCP/UDP、拥塞控制、流量控制)→ 网络层(IP、路由协议、子网划分)→ 链路层(MAC、CSMA/CD、ARP)→ 物理层。做题的时候先问自己:这题考的是哪一层?这一层解决的问题是什么?它和上一层怎么衔接?这样看答案,你记住的不是某道题,而是一层的思维方式。
2.2 中文版答案的使用前提:对照原书英文版页码,别迷信翻译
中文版答案最大的坑是翻译偏差,尤其是术语。英文原版的「piggybacking」译成「捎带确认」,「three-way handshake」译成「三次握手」还算统一,但有些题目里的场景描述翻译过来会损失信息量。比如关于 TCP 定时器的问题,中文版常把「timeout interval」简单写成「超时时间」,而原题问的其实是「超时间隔该怎么根据 RTT 动态调整」,这是两层意思。
我一般建议的打开方式:旁边同时放原书英文版课后题 PDF 和这本中文答案。做题先看英文原题,防止翻译误导;做完拿中文答案核对,因为英文原版答案的表述更绕,中文版读起来效率高。第 7 版和第 8 版题号差异很大,注意看你手里的答案匹配哪个 Edition。如果页码对不上、题号对不上,不用怀疑自己,是版本不匹配,换对应版本即可。这道工序看着多花十分钟,实际上能省掉后面好几个小时的困惑。
2.3 答案结构拆解:不是所有题都值得逐字看,先分清三类
一份几百页的答案 PDF 里,习题可以分三类。第一类是概念问答题,比如「列举五种应用层协议及其对应传输层协议」,这类答案看要点即可,不用背原话,考试时用自己的话组织就行。第二类是计算题,比如 RTT 估计、拥塞窗口变化、CSMA/CD 最短帧长计算,这类答案是重点,每一步推导过程都是得分步骤,要能不看答案独立重算。第三类是开放设计题,比如「设计一个类似 BitTorrent 的 P2P 协议」,这类答案没有唯一标准,看它的思路就行,不用纠结和答案不一致。
明白这三类之后,你的复习效率能提升一半。很多人翻车的原因就是平均用力,概念题背了半天,计算题反而一看答案觉得「哦这么简单」就跳过,结果考试一算就错。对于计算机网络的期末复习和 408 考研来说,计算题才是拉开差距的地方。
3. 应用层与传输层核心题:把答案变成可复算的计算过程
3.1 HTTP 往返时延题:从「看答案」到「手推关键时刻线」
应用层最经典的题型是计算 HTTP 请求的总时延,涉及 TCP 连接建立、HTTP 请求/响应传输、文件大小和带宽的关系。很多答案直接给一个最终数值,看得人一头雾水。正确的打开方式是把它拆成时间线:建立 TCP 连接需要几次 RTT,发送 HTTP 请求需要几次 RTT,传输文件本身需要几轮。每轮 RTT 算清楚,加总就是总时延。
我拿一个典型的「非持续连接 vs 持续连接」题目举例。题目给出一个网页包含 1 个基础 HTML 文件和 10 张图片,假设所有对象都从同一服务器获取,RTT 为 100ms,文件传输时间忽略不计。非持续连接(每个对象都新建 TCP 连接)的总时延是 11 个对象 × 2 个 RTT(TCP 建立 1 个 + 请求响应 1 个)= 2200ms。持续连接(HTTP 1.1 默认,连接复用)则是 1 个 RTT 建立连接 + 11 个对象串行请求各 1 个 RTT = 1200ms。如果是带流水线的持续连接,只需 2 个 RTT(建连 + 所有请求一起发,响应一起回)加 1 个 RTT(基础 HTML 先到再请求图片)= 300ms 左右。这个题考的就是你对「几次 RTT」的理解,答案只写最终结果,你要在草稿纸上画出时序图。
非持续连接: RTT + RTT + (RTT + RTT) × 11 = 2200ms 持续连接: RTT + RTT + 10 × RTT = 1200ms 带流水线: RTT + RTT + RTT = 300ms上面这个对比里的关键参数是 RTT 次数。计算时最容易漏的是「基础 HTML 文件拿到后,浏览器还要解析它才能知道图片地址」这个额外 RTT。答答案 PDF 里经常默认你懂这个前置知识,所以不理解题目时就容易翻车。建议自己动手画时间线,画一遍胜过读三遍答案。
3.2 TCP 拥塞控制题:慢启动、拥塞避免、快速重传的状态机
传输层的重头戏是拥塞控制,几乎每份答案 PDF 都会有「画出拥塞窗口随时间变化图」的题。这题难在状态切换:什么时候指数增长(慢启动)、什么时候线性增长(拥塞避免)、什么时候 cwnd 直接减半(快速重传后的快恢复)、什么时候回到 1(超时重传)。
一个高频题:发送窗口初始为 1 MSS,ssthresh 初始为 16 MSS,发生超时重传(不是收到 3 个重复 ACK)。过程如下:cwnd 从 1 开始慢启动,每轮 RTT 翻倍,1→2→4→8→16,到达 16 时与 ssthresh 相等,进入拥塞避免,cwnd 线性增长 17→18→19→20→21……假设在第 10 轮发生超时。此时动作有三步:ssthresh = 当前 cwnd 的一半(约 10.5),cwnd 重置为 1,重新慢启动。很多人丢分点就是忘了更新 ssthresh,或者把超时重传和快速重传的窗口策略搞混。
# 拥塞窗口状态切换模拟(简化版,只演示逻辑) cwnd = 1 # 当前拥塞窗口,单位 MSS ssthresh = 16 # 慢启动阈值 rtt_round = 0 while rtt_round < 15: rtt_round += 1 if cwnd < ssthresh: cwnd *= 2 # 慢启动:指数增长 else: cwnd += 1 # 拥塞避免:线性加 1 # 假设第 10 轮出现超时 if rtt_round == 10: ssthresh = cwnd / 2 # 先更新阈值,注意括号里算的是整数还是浮点 cwnd = 1 # 再重置窗口 print(f"第 {rtt_round} 轮超时,ssthresh 更新为 {ssthresh}") print(f"第 {rtt_round} 轮: cwnd = {cwnd}")这段代码演示的是状态机的骨架,关键参数有三个:ssthresh 更新的时机(必须在 cwnd 归 1 之前)、当前处于哪个阶段(判断用 cwnd 与 ssthresh 比较)、超时类型(超时是归 1,快速重传是减半)。答案 PDF 里的图是静态的,你自己跑一遍这个循环,动态变化过程就刻在脑子里了。遇到更复杂的「三次重复 ACK 进入快速恢复」题型,往这个骨架里加一个分支即可。
3.3 校验和、RTT 估计、回退 N 步:传输层的三个必算必考动作
传输层除了拥塞控制,还有三类高频计算:UDP 校验和、RTT 加权平均、GBN 滑动窗口的帧序号问题。
UDP 校验和的题几乎是送分题,核心是二进制反码求和。把每 16 比特的字相加,最高位进位回卷,最后取反码。答案 PDF 里通常直接给结果,但你要会算。举个三字组的例子:10011001 11100001、01010101 10101010、11001100 00110011。先把前两个相加得 11101111 10001011,再加第三个,最高位进位回卷,最终取反码得到校验和。这个计算用 Python 处理二进制串比较直观:
def checksum(words): # words: 16 比特字符串列表 total = 0 for w in words: total += int(w, 2) if total > 0xFFFF: # 进位回卷 total = (total & 0xFFFF) + 1 return ~total & 0xFFFF # 取反码 # 三个 16 比特字 words = ["1001100111100001", "0101010110101010", "1100110000110011"] print(f"校验和: {checksum(words):016b}")关键参数是进位回卷那一步,很多人丢失进位的 1,导致结果偏差 1。另外注意:接收方校验时要把收到的校验和一起加进去,结果应该得到全 1。这个验证步骤答案 PDF 经常不展开,考试却常考。
RTT 估计题则是套公式:EstimatedRTT = (1 - α) × EstimatedRTT + α × SampleRTT,α 典型值 0.125;DevRTT 用 β = 0.25 加权。答案 PDF 会给最终超时时间,但你要会迭代。我复习时习惯写一个小表,每一轮把 EstimatedRTT、DevRTT、TimeoutInterval 三列填上,填三遍就熟了。GBN(回退 N 步)的题主要考窗口内帧序号和累积确认,丢帧后从哪帧重传,画个滑动窗口图就清楚了。这几种题性价比极高,因为套路固定,吃透类型题比做十道新题有用。
4. 网络层与链路层核心题:子网划分、路由选择、CSMA/CD 的计算现场
4.1 子网划分题:用二进制展开把 XOR 和掩码玩明白
子网划分是 408 和期末考的重灾区,几乎每份答案 PDF 都包含「给定 IP 和子网掩码,求网络地址、广播地址、可用主机数」的题型。这类题不难,但易错,核心是把十进制 IP 转成二进制再操作。约定俗成的做法是:IP 和掩码按位与得到网络地址,掩码反码与网络地址按位或得到广播地址。
比如 192.168.10.5/26,/26 表示掩码是 255.255.255.192。把 10.5 展开成二进制的最后两段,掩码最后一个字节是 11000000。网络地址是 192.168.10.0,广播地址是 192.168.10.63,可用主机数 62。很多人看答案觉得「这么简单」,自己一算就错在最后一个字节的边界上,尤其是 5 的二进制 00000101 与 11000000 相与得到 0,就以为网络地址是 .0——这个没错,但换一个 IP 比如 .131,很多人就卡壳了。所以一定要写二进制展开:
IP: 11000000.10101000.00001010.00000101 掩码: 11111111.11111111.11111111.11000000 相与后: 11000000.10101000.00001010.00000000 -> 192.168.10.0 广播: 11000000.10101000.00001010.00111111 -> 192.168.10.63答案 PDF 为了省篇幅,往往直接给结果。你自己要养成展开二进制的习惯,尤其是子网位跨字节边界时(比如 /22、/23 这类掩码分散在两个字节里),答案更容易跳步。做题时先用 5 分钟画掩码位图,再动手算,正确率会明显提升。
4.2 Dijkstra 路由算法题:从答案倒推「链路成本迭代表」
路由选择算法题给一张网络拓扑图和链路成本,要求用 Dijkstra 算出从源节点到所有节点的最短路径。答案 PDF 只给最终的路径树,但考试要求写出迭代过程。完整的迭代表有这几列:已确定最短路径的节点集合、各候选节点的当前最短距离、前驱节点、本轮新加入的节点。
以经典题库里的 6 节点拓扑为例(节点 a 到 b 成本 2、a 到 c 成本 5、b 到 c 成本 2、b 到 d 成本 7、c 到 d 成本 2、c 到 e 成本 4、d 到 e 成本 1、d 到 t 成本 3、e 到 t 成本 2),求 a 到 t 的最短路径。迭代过程是:第一轮加入 a,更新 b=2、c=5;第二轮选 b(距离最小),更新 c=4、d=9;第三轮选 c,更新 d=6、e=8;第四轮选 d,更新 e=7、t=9;第五轮选 e,更新 t=9(走 e 不改善);第六轮加入 t。最终最短路径是 a→b→c→d→t,总成本 9。答案里的路径只有一行,但你要能画出完整的迭代表。
这个题型的坑在于「前驱节点」更新时容易出错——比如第四轮 d 的最短距离从 9 更新为 6,前驱从 b 改为 c,如果前驱没同步更新,最后的路径追踪就会断。我会在每一轮更新时把「距离 + 前驱」一起写,不让它们脱节。平时对着答案自己重画迭代表,画到第三遍基本就形成肌肉记忆了。考场上想不起来就重推一遍,两分钟的事。
4.3 CSMA/CD 最短帧长与冲突检测:带宽、距离、帧长的四则运算
链路层的高频计算题是 CSMA/CD 最短帧长。核心公式是最短帧长 = 2 × 传播时延 × 数据率,其中 2 倍是因为信号往返。你手里的答案 PDF 里这类题通常给一个套公式的例子,但考试会变换着考你「最大距离」「最小帧长」「数据率」三者之间的换算。
典型题目:以太网数据率 100Mbps,信号传播速度 2×10⁸ m/s,最小帧长 512 比特(64 字节),求最大冲突域直径。公式是 512 / 100Mbps = 5.12μs,这是往返时间,单向传播时延就是 2.56μs,再乘以传播速度 2×10⁸ m/s,得到最大距离约 512m(实际以太网限制在 200m 左右是因为还有中继器和收发器的额外延迟)。这个 5.12μs 就是常说的「时隙」,是理解以太网工作原理的关键参数。
# CSMA/CD 最大距离估算 data_rate = 100_000_000 # 100 Mbps min_frame = 512 # 比特 prop_speed = 2 * 10**8 # 传播速度 m/s round_trip = min_frame / data_rate # 往返时间 5.12μs one_way = round_trip / 2 # 单向传播时延 max_distance = one_way * prop_speed # 最大距离 print(f"往返时间 {round_trip:.2f}μs, 最大距离 {max_distance/1000:.0f}m")看答案时要注意它使用的是 512 比特还是 64 字节,有些题目给的是字节,要乘以 8。另外这个公式里的传播速度不同教材可能给 2×10⁸ 或 2.3×10⁸,考试和答案保持同一来源即可。这种题的竞争力不在公式记忆,而在单位换算的细心程度,每做一道就要在草稿纸上标清单位,能有效避免翻车。
5. 习题答案自带的「隐形陷阱」:避坑与常见问题排查指南
5.1 现象:答案里的英文术语被直译,读起来像天书
翻译腔是中文版答案的头号问题。「The packet is dropped」被直译成「分组被丢弃」还好,但「flow control」直译成「流量控制」没问题,「congestion window」译成「拥塞窗口」也是通用的。真正头痛的是「piggyback acknowledgment」这种,很多版本译成「捎带确认」,你要是不知道「piggyback」的原意,做题时会卡在理解上。解决的办法是:看到不理解的说法,先回原书找对应的英文术语,用英文理解一遍再回来看中文。这不是让你放弃中文版,而是用双语对照消除歧义。对 408 考生来说,考题本身就是中文,你最终要习惯中文表述,但备考初始阶段用英文原版辅助理解,效率更高。
5.2 现象:答案的解题步骤跳跃,关键推导一步到位
这是答案 PDF 最常见的弊病。比如传输层拥塞窗口的题,答案直接展示一个窗口值序列:1, 2, 4, 8, 9, 10,中间不解释在哪一轮发生了超时、为什么不继续翻倍。你对着答案看得懂,但自己重算一遍就发现卡在第 4 步到第 5 步之间。原因很简单:答案把「推理过程」压缩成了「结果序列」。解决办法是自己补全中间步骤,拿着答案的最终结果反推每一轮的状态,然后在草稿纸上重画时间线。这个过程刚开始很痛苦,但做完三道题之后,你会发现自己已经能脱离答案独立推导了。
5.3 现象:好几份答案版本混杂,题号对不上
同一本教材的课后题在不同版本之间变动很大,第 7 版的第 15 题和第 8 版的第 15 题完全可能是两道题。很多人比对答案发现「不符」就怀疑答案错了,其实只是版本不匹配。排查方法:看答案里用到的章节标题和原书目录是否一致,看题目中的具体数值是否一致(版本更新常改数字),看图表编号是否对应。确认版本一致再做题,否则一切都是空转。如果手里只有一份 PDF 且题号对不上,可以按章节主题搜题,主题一致的情况下题目大概率是一道题的变体。
5.4 现象:答案本身有错,但你没发现
习题答案不是权威标准,作者和出版社都可能在勘误表里列出错误。常见错误类型有:计算题的算术错误、开放题的思路单一(只给一种解法但不一定最优)、概念题的表述不严谨。你做题时如果发现自己算出的结果和答案对不上,先别急着改自己的,从头验算一遍;第二遍还是不对,就用小数值代入验证关键步骤,找出分歧点。曾经有一道子网划分的题,答案给的是 .64 作为网络地址,我复算发现按掩码 255.255.255.192 应该是 .128,后来查了勘误表确实是答案错了。对答案保持「有限信任」,是工程师的基本素养,这份 PDF 也一样。
5.5 现象:只看答案不做题,考前临时抱佛脚
这是最大的坑,比任何翻译问题都致命。答案 PDF 的属性决定了它只适合「验证」和「复盘」,不适合「预习」和「替代练习」。你翻开答案觉得每道题都会,但合上答案连握手过程都说不全——这是典型的「答案幻觉」。破解方法:做题时把答案放远一点,做完一整章再对答案,做错的题标记两遍,隔一天重做一遍错题。计算机网络里的计算题不多,来回就这么几类,错题重做两遍基本就能固化住。期末复习尤其要用这个节奏,别等到考前一晚才开始翻答案。
6. 进阶用法:用「答案反推」练就快速排障的思维习惯
当你能独立重算出大部分计算题之后,这份 PDF 的价值才算真正见底。最后一个技巧是把课后题当成网络排障模拟题来做。具体方法:对于每一道问答题,先不看答案,把自己想象成网络工程师,面前是一个出故障的网络,问自己「我会先查哪一层」然后再对照答案的思路。
我举个自己的例子。有一道题问「当你在浏览器输入一个 URL 回车之后,中间发生了什么」,答案洋洋洒洒列了 DNS 解析、TCP 连接、HTTP 请求、服务器处理、响应回传、浏览器渲染六步。我当时能背下来,但真遇到自己网站打不开的时候,还是先跑去重启服务器。后来我把这道题反过来用:页面打不开,先从最近的一层查起——先看浏览器缓存有没有过期响应,再查 DNS 有没有解析出 IP,再 telnet 一下 80 端口通不通,最后才看服务器进程活没活着。这个排查顺序,和课后题答案的「自顶向下」结构完全一样。从那时候起,我不再把答案当作业参考答案,而是当排障手册看。
还有一道经典题是「TCP 和 UDP 的区别」,答案列了六点。但你仔细想,这道题的价值不在背这六点,而在遇到具体场景时能选对协议:实时语音为什么用 UDP 不用 TCP?因为 TCP 的重传会造成延迟抖动。文件传输为什么用 TCP?因为丢一个包会导致整个文件损坏。以后你在任何项目里遇到「该用 TCP 还是 UDP」的争论,答案里的这六点就是你拍板的依据。方法很简单:把每道概念题改写成「如果我在某场景遇到某问题,这个知识点能帮我做什么决策」。改写一遍,答案解析就内化成你的判断依据了。希望这份答案能帮你拿到该拿的分,更重要的是,建立那套一杆子捅到协议栈底层的排障直觉。希望帮到你。
本文还有配套的精品资源,点击获取