ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

谢希仁《计算机网络》第七版课后题答案与计算题推导全攻略

谢希仁《计算机网络》第七版课后题答案与计算题推导全攻略 简介这份《计算机网络》谢希仁第七版课后题答案完整版面向备考广工计算机考研的考生及正在学习计算机网络课程的高校学生帮助解决课后习题无从下手、答案零散难核对的问题。资源包内含1个docx文档压缩包约10.23MB内容按章节系统整理覆盖概述、物理层、数据链路层等核心模块的习题解答。文档对分组交换、电路交换与报文交换的对比、因特网发展阶段、网络分类、性能指标计算等高频考点均给出详细推导与结论如最小时延分组长度公式、发送时延与传播时延的对比分析等便于读者对照教材逐题复盘、理解解题思路。目前已有2041人学习下载适合需要系统刷题、查漏补缺的考研与课程复习人群使用。1. 从一份课后题答案说起谢希仁《计算机网络》第七版到底该怎么刷很多人第一次翻开谢希仁《计算机网络》第七版是在期末前两周或者考研 408 复习进入强化阶段的时候。书翻了一遍概念好像都懂一做课后题就卡壳——尤其是计算题子网划分、CRC 校验、滑动窗口效率、路由聚合光看答案数字根本不知道中间那几步是怎么来的。于是「计算机网络谢希仁第七版课后题答案完整版」成了高频搜索词大家想要的其实不是一份能抄的答案而是一条能自己把题推出来的路径。这份材料对应的场景很明确本科计算机网络课程同步练习、期末复习、408 统考专业课打基础。它解决的核心问题是——把教材每章课后习题从「看答案」变成「会推导」。适合谁适合已经过了一遍教材、但计算题和协议分析题还发虚的人也适合带课的助教和想系统梳理知识点的 DevOps 工程师——毕竟排查网络异常流量、理解以太网帧结构底层逻辑都在这本书里。下面按章节把高频题型的推导方法、参数设置和踩坑点拆开讲让你拿到答案也能自己复现一遍。2. 物理层与数据链路层计算题的手算路径2.1 奈氏准则与香农公式先分清什么时候用哪个物理层课后题最爱考的两个公式很多人到考场还在混。奈氏准则Nyquist管的是理想低通信道没有噪声极限码元速率是 2W BaudW 是带宽Hz。香农公式管的是有噪声信道极限信息传输速率 C W·log₂(1 S/N)单位 bit/s。判断用哪个就看题干给没给信噪比。典型题带宽 3kHz信噪比 30dB求最大数据率。第一步把 dB 转成比值30dB 10·log₁₀(S/N)所以 S/N 1000。第二步套香农C 3000 × log₂(1001) ≈ 3000 × 9.97 ≈ 29.9 kbit/s。这里最容易翻车的是把 30dB 直接当成 S/N 30 代进去结果差一个数量级。如果题干说「无噪声」才轮到奈氏。比如带宽 3kHz、每个码元携带 4 bit那极限速率 2×3000×4 24 kbit/s。注意奈氏算的是码元速率上限乘每个码元的比特数才是信息速率。两个公式的适用边界是这一章所有计算题的根。2.2 CRC 校验模 2 除法的手算步骤CRC 是数据链路层必考也是手算最容易出错的地方。核心是模 2 除法不借位、不比较大小只做异或。步骤固定确定生成多项式 G(x)比如 G(x) x⁴ x 1对应二进制 10011位数 r1 5r 4。在数据 M 后面补 r 个 0得到被除数。用 G 对补零后的数做模 2 除法每次对齐最高位 1异或。余数就是 FCS位数不足 r 位前面补 0。举个具体例子数据 1101011011G 10011。补 4 个 0 得 11010110110000逐位异或下来余数是 1110所以发送序列是 11010110111110。接收方用同样的 G 去除余数为 0 就认为无差错。提示模 2 除法每一步只看当前最高位是不是 1是 1 就商 1 并异或 G是 0 就商 0 并右移。不要按十进制除法借位这是最常见的错误来源。2.3 以太网帧与最小帧长为什么是 64 字节以太网最小帧长 64 字节这个数字不是随便定的。它由冲突检测机制决定最远两端往返传播时延是 2τ发送方必须在这段时间内还在发才能检测到冲突。10Mbit/s 以太网争用期 51.2μs对应能发 512 bit 64 字节。所以帧太短发完了冲突才回来就检测不到了。课后题常考数据字段最短多少以太网帧头 14 字节6 目的 MAC 6 源 MAC 2 类型帧尾 FCS 4 字节共 18 字节开销所以数据字段最短 64 − 18 46 字节。如果上层数据不足 46 字节要填充到 46。这个 46 和 64 的关系是「头歌计算机网络实训答案 以太网」那类实验里反复出现的考点实训里抓包看到的小帧填充原理就在这。2.4 用 Python 验证 CRC 计算别只靠手算手算容易错写几行代码验证一遍心里才有底。下面这段实现模 2 除法def crc_remainder(data_bits, gen_bits): # data_bits: 字符串形式的被除数已补零 # gen_bits: 生成多项式对应的二进制字符串 data list(data_bits) gen_len len(gen_bits) for i in range(len(data) - gen_len 1): if data[i] 1: # 只有最高位为 1 才做异或 for j in range(gen_len): # 逐位异或0/1 转成整数再转回字符 data[i j] str(int(data[i j]) ^ int(gen_bits[j])) return .join(data[-(gen_len - 1):]) # 余数取最后 r 位 M 1101011011 G 10011 padded M 0 * (len(G) - 1) fcs crc_remainder(padded, G) print(FCS , fcs) # 期望 1110 print(发送序列 , M fcs)逻辑说明外层循环控制当前对齐位置只有当前位是 1 才触发异或这正好对应模 2 除法「够除就商 1」的规则。参数上gen_bits必须包含最高位的 1长度决定补零个数和余数位数。跑出来 FCS 1110和手算对上说明步骤没错。如果结果位数不够记得前面补 0 到 r 位这是提交作业时最容易被扣分的细节。3. 网络层子网划分、路由聚合与 IP 计算3.1 子网划分从借位到可用地址数网络层课后题的重头戏是子网划分。给定一个 C 类地址 192.168.1.0/24要划分成 4 个子网怎么借位4 个子网需要 2 位因为 2² 4。借 2 位后掩码变成 /26即 255.255.255.192。每个子网 64 个地址去掉网络号和广播号可用主机 62 个。四个子网分别是 192.168.1.0/26、192.168.1.64/26、192.168.1.128/26、192.168.1.192/26。判断某个 IP 属于哪个子网把 IP 和掩码做按位与就行。比如 192.168.1.100 与 255.255.255.192 相与得 192.168.1.64落在第二个子网。这里有个高频坑题目问「可用主机数」时要减 2网络地址和广播地址但如果问的是「地址块大小」或「子网数」就别减。很多人一看 64 就写 64 个主机直接错。另外全 0 和全 1 的子网号在 CIDR 里是可用的老教材里说不能用第七版已经按 CIDR 讲别被旧笔记带偏。3.2 路由聚合找最长公共前缀路由聚合题给一堆网络前缀让你聚成一条。方法是把所有前缀写成二进制找最长公共前缀。比如 192.168.0.0/24、192.168.1.0/24、192.168.2.0/24、192.168.3.0/24第三段分别是 0、1、2、3二进制 00000000、00000001、00000010、00000011前 6 位相同000000所以聚合后是 192.168.0.0/22。验证/22 掩码 255.255.252.0地址范围 192.168.0.0 到 192.168.3.255正好覆盖四条。聚合的关键是「最长公共前缀」不是简单看数字连不连续。如果给的是 192.168.0.0/24 和 192.168.2.0/24中间缺了 1.0/24严格说不能聚成 /22因为会多覆盖一个不存在的网段——但很多题目默认允许要看题干措辞。3.3 IP 分片计算偏移量以 8 字节为单位IP 数据报分片是计算题常客。一个 4000 字节的数据报含 20 字节首部要经过 MTU 1500 的链路怎么分每片数据部分最多 1500 − 20 1480 字节但必须是 8 的整数倍1480 正好是 8 的倍数。4000 − 20 3980 字节数据3980 ÷ 1480 2 余 1020所以分 3 片1480、1480、1020。片偏移字段以 8 字节为单位第一片偏移 0第二片偏移 1480/8 185第三片偏移 2960/8 370。MF更多分片标志前两片为 1最后一片为 0。这里最容易错的是把偏移直接写成字节数忘了除以 8。还有首部长度每片都要重新加 20 字节首部总长度字段是「首部 本片数据」。片序号数据长度片偏移MF1148001214801851310203700注意片偏移单位是 8 字节这是 IP 首部格式规定的不是随便定的。数据长度不是 8 的倍数时要向下取整到 8 的倍数再分。3.4 用 ipaddress 库批量验证子网题手算子网容易漏Python 的ipaddress库可以批量验证import ipaddress net ipaddress.ip_network(192.168.1.0/24) subnets list(net.subnets(prefixlen_diff2)) # 借 2 位划 4 个子网 for s in subnets: # 每个子网的网络地址、广播地址、可用主机数 print(s, 可用主机:, s.num_addresses - 2) # 判断某个 IP 属于哪个子网 ip ipaddress.ip_address(192.168.1.100) for s in subnets: if ip in s: print(ip, 属于, s)逻辑说明subnets(prefixlen_diff2)表示在原前缀基础上多借 2 位正好划出 4 个子网。num_addresses是该子网总地址数减 2 得可用主机数。参数prefixlen_diff改成 3 就是借 3 位划 8 个子网。跑一遍和手算结果对照能快速定位是掩码算错还是地址范围算错。这个习惯在期末复习和 408 刷题时特别省时间。4. 传输层与应用层窗口、拥塞与协议分析4.1 滑动窗口效率发送窗口和往返时延的关系传输层课后题常考滑动窗口的信道利用率。停等协议效率 发送一帧的时间 /发送时间 往返时延 RTT。设帧长 1000 bit带宽 10 Mbit/s发送时间 1000/10⁷ 100μs若 RTT 1ms效率 100/(1001000) ≈ 9%。要提高到 80% 以上就得用连续 ARQ窗口大小 W 满足 W × 发送时间 ≥ 发送时间 RTT即 W ≥ 1 RTT/发送时间 1 1000/100 11取 W 11。这里的关键是分清「发送时延」和「传播时延」。发送时延 帧长/带宽传播时延 距离/光速。RTT 是往返传播时延不含发送时延严格说含对方的发送时延但通常忽略。很多人把 RTT 和发送时延混在一起算结果窗口大小差好几倍。4.2 TCP 拥塞控制慢开始、拥塞避免、快重传、快恢复TCP 拥塞控制四个阶段是必考。慢开始cwnd 从 1 开始每收到一个 ACK 翻倍指数增长直到达到慢开始门限 ssthresh。拥塞避免cwnd 每经过一个 RTT 加 1线性增长。超时ssthresh cwnd/2cwnd 1重新慢开始。收到三个重复 ACK快重传 快恢复ssthresh cwnd/2cwnd ssthresh直接进入拥塞避免。典型题cwnd 初始 1ssthresh 初始 16画 cwnd 变化曲线。慢开始阶段 1→2→4→8→16到 16 后转拥塞避免17→18→19…。如果第 20 个 RTT 超时ssthresh 20/2 10cwnd 1重新慢开始 1→2→4→8→10到 10 转拥塞避免。画图时注意横轴是 RTT 轮次纵轴是 cwnd转折点标清楚。提示快恢复和慢开始的差别在于快恢复不回到 cwnd 1而是降到新的 ssthresh。这是「快」的含义别和超时处理搞混。4.3 DNS 解析与 HTTP 请求抓包看协议交互应用层课后题偏概念但结合抓包理解更牢。DNS 解析过程浏览器先查本地缓存没有就向本地域名服务器递归查询本地服务器再向根、顶级、权威服务器迭代查询。HTTP/1.1 默认持久连接一个 TCP 连接可以发多个请求。这些在「计算机网络自顶向下」那本书里讲得更细两本对照看应用层协议交互就清楚了。用 Wireshark 抓一次访问网页的包过滤dns看查询和响应过滤http看请求行、首部、响应码。重点看 DNS 查询的 Transaction ID 和 HTTP 的 Host 首部。抓包不是为了做题是为了把「递归查询」「迭代查询」「持久连接」这些词和真实报文对上号。期末复习时能对着抓包讲清楚一次网页访问的全过程应用层大题基本稳了。4.4 用 Python 模拟 TCP 拥塞窗口变化把拥塞控制写成代码曲线就活了def tcp_congestion(rounds, init_ssthresh16): cwnd 1 ssthresh init_ssthresh history [] for r in range(rounds): history.append(cwnd) if cwnd ssthresh: cwnd * 2 # 慢开始指数增长 else: cwnd 1 # 拥塞避免线性增长 if cwnd 24: # 模拟第 24 轮超时 ssthresh cwnd // 2 cwnd 1 return history print(tcp_congestion(30))逻辑说明cwnd ssthresh时翻倍对应慢开始否则加 1对应拥塞避免。cwnd 24触发超时ssthresh 减半、cwnd 归 1。参数init_ssthresh改初始门限rounds改模拟轮数。跑出来打印每轮 cwnd和手画曲线对照能直观看到指数转线性的拐点。这个脚本在复习时改几个参数就能验证不同初始条件下的行为比死记硬背强。5. 刷课后题常踩的坑从答案对不上到概念混淆5.1 现象CRC 余数算出来位数不对答案对不上原因模 2 除法最后余数应该取 r 位r 生成多项式位数 − 1但手算时容易把前面的 0 丢掉或者异或过程中多算了一位。解决算完余数后检查位数不足 r 位前面补 0。用第 2 章的 Python 脚本跑一遍对照比反复手算靠谱。5.2 现象子网划分可用主机数总是差 2原因把网络地址和广播地址也算进可用主机了。解决可用主机数 2^(主机位数) − 2。主机位数 32 − 前缀长度。比如 /26 主机位 6 位2⁶ − 2 62。如果题目问的是「地址块大小」才不减 2。看清题干问的是「可用主机」还是「地址总数」。5.3 现象IP 分片偏移量算成字节数原因忘了片偏移以 8 字节为单位。解决偏移量 该片数据在原始数据中的字节偏移 ÷ 8。第一片偏移 0第二片偏移 第一片数据长度 ÷ 8。数据长度不是 8 的倍数时要向下取整到 8 的倍数。这个坑在 408 真题里反复出现血泪经验就是每次算完除一下 8。5.4 现象TCP 拥塞控制把快恢复当成慢开始原因混淆了超时和三个重复 ACK 的处理。解决超时 → ssthresh cwnd/2cwnd 1慢开始三个重复 ACK → ssthresh cwnd/2cwnd ssthresh快恢复直接拥塞避免。记口诀超时归 1快恢复减半不归 1。画图时把两种情况的转折点标不同颜色一眼就能区分。5.5 现象奈氏和香农公式用反原因没看清题干有没有给信噪比。解决给信噪比dB 或比值用香农说「无噪声」「理想信道」用奈氏。香农算的是信息速率bit/s奈氏算的是码元速率Baud奈氏结果要乘每个码元的比特数才是信息速率。这两个公式的适用条件是物理层计算题的第一道分水岭。6. 把答案变成能力一套可复用的自测流程刷课后题的终点不是对答案是能自己出题、自己验证。我一般会按这个流程走一遍先按章节把计算题分类物理层归公式题、数据链路层归 CRC 和帧长、网络层归子网和分片、传输层归窗口和拥塞。每类挑 3 道典型题手算一遍再用第 2、3、4 章的 Python 脚本验证一遍。对不上的地方就是概念没吃透的地方。具体做法建一个表格左边写题号中间写手算结果右边写脚本结果最后一列写差异原因。差异原因只有三种——公式用错、单位没换算、边界条件漏了。把这三类原因统计一下就知道自己薄弱在哪。比如差异集中在「单位没换算」那下次做题先统一单位再动笔。题型手算要点脚本验证常见差异原因CRC模 2 除法余数补足 r 位crc_remainder 函数余数位数不对子网划分借位数 log₂(子网数)ipaddress.subnets可用主机数减 2IP 分片偏移量 ÷ 8手动构造分片列表偏移忘除 8拥塞控制超时归 1快恢复减半tcp_congestion 函数快恢复当慢开始这套流程的价值在于它把「计算机网络谢希仁第七版课后题答案完整版」从一份静态文档变成了一套动态自测方法。答案只是参照能自己推出来、验证出来才是真的会了。408 复习到后期你会发现真题的计算题套路和课后题高度重合区别只是包装。把课后题的计算路径练成肌肉记忆考场上看到子网划分和拥塞控制手比脑子快。最后一个习惯每做完一章合上书用白纸把这一章的核心公式和协议流程默写一遍。写不出来的就是没掌握的。这个习惯我坚持了整个复习周期比反复看答案有用得多。希望帮到你。本文还有配套的精品资源点击获取
返回列表