计算机网络自顶向下第6版习题答案与解题思路全解析
1. 为什么“自顶向下”这本教材的习题值得反复刷如果你正在学计算机网络或者准备考研、准备面试手里大概率绕不开一本教材——某经典自顶向下方法教材。这本书从应用层一路往下讲到物理层逻辑清晰、案例扎实但真正让无数人头疼的是每章后面那几十道习题。我见过太多同学书看懂了课听完了一到做题就卡壳尤其是那些需要计算、需要画时序图、需要推导窗口大小的题目光靠看答案根本不知道为什么。这篇内容就是围绕这本教材第6版的课后习题答案展开的。我会把每章习题的核心考点、常见坑、解题思路、以及我当年刷题时总结出来的“野路子”全部拆开讲。适合三类人正在上课需要交作业的本科生、准备考研复试被问到网络细节的考生、以及工作后想补网络基础的开发者。不管你是刚翻开第一章的新手还是已经刷到第五章传输层的老油条这里都有你能直接抄作业的东西。先给一个整体判断这本书的习题难度是阶梯式的。每章前几道是概念验证题中间是计算和分析题最后几道往往是综合设计题。很多人卡在中间那部分因为教材正文讲原理习题却要求你把原理转化成数值或流程。我的建议是不要一上来就翻答案先自己写哪怕写错了再看解析印象会深十倍。下面我按章节拆解把每类题型的底层逻辑讲透。2. 应用层习题从HTTP到DNS的实战拆解2.1 HTTP请求响应与RTT计算题的通用套路应用层最常考的题型之一就是计算从点击链接到收到完整页面所需的时间。这类题的核心变量只有几个往返时延RTT、传输时延、并行连接数、是否使用持久连接。很多同学一看到“非持久HTTP”和“持久HTTP”就晕其实你只需要记住一个原则非持久连接每传一个对象就要新建一次TCP连接每次建连至少消耗一个RTT持久连接则复用同一条TCP连接省去后续建连的RTT。我拿一道典型题举例假设一个页面包含1个基础HTML文件和3个图片RTT为100ms忽略传输时延。非持久HTTP且串行请求的情况下总时间是多少答案是建TCP连1个RTT发HTTP请求并收到响应1个RTT这是HTML文件共2个RTT。然后每个图片都要重新建连每个图片2个RTT3个图片就是6个RTT。总共8个RTT即800ms。如果改成非持久但并行请求图片可以同时建连那么HTML之后3个图片并行每个2个RTT但并行意味着它们同时开始总时间还是2个RTT所以总共4个RTT400ms。如果是持久连接且串行建连1个RTTHTML请求响应1个RTT然后3个图片共用这条连接每个1个RTT总共235个RTT500ms。持久连接加流水线图片请求可以连续发理想情况下总时间更短。注意很多题会故意加一个“客户端解析HTML文件需要时间”或者“DNS查询时间”这时候你要把DNS的RTT单独加上。DNS通常是递归查询本地DNS到根、到顶级、到权威每一级一个RTT但如果有缓存可能为0。做题时先看题目有没有说“缓存为空”。我自己的经验是把这类题画成时间轴图横轴是时间纵轴是客户端和服务器每个RTT画一个箭头标上序号。画完图答案基本就出来了。不要硬背公式画图最稳。2.2 DNS查询与缓存机制的习题陷阱DNS部分的习题经常考递归查询和迭代查询的区别以及缓存对查询次数的影响。有一道经典题客户端要访问某个域名本地DNS服务器缓存为空问从根域名服务器开始迭代查询需要多少次请求答案是本地DNS先问根根返回顶级域名服务器地址本地DNS再问顶级顶级返回权威服务器地址本地DNS再问权威拿到最终IP。一共3次请求加上客户端问本地DNS的1次总共4次。如果是递归查询本地DNS会替客户端去问根、顶级、权威客户端只发1次请求但本地DNS和各级服务器之间的请求次数不变。这里有个容易错的点题目可能会说“顶级域名服务器知道权威服务器的地址”但实际互联网中顶级域名服务器通常只返回它管理的权威服务器不一定直接知道最终IP。做题时以教材描述为准教材说知道就知道。还有一个高频考点是DNS缓存。如果本地DNS缓存了某个域名的记录那么查询时间直接降为0忽略本地处理时间。如果缓存了顶级域名的记录那么可以跳过根查询。我见过一道题问“第二次访问同一域名时哪些查询可以省略”答案就是根和顶级都可以省略直接问权威。这类题的关键是分清“缓存了什么级别的记录”。2.3 邮件协议与FTP的细节辨析SMTP、POP3、IMAP这三个邮件协议的区别几乎每学期都考。SMTP是推协议用于发送邮件从用户代理到邮件服务器或者从发送方服务器到接收方服务器。POP3和IMAP是拉协议用于从服务器读取邮件。POP3通常下载后删除IMAP则在服务器上管理文件夹。习题里常问“如果用户用POP3收邮件然后在另一台设备上还能看到之前的邮件吗”答案是不能因为POP3默认下载后删除。如果题目说“配置为保留副本”那就可以。FTP的控制连接和数据连接分离控制连接用21端口数据连接用20端口主动模式。主动模式下服务器主动连客户端的数据端口被动模式下客户端连服务器的随机端口。习题常考“如果客户端在防火墙后哪种模式更友好”答案是被动模式因为主动模式下服务器发起的连接可能被防火墙拦截。这些协议题不难但细节多建议做一张对比表把端口、方向、有状态无状态、是否带外控制都列出来。我当年就是靠这张表考试时一眼就能选出答案。3. 传输层习题可靠传输与拥塞控制的硬骨头3.1 滑动窗口与选择重传的窗口大小计算传输层是整本书最硬核的部分尤其是滑动窗口和选择重传。习题里经常给一个序号位数问最大窗口大小是多少。比如序号用5位表示那么序号空间是0到31共32个。对于选择重传发送窗口和接收窗口之和不能超过序号空间所以最大窗口是16。对于回退N步发送窗口最大是31接收窗口是1。这个结论要记牢但更重要的是理解为什么。为什么选择重传的窗口不能超过序号空间的一半因为如果发送窗口和接收窗口都太大接收方无法区分一个新分组和一个重传的旧分组。举个例子序号空间32发送窗口20接收窗口20那么发送方发了序号0到19接收方收到后窗口滑动到20到39模32就是20到7。如果此时发送方超时重传序号0接收方会以为这是一个新分组因为它的窗口覆盖了0。这就乱了。所以必须限制窗口大小让接收方的窗口和发送方的窗口不重叠。我见过一道题序号用4位问选择重传的最大窗口。4位序号空间是16最大窗口是8。很多同学直接写16错了。还有一道题回退N步序号用3位发送窗口最大是7因为8会溢出。这些计算题只要记住“选择重传取一半回退N步取全减一”基本不会错。3.2 TCP拥塞控制慢启动、拥塞避免与快速恢复的曲线分析TCP拥塞控制是必考大题。题目通常给一个拥塞窗口随时间变化的图让你标出慢启动、拥塞避免、快速恢复的阶段或者计算某个时刻的窗口大小。核心规则慢启动阶段每收到一个ACKcwnd加1所以是指数增长每个RTT翻倍。拥塞避免阶段每个RTT加1线性增长。发生超时cwnd降为1重新慢启动。收到三个冗余ACKcwnd减半进入快速恢复。有一道经典题初始cwnd1ssthresh8。问经过5个RTT后cwnd是多少慢启动RTT1后cwnd2RTT2后4RTT3后8。此时达到ssthresh进入拥塞避免。RTT4后9RTT5后10。所以答案是10。如果题目说在第5个RTT发生超时那么cwnd降为1ssthresh变为当前cwnd的一半即5。然后重新慢启动。这里有个坑很多题会把“三个冗余ACK”和“超时”混在一起考。你要分清超时是严重拥塞cwnd直接降到1三个冗余ACK是轻微拥塞cwnd减半。还有快速恢复阶段cwnd不是从1开始而是从ssthresh3开始因为收到了三个重复ACK说明有三个分组已经离开网络。我自己的做法是拿到题先画时间轴标出每个RTT的cwnd值然后根据事件调整。不要跳步一步一步来再复杂的题也能解。3.3 往返时间估计与超时时间的计算题TCP的超时时间计算涉及EstimatedRTT和DevRTT。公式是EstimatedRTT (1-α) * EstimatedRTT α * SampleRTT通常α0.125。DevRTT (1-β) * DevRTT β * |SampleRTT - EstimatedRTT|β0.25。超时时间 EstimatedRTT 4 * DevRTT。题目一般会给几个SampleRTT让你算最终的TimeoutInterval。比如初始EstimatedRTT100msDevRTT10ms第一个SampleRTT120ms。那么新的EstimatedRTT 0.875100 0.125120 87.5 15 102.5ms。DevRTT 0.7510 0.25|120-102.5| 7.5 0.2517.5 7.5 4.375 11.875ms。超时时间 102.5 411.875 102.5 47.5 150ms。这类题不难但计算要细心。我建议用表格把每次的SampleRTT、EstimatedRTT、DevRTT、TimeoutInterval都列出来避免中间步骤出错。还有题目可能会问“如果超时后重传SampleRTT取哪个值”答案是取重传后的ACK对应的SampleRTT但Karn算法说重传时不更新EstimatedRTT除非用时间戳选项。这个细节常考。4. 网络层与链路层从IP分片到CSMA/CD的实战4.1 IP数据报分片与重组计算全流程IP分片是网络层最常考的计算题。题目给一个数据报总长度、MTU、标识符让你算分片后的每片长度、偏移量、MF标志。核心规则分片的数据部分必须是8字节的整数倍。总长度包括首部20字节。偏移量以8字节为单位。举个例子一个总长4000字节的IP数据报首部20数据3980MTU1500。那么每片最大数据是1500-201480字节。第一片数据1480偏移0MF1。第二片数据1480偏移1480/8185MF1。第三片数据3980-1480-14801020偏移(14801480)/8370MF0。总长度分别是1500、1500、1040。这里有个易错点偏移量的单位是8字节所以计算时要除以8。还有最后一片的数据不要求是8的倍数但前面的片必须是。如果题目给的MTU不是8的倍数加20比如MTU1500那没问题如果MTU1499那每片最大数据是1479但1479不是8的倍数要向下取到1472。这个细节很多题会考。我建议做这类题时先算每片最大数据量然后从总数据量里依次减最后一片直接取剩余。偏移量用累计数据量除以8。画一个表格列片号、数据长度、偏移、MF、总长度。一目了然。4.2 CSMA/CD与以太网帧的最小长度推导CSMA/CD的习题经常问为什么以太网帧的最小长度是64字节这要从碰撞检测说起。最坏情况下信号从一端传到另一端再回来需要2倍的最大传播时延。发送方必须在发送完之前检测到碰撞所以发送时间至少是2倍传播时延。对于10Mbps以太网最大距离2500米传播速度2e8 m/s传播时延2500/2e812.5微秒往返25微秒。发送25微秒的数据量是10Mbps * 25us 250比特约等于64字节512比特。实际上标准取512比特即64字节。题目可能会变参数比如速率100Mbps距离100米问最小帧长。你只需要用公式最小帧长 2 * 距离 / 传播速度 * 速率。注意单位换算。我见过一道题速率1Gbps距离200米算出来是2*200/2e8 * 1e9 2000比特 250字节。但实际以太网最小帧还是64字节因为标准没变。题目如果问“理论上最小”就用公式算如果问“实际标准”就是64字节。还有CSMA/CD的二进制指数退避算法也常考。第n次碰撞后从0到2^n-1中随机取一个数乘以争用期。如果n3就从0到7中取。这个简单但要注意n最大到10超过10就固定从0到1023取。4.3 交换机与路由器的转发决策对比交换机和路由器的区别习题里常以“一个帧到达交换机交换机如何转发”和“一个分组到达路由器路由器如何转发”来考。交换机看MAC地址表如果表中有目的MAC就从对应端口转发如果没有就泛洪。路由器看路由表用最长前缀匹配找到下一跳。有一道题一个交换机收到一个帧目的MAC不在表中它会怎么做答案是泛洪到所有端口除了 incoming 端口。如果目的MAC在表中就只转发到对应端口。路由器则不会泛洪如果路由表中没有匹配项就丢弃并发送ICMP不可达。这里有个细节交换机是即插即用的MAC表通过源MAC学习。路由器需要配置路由协议或静态路由。题目可能会问“交换机需要配置IP吗”答案是不需要交换机是二层设备只关心MAC。路由器是三层设备需要IP。我当年做这类题时喜欢画一个网络拓扑标上MAC和IP然后模拟一个帧或分组的旅程。这样比死记硬背强得多。5. 无线与网络安全容易被忽视的得分点5.1 802.11 CSMA/CA与RTS/CTS机制无线网络的CSMA/CA和有线CSMA/CD不同因为无线不能一边发一边听。习题常考为什么无线要用CSMA/CA因为无线信号衰减快且存在隐藏终端问题。CSMA/CA通过ACK确认来避免碰撞。RTS/CTS机制用于解决隐藏终端发送方先发RTS接收方回CTS其他站听到CTS后延迟发送。有一道题A和B都想发给AP但A和B互相听不到问如何避免碰撞答案是用RTS/CTS。A发RTS给APAP回CTSB听到CTS后知道AP要接收A的数据就延迟。如果B也发RTS就会碰撞。所以RTS/CTS不是万能的但能减少碰撞。还有802.11的帧间间隔SIFS、DIFS也常考。SIFS最短用于ACKDIFS较长用于数据帧。优先级SIFS PIFS DIFS。题目可能会问“ACK在什么之后发送”答案是SIFS之后。5.2 对称加密与非对称加密的混合使用网络安全部分的习题经常考RSA和AES的混合加密。为什么不用RSA加密所有数据因为RSA慢适合加密小数据比如对称密钥。实际流程A生成一个对称密钥用B的公钥加密后发给BB用私钥解密得到对称密钥然后双方用对称密钥通信。题目可能会给p5, q7让你算RSA的公钥和私钥。n35φ(n)24。选e5因为5和24互质。d e^-1 mod 245525 mod 241所以d5。公钥(5,35)私钥(5,35)。这里e和d相同是巧合但计算是对的。加密m3c3^5 mod 35 243 mod 35 243-21033。解密33^5 mod 35 33^21089 mod 351089-108544^2161633528 mod 35528-5253。正确。这类题不难但计算量大。我建议用模运算的性质分步算别直接算大数。还有题目可能会问“如果p和q泄露会怎样”答案是私钥可被计算加密失效。5.3 数字签名与报文认证的习题辨析数字签名和报文认证的区别数字签名用私钥加密公钥解密提供认证和不可否认性报文认证用共享密钥或哈希只提供认证不提供不可否认性。题目常问“如果A和B共享一个密钥A发消息给BB能证明是A发的吗”答案是不能因为B也能生成同样的消息所以不可否认性不成立。还有哈希函数的性质单向性、抗弱碰撞、抗强碰撞。题目可能会问“MD5和SHA-256哪个更安全”答案是SHA-256因为MD5已被证明有碰撞。但教材第6版可能还没更新到最新以教材为准。我自己的经验是这部分题偏概念多看书上的定义把“提供什么安全服务”列成表做题时对号入座。6. 刷题节奏与答案使用心得6.1 如何安排每章习题的练习顺序我建议每学完一章先做前5道概念题确认基本概念清楚。然后做中间的计算题这部分最花时间但最能检验理解。最后做综合题如果时间不够至少看懂答案的思路。不要一章全做完再对答案做5道就对一次及时纠正。对于传输层和网络层计算题多建议准备一个错题本把做错的题号、错误原因、正确思路记下来。我当年错得最多的是滑动窗口的窗口大小和IP分片的偏移量后来专门练了20道就再也没错过。6.2 答案看不懂时怎么办有时候答案跳步太多看不懂。我的做法是先看答案的最终结果然后自己反推。比如拥塞控制题答案说cwnd10我就从初始值开始按规则一步步推看哪一步能到10。如果推不出来就去看教材对应章节的例题通常例题和习题是配套的。还有一个办法找同学讨论。我当年和室友一起刷题他懂的我可能不懂互相讲一遍效果比看答案好。如果实在没人讨论就去网上搜但要注意网上的答案可能有错最好交叉验证。6.3 常见错误类型与避坑清单我整理了一个常见错误表你可以对照检查错误类型典型表现纠正方法单位混淆RTT用秒速率用Mbps直接乘统一换算成比特和秒窗口大小超限选择重传窗口取序号空间记住取一半偏移量忘除8IP分片偏移直接写字节数除以8混淆超时和冗余ACK超时降为1冗余ACK减半画图区分DNS缓存级别搞错以为缓存了域名就不用问权威缓存只跳过已缓存的级别加密计算顺序错RSA先加密后签名签名用私钥加密用公钥提示做题时把“已知”和“求”列清楚单位统一画图辅助能避免80%的错误。6.4 从习题到面试哪些题最值得反复看如果你是为了面试重点看传输层的TCP拥塞控制、三次握手四次挥手、流量控制网络层的IP分片、路由算法链路层的CSMA/CD、交换机转发。应用层的HTTP、DNS也常问。安全部分RSA和数字签名要能讲清楚流程。我面试时被问过“TCP慢启动什么时候结束”我直接画了曲线讲了ssthresh的作用面试官很满意。所以习题不只是为了考试更是为了把知识内化成能讲出来的东西。最后分享一个小技巧把每章的习题答案整理成自己的话不要照抄。比如“选择重传窗口是序号空间的一半”你可以写成“因为要避免新旧分组混淆发送和接收窗口加起来不能超过序号总数所以各取一半”。这样写一遍比看十遍答案都管用。