简介这份PDF是《通信网络基础》李建东、盛敏编著教材的课后习题参考答案面向通信工程、网络工程等专业的学生及备考人员用于核对作业、梳理考点与期末复习。资源包共1个PDF文件大小约1.32MB内容按章节组织覆盖通信网络组成、接入与网络链路、分组交换、虚电路、ATM信元与AAL适配、OSI七层与TCP/IP五层对应关系以及随机过程的平稳性与各态历经性等典型题目并附有推导过程与计算步骤。目前已有296人学习下载可作为课后自测与知识点查漏补缺的参考帮助读者理解教材中链路速率、协议分层、信元格式等易混概念适合配合课本逐章对照使用。1. 通信网络基础课后习题答案怎么用从“对答案”到“真会做”的分水岭很多人拿到《通信网络基础》李建东、盛敏版课后习题答案第一反应是拍照搜题、对答案、抄过程。我带过几届做网络方向的学生也帮同事复盘过考研专业课发现一个反直觉的结论答案本身不值钱值钱的是答案里暴露出来的解题路径和参数取值习惯。这门课的习题覆盖了信道容量、香农公式、排队论、路由与交换、差错控制等硬核内容光看答案你只能知道“结果是多少”但考试和工程里真正卡人的是“为什么这么算、边界条件在哪、单位怎么统一”。所以这篇笔记不打算给你一份“答案速查表”而是把课后习题答案当成一个可复现的解题训练系统先讲清楚这门课习题的题型分布和常见陷阱再落到具体题型的推导步骤、参数代入、单位换算最后给你一套自查和进阶的方法。适合正在学这门课、准备期末或考研专业课、以及需要快速捡起通信网络基础的从业者。下面所有内容都围绕“怎么把答案用出复现能力”展开不堆砌概念。2. 先拆题型李建东盛敏版课后题到底在考什么2.1 四类高频题型与对应章节分布把整本教材的课后题过一遍你会发现题目基本落在四个筐里信道与容量计算、编码与差错控制、排队与网络时延、路由与交换。这四类不是平均分布信道和排队往往占计算量大头编码和路由更偏概念加少量计算。我一般会先按章节把题目归类再决定每类花多少时间。题型典型章节常见问法核心公式/方法信道容量信道与噪声求C、求带宽、求信噪比香农公式 CB·log₂(1S/N)差错控制编码与差错求码距、检错纠错能力d_min与检错/纠错关系排队时延排队论求平均队长、等待时间M/M/1、Little公式路由交换网络层求最短路径、转发表Dijkstra、最长前缀匹配这张表的作用是让你拿到一道题先定位而不是上来就翻答案。定位错了公式套错答案对不上还以为是计算失误。2.2 答案里最容易被忽略的三个信息很多人只看最终数字其实答案里藏着三个关键信息单位、中间步骤的近似、以及边界条件的讨论。比如香农公式里信噪比是比值还是dB答案里如果直接写S/N1000那它默认是比值如果写30dB你就得先转成1000。再比如排队论题里答案可能把λ和μ的单位统一成“个/秒”但题目给的是“个/分钟”这一步不写出来你自己做就翻车。我习惯在答案旁边用红笔标出这三样后面复习只看红笔部分。2.3 从答案反推解题模板每类题型其实都有固定模板。以香农公式为例模板是确认B单位→确认S/N形式→代入→取log→得C。你不需要背答案只需要把模板练熟。下面这一章就按题型给你可抄的推导步骤和参数说明。3. 香农公式与信道容量题参数代入和单位换算的完整推演3.1 香农公式的标准形式与三个必调参数香农公式写出来简单C B · log₂(1 S/N)。但实际做题时三个参数每一个都能让你翻车。B是信道带宽单位HzS/N是信噪比必须是比值不能直接代dBlog₂在计算器上通常用log或ln换底。我一般会先把题目给的量列成三行BS/N求C。如果S/N给的是dB先做一步转换S/N(比值) 10^(dB/10)。这一步不做后面全错。import math def shannon_capacity(B, snr_dbNone, snr_ratioNone): 计算香农信道容量 B: 带宽单位Hz snr_db: 信噪比单位dB与snr_ratio二选一 snr_ratio: 信噪比比值与snr_db二选一 返回C单位bit/s if snr_db is not None: snr_ratio 10 ** (snr_db / 10.0) # dB转比值关键一步 if snr_ratio is None: raise ValueError(必须提供snr_db或snr_ratio) C B * math.log2(1 snr_ratio) # 香农公式主体 return C # 例B3000Hz信噪比30dB C shannon_capacity(3000, snr_db30) print(fC {C:.2f} bit/s) # 约 29901.18 bit/s这段代码的逻辑说明先判断信噪比给的是dB还是比值如果是dB就做10^(dB/10)转换然后套香农公式。参数说明B不能代kHz必须转成Hzsnr_db和snr_ratio只能给一个给两个会以snr_db为准。你手算时也一样先把单位统一到Hz和比值再按计算器。3.2 带宽与信噪比的互换关系题怎么下手有一类题会问带宽减半信噪比要提高多少才能保持容量不变这种题不要硬算先写等式B₁·log₂(1S₁/N₁) B₂·log₂(1S₂/N₂)。如果B₂B₁/2那log₂(1S₂/N₂)必须是原来的两倍。这时候你可以用数值试也可以直接解。我一般会先假设原来的S/N算出一个C再反推新的S/N。答案里如果给了具体数值你就用数值验证如果要求表达式就保留对数形式。注意这类题最容易错在把dB直接当比值代入。只要题目出现dB先转比值这是血泪经验。3.3 用Python验证课后题答案的批量方法如果你想把一整章的香农公式题都验证一遍可以写一个批量脚本把题目参数做成列表一次性输出结果再和答案对。这样比一题一题按计算器快而且能发现答案里可能的印刷错误。# 批量验证香农公式题 problems [ {B: 3000, snr_db: 30}, {B: 4000, snr_db: 20}, {B: 1000, snr_ratio: 100}, ] for i, p in enumerate(problems, 1): if snr_db in p: C shannon_capacity(p[B], snr_dbp[snr_db]) else: C shannon_capacity(p[B], snr_ratiop[snr_ratio]) print(f题{i}: C {C:.2f} bit/s)逻辑说明把每道题的参数做成字典循环调用同一个函数。参数说明如果题目给的是比值就直接传snr_ratio给dB就传snr_db。这样你只需要核对答案的数字不用重复写公式。4. 差错控制与编码题码距、检错纠错能力的计算套路4.1 码距与检错纠错能力的关系编码题里最常见的是给一个码组求最小码距d_min然后问能检几位错、纠几位错。关系是检e位错需要d_min ≥ e1纠t位错需要d_min ≥ 2t1。很多答案只写结果不写这个不等式导致你下次遇到还是不会。我一般会先把码组两两比较找出最小汉明距离再套不等式。def hamming_distance(codeword1, codeword2): 计算两个等长码字的汉明距离 if len(codeword1) ! len(codeword2): raise ValueError(码字长度必须相同) return sum(b1 ! b2 for b1, b2 in zip(codeword1, codeword2)) def min_distance(code_list): 计算码组的最小码距 min_d float(inf) for i in range(len(code_list)): for j in range(i1, len(code_list)): d hamming_distance(code_list[i], code_list[j]) if d min_d: min_d d return min_d # 例码组 {000, 011, 101, 110} code [000, 011, 101, 110] d_min min_distance(code) print(f最小码距 {d_min}) # 2 # 检错能力 e d_min - 1 1 # 纠错能力 t (d_min - 1) // 2 0逻辑说明两两算汉明距离取最小。参数说明码字必须等长且用字符串表示。算完d_min后检错能力ed_min-1纠错能力t(d_min-1)//2。这个套路适用于所有线性分组码的课后题。4.2 循环冗余校验CRC的手算与代码验证CRC题在课后题里经常出现给生成多项式和数据求余数。手算用模2除法代码可以用Python的位运算模拟。我一般会先手算一遍再用代码验证这样考试时手算不会慌。def crc_remainder(data_bits, poly_bits): 模2除法求CRC余数 data_bits: 数据位字符串如 1101 poly_bits: 生成多项式位字符串如 1011 data list(data_bits) [0] * (len(poly_bits) - 1) poly list(poly_bits) for i in range(len(data_bits)): if data[i] 1: for j in range(len(poly)): data[ij] str(int(data[ij]) ^ int(poly[j])) return .join(data[-(len(poly_bits)-1):]) # 例数据1101生成多项式1011 rem crc_remainder(1101, 1011) print(fCRC余数 {rem}) # 001逻辑说明先把数据后面补len(poly)-1个0然后逐位做模2除法遇到1就异或生成多项式。参数说明data_bits和poly_bits都用字符串长度任意。最后取余数部分。这个代码可以直接用来核对课后题的CRC结果。4.3 海明码校验位位置与计算海明码题常考校验位放在2的幂次位置然后求校验位的值。我一般会先列出所有位置标出哪些是校验位哪些是数据位然后按覆盖关系算。答案里如果只给最终码字你就用这个流程反推。def hamming_encode(data_bits): 生成海明码校验位在2的幂次位置 data_bits: 数据位字符串如 1011 返回海明码字符串 m len(data_bits) r 0 while (2**r) (m r 1): r 1 n m r code [0] * (n 1) # 1-indexed # 填入数据位 j 0 for i in range(1, n1): if i (i-1) ! 0: # 不是2的幂次 code[i] data_bits[j] j 1 # 计算校验位 for i in range(r): pos 2**i parity 0 for k in range(1, n1): if k pos and k ! pos: parity ^ int(code[k]) code[pos] str(parity) return .join(code[1:]) # 例数据1011 hcode hamming_encode(1011) print(f海明码 {hcode})逻辑说明先确定校验位个数r然后按位置填数据再对每个校验位计算覆盖范围内的异或。参数说明data_bits用字符串返回也是字符串。这个代码可以帮你验证课后题的海明码结果。5. 排队论与网络时延题M/M/1和Little公式的落地计算5.1 M/M/1模型的核心参数与公式排队论题在通信网络基础里主要考M/M/1到达率λ服务率μ利用率ρλ/μ。核心公式平均队长Lρ/(1-ρ)平均等待时间WL/λ平均系统时间TW1/μ。很多答案直接给数字但你要知道每个量的单位。λ和μ必须统一成“个/秒”或“个/分钟”不能混。def mm1_metrics(lam, mu): M/M/1排队模型指标 lam: 到达率个/秒 mu: 服务率个/秒 返回rho, L, W, T if lam mu: raise ValueError(系统不稳定lam必须小于mu) rho lam / mu L rho / (1 - rho) W L / lam T W 1 / mu return rho, L, W, T # 例λ0.5个/秒μ1个/秒 rho, L, W, T mm1_metrics(0.5, 1.0) print(fρ{rho:.2f}, L{L:.2f}, W{W:.2f}s, T{T:.2f}s)逻辑说明先判断稳定性再算ρ、L、W、T。参数说明λ和μ单位必须一致如果题目给的是“个/分钟”先除以60转成“个/秒”。这个代码可以直接套课后题。5.2 Little公式在时延题里的应用Little公式L λ·W。它适用于任何稳定系统不限于M/M/1。有些题会给你平均队长和到达率让你求平均等待时间直接用WL/λ。我一般会先确认系统是否稳定再套公式。答案里如果用了Little公式但没写出来你就补上这一步。5.3 单位换算与常见陷阱排队论题最大的坑是单位。题目可能给λ120个/分钟μ3个/秒你不换算直接算ρ40系统不稳定但实际是稳定的。所以第一步永远是统一单位。我习惯把λ和μ都转成“个/秒”再算。另外如果题目问的是“平均等待时间”不要和“平均系统时间”搞混前者不包括服务时间。提示算完ρ后先看是否小于1如果大于等于1要么是单位错了要么是题目设计成不稳定系统需要讨论。6. 路由与交换题Dijkstra和最长前缀匹配的解题步骤6.1 Dijkstra算法求最短路径的表格法路由题里Dijkstra是必考。手算时用表格法列出所有节点每次选一个未访问的最近节点更新邻居距离。答案里通常只给最终路径和距离但你要把表格画出来才能保证不错。我一般会画一个表列是节点行是迭代次数。import heapq def dijkstra(graph, start): graph: 邻接表{节点: {邻居: 权重}} 返回最短距离字典和前驱字典 dist {node: float(inf) for node in graph} dist[start] 0 prev {node: None for node in graph} pq [(0, start)] while pq: d, u heapq.heappop(pq) if d dist[u]: continue for v, w in graph[u].items(): if dist[u] w dist[v]: dist[v] dist[u] w prev[v] u heapq.heappush(pq, (dist[v], v)) return dist, prev # 例一个简单网络 graph { A: {B: 2, C: 5}, B: {C: 1, D: 4}, C: {D: 2}, D: {} } dist, prev dijkstra(graph, A) print(dist) # {A:0, B:2, C:3, D:5}逻辑说明用优先队列每次取最近节点更新邻居。参数说明graph是邻接表权重必须非负。这个代码可以验证课后题的最短路径结果。6.2 最长前缀匹配的转发表查找交换题里最长前缀匹配是重点。给一个目的IP在转发表里找匹配的前缀选最长的。我一般会把转发表按前缀长度排序从长到短匹配。答案里如果只给下一跳你就用这个方法反推。def longest_prefix_match(ip, table): ip: 目的IP字符串如 192.168.1.5 table: 列表每项为 (前缀, 下一跳)如 (192.168.1.0/24, R1) 返回匹配的下一跳 ip_int int(.join(f{int(x):08b} for x in ip.split(.)), 2) best None best_len -1 for prefix, nexthop in table: net, length prefix.split(/) length int(length) net_int int(.join(f{int(x):08b} for x in net.split(.)), 2) mask (0xFFFFFFFF (32 - length)) 0xFFFFFFFF if (ip_int mask) (net_int mask): if length best_len: best_len length best nexthop return best # 例 table [(192.168.1.0/24, R1), (192.168.0.0/16, R2), (0.0.0.0/0, R3)] print(longest_prefix_match(192.168.1.5, table)) # R1逻辑说明把IP和前缀都转成整数用掩码比较选前缀最长的。参数说明table里前缀格式为“网络/长度”下一跳为字符串。这个代码可以帮你核对课后题的转发表查找结果。7. 避坑与排查课后题答案使用中的5个血泪教训7.1 现象答案数字对不上差一个常数原因单位没统一。比如带宽给kHz你直接代Hz或者信噪比给dB你直接当比值。解决每道题先列单位统一到基本单位再算。7.2 现象排队论题算出来ρ1系统不稳定原因λ和μ单位不一致或者题目给的是“个/分钟”和“个/秒”。解决先统一成“个/秒”再算ρ。如果还是1检查题目是否故意设计成不稳定。7.3 现象CRC余数手算和答案不一致原因模2除法时异或顺序错了或者补零个数不对。解决补len(poly)-1个零从高位到低位逐位异或用代码验证。7.4 现象海明码校验位位置搞混原因记成从0开始编号或者校验位放在非2的幂次位置。解决统一用1-indexed校验位在1,2,4,8...位置。7.5 现象Dijkstra算出的路径和答案不同但距离相同原因存在多条等长路径答案选了另一条。解决只要距离对路径可以不同考试时写清楚你的选择依据即可。8. 进阶用Python把整本课后题做成可复现的解题库最后一章说一个我自己的习惯把课后题按题型做成Python函数库每道题写一个测试用例答案作为断言。这样你复习时跑一遍测试就知道自己哪里忘了。比如香农公式、CRC、M/M/1、Dijkstra各写一个函数然后写一个test_all.py把课后题参数和答案填进去。跑通就说明你会了跑不通就回去看哪一步错了。这个方法比反复翻答案有效得多因为你是用代码复现解题逻辑而不是背数字。我一般会把这个库放在本地考前跑一遍比看笔记快。希望帮到你。本文还有配套的精品资源点击获取