尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

通信网络基础课后题怎么啃:从时延计算到滑动窗口的避坑指南

通信网络基础课后题怎么啃:从时延计算到滑动窗口的避坑指南 简介这份文档是《通信网络基础》李建东、盛敏教材的课后习题答案整理面向通信工程、计算机网络等专业的学生及备考人员帮助梳理课程重点、核对习题思路。内容覆盖通信网络组成、接入与网络链路类型、分组交换、虚电路、ATM信元与AAL适配、OSI七层与TCP/IP五层模型对应关系以及Poisson过程、状态转移、组帧与CRC校验、停等式ARQ等典型习题解答适合课后复习与考前查漏补缺。资源包共1个doc文件约4.71MB以文字答案与推导过程为主便于打印或电子阅读。目前已有546人学习下载可作为教材配套的习题参考帮助读者对照章节顺序理解概念、掌握计算与证明题的解题路径。1. 通信网络基础课后题怎么啃从一道计算题翻车说起《通信网络基础》李建东、盛敏两位老师这本教材很多通信、电子、网络工程方向的同学都是又爱又恨。爱的是它把物理层到网络层的骨架讲得足够系统恨的是课后习题里那些时延、吞吐、排队、编码的推导光看答案数字根本不知道自己错在哪。我当年第一次做分组交换时延那道题直接把发送时延和传播时延加反了答案对不上还以为是书印错了后来才发现是自己对“带宽”和“速率”的理解从一开始就偏了。这篇笔记不打算给你一份“课后习题答案.doc”的搬运而是想讲清楚拿到这本书的习题应该按什么顺序拆、每类题背后的模型是什么、参数怎么代、算完怎么验证。适合正在跟这本书死磕的本科生也适合考研复习时想把通信网络基础重新捋一遍的人。核心思路只有一句答案只是结果推导路径才是能带走的东西。2. 先分清题型通信网络基础课后题的四大类与对应模型2.1 时延、吞吐、利用率最容易被“单位”坑的一类这类题几乎每章都有典型问法就是“求端到端时延”“求最大吞吐量”“求链路利用率”。很多人一上来就套公式结果单位没统一数量级直接错。我一般会先把题目里的量全部换算成国际单位制带宽用 bit/s长度用 m速率用 m/s分组长度用 bit。发送时延等于分组长度除以带宽传播时延等于距离除以传播速率处理时延和排队时延看题目给不给条件。排队时延如果题目没给分布通常默认用 M/M/1 或者简单先到先服务模型估算但教材课后题多数只考发送和传播这两项。这里有个血泪经验题目里写“带宽 10 Mbps”你要立刻反应成 10×10^6 bit/s而不是 10×2^20。通信里带宽的 M 是十进制存储容量里的 M 才是二进制。这个坑我见过太多人踩算出来差 4.8%看着不大但选择题里就是错。2.2 编码与调制画波形比背公式管用曼彻斯特编码、差分曼彻斯特、NRZ、4B/5B 这些课后题经常让你画波形或者判断编码效率。我的做法是先画时钟再画数据最后按规则叠编码。曼彻斯特是“高到低表示 0低到高表示 1”还是反过来不同教材约定可能不同李建东这本里你要以正文定义为准。差分曼彻斯特看的是每个比特起始处有没有跳变有跳变表示 0无跳变表示 1这个规则也容易记反。编码效率的计算要分清“理论效率”和“实际效率”。比如曼彻斯特编码效率是 50%因为每个比特用两个信号周期4B/5B 是 80%因为 4 位数据映射成 5 位码。课后题如果问“传 100 Mbit 数据需要多少码元”你要先确定一个码元携带几比特再算总码元数最后除以码元速率得到时间。2.3 交换与路由虚电路和数据报的对比题这类题常考“分组交换 vs 电路交换的时延比较”“虚电路建立时间对总时延的影响”。我一般会列一个时间轴电路交换先有建立阶段然后连续传输分组交换没有建立阶段但每个分组都要独立选路可能乱序。题目如果给“分组长度 1000 bit链路速率 1 Mbps中间经过 3 个路由器每个路由器处理时延 1 ms”你要把每一跳的发送时延、传播时延、处理时延分别算出来再累加。注意很多课后题默认“传播时延忽略不计”或者“处理时延为 0”但题干里如果给了具体数值就必须代进去。我见过有人看到“忽略传播时延”就真的不写结果题目最后问“总时延”阅卷时直接扣分。2.4 差错控制与滑动窗口序号范围和窗口大小的关系后退 N 帧和选择重传的窗口大小、序号位数关系是必考。后退 N 帧的发送窗口最大是 2^n - 1选择重传是 2^(n-1)其中 n 是序号位数。这个结论要会推后退 N 帧里接收窗口是 1所以发送窗口不能超过序号空间的一半再减一选择重传收发窗口相等各占一半。课后题经常给一个窗口大小问需要几位序号。你就反过来用公式2^n ≥ 2W选择重传或者 2^n ≥ W1后退 N 帧。算完取最小整数 n。这里容易错的是把“窗口大小”和“序号范围”搞混窗口是“最多能发多少个未确认帧”序号范围是“编号能编到多少”。3. 动手算一遍用 Python 把时延和吞吐题做成可复用的计算脚本3.1 环境准备与脚本骨架你不需要装什么重型工具Python 3.8 以上加标准库就够了。我习惯把常用公式写成函数这样同一类题改参数就能直接跑不用每次按计算器。下面这个脚本覆盖发送时延、传播时延、端到端时延和吞吐量四个最常考的量。# comm_net_calc.py # 通信网络基础课后题常用计算函数 # 所有输入统一用国际单位制bit, bit/s, m, m/s, s def transmission_delay(packet_bits, link_rate_bps): 发送时延 分组长度 / 链路速率 return packet_bits / link_rate_bps def propagation_delay(distance_m, prop_speed_mps2e8): 传播时延 距离 / 传播速率默认 2e8 m/s铜缆约 2/3 光速 return distance_m / prop_speed_mps def end_to_end_delay(packet_bits, link_rate_bps, distance_m, num_hops1, proc_delay_per_hop0.0, queue_delay_per_hop0.0): 端到端时延 发送时延 传播时延 处理时延 排队时延 num_hops 表示经过的链路数处理时延和排队时延按每跳累加 t_tx transmission_delay(packet_bits, link_rate_bps) t_prop propagation_delay(distance_m) t_proc proc_delay_per_hop * num_hops t_queue queue_delay_per_hop * num_hops return t_tx t_prop t_proc t_queue def throughput(packet_bits, rtt_s, window_size): 滑动窗口吞吐量 窗口大小 * 分组长度 / 往返时间 return window_size * packet_bits / rtt_s if __name__ __main__: # 示例1000 bit 分组1 Mbps 链路1000 km 距离3 跳每跳处理 1 ms delay end_to_end_delay( packet_bits1000, link_rate_bps1e6, distance_m1e6, num_hops3, proc_delay_per_hop1e-3 ) print(f端到端时延 {delay*1000:.3f} ms) # 示例窗口 7分组 1000 bitRTT 20 ms tp throughput(1000, 0.02, 7) print(f吞吐量 {tp/1e6:.3f} Mbps)逻辑说明transmission_delay只做除法不处理单位换算所以调用前你要自己把 Mbps 转成 bit/s。propagation_delay默认传播速率 2e8 m/s这是铜缆和光纤里常用的估算值如果题目明确给 3e8 就改参数。end_to_end_delay把处理时延和排队时延按跳数累加因为每经过一个路由器都要处理一次。throughput用的是窗口协议的基本吞吐公式前提是窗口足够大能覆盖 RTT 内的链路容量否则实际吞吐受限于链路速率。参数怎么改如果题目说“忽略传播时延”就把distance_m设成 0如果题目给的是“往返传播时延 RTT”那propagation_delay要算双程或者直接用 RTT 减发送时延。我一般会在草稿纸上先写清楚每个量的单位再往函数里代。3.2 用脚本验证课后题以分组交换时延为例假设课后题分组长度 1200 bit链路速率 2 Mbps源到目的经过 2 个路由器每段链路长 500 km传播速率 2×10^8 m/s路由器处理时延 0.5 ms忽略排队。求端到端时延。你手动算发送时延 1200 / 2e6 0.6 ms传播时延每段 500e3 / 2e8 2.5 ms三段链路共 3 段传播总传播 7.5 ms处理时延 2 个路由器 × 0.5 ms 1 ms总时延 0.6 7.5 1 9.1 ms。注意发送时延只算一次因为分组在源端发出去后中间路由器是存储转发但题目如果问“从源发出到目的收到”发送时延只发生在源端一次中间路由器的发送时延已经包含在“存储转发”里但很多教材简化处理只算一次。这里要按你教材的约定来李建东这本里通常把每跳的发送时延都算进去所以更严谨的算法是每段链路都有发送时延。用脚本验证# 每段链路都有发送时延的情况 t_tx_per_hop transmission_delay(1200, 2e6) # 0.6 ms t_prop_per_hop propagation_delay(500e3) # 2.5 ms num_links 3 t_proc_total 2 * 0.5e-3 # 1 ms total num_links * (t_tx_per_hop t_prop_per_hop) t_proc_total print(f总时延 {total*1000:.3f} ms) # 3*(0.62.5)1 10.3 ms看到差别了吗只算一次发送时延是 9.1 ms每跳都算是 10.3 ms。课后题答案给哪个取决于题干怎么描述。如果题目说“分组在每段链路上都要重新发送”那就用 10.3 ms如果说“源端发送后中间节点只转发不重新封装”那发送时延只算一次。这个细节就是很多人对答案对不上的原因。3.3 滑动窗口题的手算与脚本互验题目选择重传协议序号用 4 位问最大发送窗口是多少手算选择重传窗口 ≤ 2^(n-1) 2^3 8。如果题目问“后退 N 帧”那就是 2^4 - 1 15。脚本里加一个函数def max_window(seq_bits, protocolselective_repeat): 根据序号位数和协议类型返回最大窗口 if protocol selective_repeat: return 2 ** (seq_bits - 1) elif protocol go_back_n: return 2 ** seq_bits - 1 else: raise ValueError(protocol 只支持 selective_repeat 或 go_back_n) print(max_window(4, selective_repeat)) # 8 print(max_window(4, go_back_n)) # 15参数说明seq_bits是序号字段的二进制位数不是窗口大小。如果你把窗口大小传进去就错了。这个函数我一般用来快速检查课后题答案如果手算和脚本不一致先检查是不是协议类型搞混了。4. 避坑与排查课后题对答案时最容易翻车的 5 个地方4.1 现象时延算出来比答案大 10 倍原因带宽单位没换算。题目写“10 Mbps”你当成 10×2^20 bit/s实际应该是 10×10^6。或者距离写“1000 km”你直接代 1000 而不是 1e6 米。解决所有量先统一到 bit、s、m。我习惯在草稿纸左上角写一行“单位bit, s, m”每代一个数就检查一次。4.2 现象滑动窗口效率算出来大于 1原因把窗口大小和序号空间搞混或者忘了除以 RTT。效率 窗口大小 × 发送时延 / (发送时延 RTT 处理时延)如果窗口太大效率确实可以接近 1但不会超过 1。如果超过 1检查是不是把“窗口大小”当成了“序号位数”。解决效率公式里分子是“窗口内能连续发送的时间”分母是“一个周期总时间”。窗口再大分子也不会超过分母。4.3 现象编码波形画出来和答案反了原因曼彻斯特编码的 0 和 1 约定不同。有的教材写“高到低为 0”有的写“高到低为 1”。李建东这本里你要翻到编码那一节的正文看它怎么定义。解决做题前先在草稿纸上写一行“本教材约定曼彻斯特 0 高到低1 低到高”然后按这个画。差分曼彻斯特同理先确认“起始跳变表示 0 还是 1”。4.4 现象CRC 校验题余数算错原因模 2 除法里借位规则和普通除法不同或者生成多项式少写了一位。CRC 的生成多项式最高位和最低位都是 1比如 x^4 x 1 对应 10011不是 1011。解决先把生成多项式写成二进制位数是最高次幂加一。被除数后面补的 0 的个数等于生成多项式位数减一。模 2 除法每一步做异或不借位。4.5 现象路由聚合题答案和邻居不一样原因聚合时没有取最长公共前缀或者把不连续的地址也聚进去了。比如 192.168.0.0/24 和 192.168.1.0/24 可以聚成 192.168.0.0/23但 192.168.0.0/24 和 192.168.2.0/24 不能直接聚成 /22因为中间跳过了 192.168.1.0/24。解决把地址写成二进制从左往右找连续相同的位数相同位数就是聚合后的前缀长度。不连续就拆成多条。5. 进阶技巧用表格把课后题参数归档考前只翻一张纸5.1 建立自己的“题型-公式-单位”速查表课后题做多了会发现翻来覆去就是那些模型。我后来干脆用 Markdown 建了一张表每做一道新题就往里加一行。考前不翻书只看这张表。下面是我自己用的格式你可以直接抄。题型核心公式关键参数常见单位坑发送时延L / RL 分组长度(bit)R 速率(bit/s)Mbps 是 10^6不是 2^20传播时延d / vd 距离(m)v 传播速率(m/s)km 要转 m端到端时延发送传播处理排队每跳累加发送时延算一次还是每跳算滑动窗口效率W×Tt / (TtRTT)W 窗口大小Tt 发送时延窗口和序号位数别混后退 N 帧窗口2^n - 1n 序号位数不是 2^n选择重传窗口2^(n-1)n 序号位数收发窗口相等CRC 余数模 2 除法生成多项式位数补 0 个数 位数-1路由聚合最长公共前缀二进制前缀不连续不能聚这张表我一般放在错题本第一页每次对答案对不上就回来查一行。用了大概两周时延类题的正确率从六成提到九成以上。5.2 用“反向验证”检查答案合理性算完一道题不要急着对答案先做三件事第一看数量级。端到端时延如果是几十毫秒合理如果是几秒肯定错了。第二看边界。窗口大小如果是 0 或者负数错了效率如果大于 1错了。第三换一种方法算。比如时延题你可以用脚本算一遍再手算一遍两个结果一致再对答案。如果脚本和手算不一致先检查单位再检查公式。我有个习惯每道计算题做完在旁边写一行“如果带宽翻倍时延怎么变”。如果带宽翻倍发送时延减半但传播时延不变总时延不会减半。这个直觉能帮你快速判断答案是不是离谱。5.3 把错题按“错因”分类而不是按章节很多人错题本按章节排第一章、第二章结果复习时还是不知道自己的弱项在哪。我后来改成按错因排单位错、公式错、概念错、计算错。单位错就练换算公式错就背推导概念错就回去看正文计算错就放慢速度。这样复习效率高很多。最后说一个我自己的教训当年考研复习我把课后题答案背得滚瓜烂熟结果考试换了个参数我还是按背的答案写直接翻车。后来才明白课后题的价值不是答案本身而是逼你把每个公式的适用条件和参数含义搞清楚。现在我做任何通信网络的计算都会先问自己三个问题这个公式的前提是什么单位统一了吗结果在物理上合理吗这三个问题问完基本不会出大错。希望帮到你。本文还有配套的精品资源点击获取
返回列表