计算机网络计算题全攻略:CRC、子网划分与传输效率考点解析
简介一份面向计算机网络课程期末复习与考研备考的计算题精讲文档覆盖电路交换与分组交换时延对比、香农公式、数据传输效率、CRC校验及PPP帧解析等高频考点。资源为单个docx格式文档大小仅57KB轻量便携内含每道题目的解答步骤与关键结论适合手机或电脑随时查看方便读者对照练习。已有217人学习下载适合正在巩固计算机网络原理、需要刷题提升解题速度的学生。文档按题号组织从经典1-17、1-18时延计算到2-09香农公式信噪比推算、2-12光纤带宽求解再到3-07 CRC余数与PPP帧转义还原均给出完整推导和答案。通过掌握这些典型计算可加深对网络性能指标、信道容量、差错控制与数据链路层协议工作机制的理解。1. 计算机网络计算题到底在考什么计算机网络期末复习里最拉分的从来不是名词解释而是计算题。CRC余数、海明码校验位、子网可用主机数、CSMA/CD最短帧长、滑动窗口利用率每类都有固定套路但换一个单位、换一个距离结果就完全不同。计算题的坑大多不在公式而在单位换算和边界条件所以它既是送分题也是丢分重灾区。这篇文章按《计算机网络》第八版谢希仁与《计算机网络自顶向下方法》的覆盖面把高频计算题拆成差错控制、IP子网与CIDR、链路传输效率三类给出可复算的算例和可抄的验算代码。无论期末复习还是408考研二刷都能把算例当模板把验算方法当检查清单。2. 差错控制计算题CRC校验与海明码的手算和报文验证CRC和差错控制相关计算题是每年期末卷的固定嘉宾。它考的其实不是数学而是对「补零、做模2除法、拼帧」这三步的熟练度外加对接收端验算方式的理解。这一章先讲手算流程再给程序验算最后单独讲怎么从报文观察CRC结果——这是热搜里反复出现的考点。2.1 CRC校验手算三步补零、模2除法、拼接FCS第一步补零看生成多项式G(x)的最高次幂。比如G(x)x³x²1最高次是3就在数据D后面补3个0。第二步做模2除法D补零后按位除以G(x)对应的二进制数1101除法全程用异或不进位不借位商不重要只取余数。第三步拼帧把余数也就是FCS接到D后面得到实际发送的帧。教材里最典型的算例D101001G(x)1101。补零后是101001000模2除法得到余数001于是发送帧为101001001。这个算例在《计算机网络》第八版的配套习题里反复出现也在很多学校的期末复习资料里当例题记住它能帮你核对流程有没有走错。下面的Python函数可以直接复算任意数据的CRC余数def crc_remainder(data_bits, divisor): # data_bits: 原始数据位列表如 [1,0,1,0,0,1] # divisor: 生成多项式位列表如 [1,1,0,1] msg data_bits [0] * (len(divisor) - 1) # 补 len(divisor)-1 个零 for i in range(len(data_bits)): if msg[i] 1: for j in range(len(divisor)): msg[i j] ^ divisor[j] # 模2减法就是异或 return msg[-(len(divisor) - 1):] # 取末尾 n-1 位作为FCS print(crc_remainder([1,0,1,0,0,1], [1,1,0,1])) # 输出 [0, 0, 1]这段代码对应手算的每一步msg是补零后的被除数外层循环遇到1就用异或消去这一位等价于手工除法里对齐相减循环结束后寄存器末尾的len(divisor)-1位就是余数FCS。两个参数都要传0/1列表且divisor首位必须是1如果题目给的多项式写作 x³x1对应二进制是1011中间的x²系数是0写列表时不能漏位。2.2 从报文观察CRC结果整帧整除验算很多人算完发送帧就停笔忽略了接收端验算这道常考题。接收端拿到帧后不再区分数据位和FCS而是把整个帧数据FCS除以G(x)。余数为0就判定没出错余数非0说明传输发生了差错。题目如果给你一段报文和生成多项式让你判断是否出错直接把整段报文做模2除法即可这是「通过报文观察」的核心动作。在真实网络里以太网帧尾的FCS就是这4个字节的校验值。用Wireshark展开Ethernet协议时能看到Frame check sequence字段所谓观察报文本质就是检查这个字段对应的整帧除法余数是否为零。这里有一个重要边界CRC只能检错不能纠错如果错误模式恰好能被G(x)整除照样会漏检所以不要把「FCS有效」当成「数据必然正确」。2.3 海明码计算校验位数与出错位置反推海明码高频考两个小问给数据位数m求校验位r的个数给接收码字和校验结果反推出错位置。校验位个数用不等式 2^r ≥ mr1。m4时r3满足8≥8码字总长7位。校验位放在编号为2的幂的位置也就是第1、2、4位。分组规则如下表校验位覆盖的码位编号从1开始p11, 3, 5, 7, 9, 11…p22, 3, 6, 7, 10, 11…p44, 5, 6, 7, 12, 13…算例4位数据1010码位31、50、61、70。按偶校验p1覆盖的1、3、5、7位已有1001个1为凑偶数p11p2覆盖2、3、6、7已有1102个1p20p4覆盖4、5、6、7已有0101个1p41。最终码字是1011010。反推出错位置时把各组校验结果按p4、p2、p1排成二进制数这个数就是出错码位的编号这是海明码计算题里最实用的一条性质。3. IP地址与子网划分计算题子网掩码、CIDR聚合与 VLSMIP计算题是计算机网络期末复习里分值最重的一块王道考研书里也大量出现这类题。它没有复杂公式核心就一句网络地址 IP地址 与 子网掩码 按位相与。所有变体都围绕「把主机位划给子网位」或者「把多个前缀合并成更短前缀」展开。从吉大、hnu 这些高校的计算机网络期末卷风格看子网划分基本是必考项。3.1 等长子网划分三步定掩码、列地址段、算可用主机题目给「192.168.10.0/24划分成4个子网」第一步定新前缀长度4个子网需要 log2(4)2 个主机位/24变成/26。第二步列地址段/26的主机位剩6位每段有2^664个地址四段依次是192.168.10.0/26、192.168.10.64/26、192.168.10.128/26、192.168.10.192/26。第三步算可用主机每段可分配地址是2^6−262个减掉的是段内网络地址主机位全0和广播地址主机位全1。用Python核验比手动转二进制快得多import ipaddress net ipaddress.ip_network(192.168.10.0/24) for sn in net.subnets(prefixlen_diff2): # 前缀加长2位得到4个 /26 hosts list(sn.hosts()) # 已自动剔除网络地址和广播地址 print(sn, 可用主机数:, len(hosts), 首地址:, hosts[0])prefixlen_diff2表示在原前缀24上加2位等价于手算时「借2个主机位」。sn.hosts()返回的是可用主机列表直接用len()得到62和手算结果一一对应。如果把prefixlen_diff改成1或3能快速看到 /25 或 /27 的分段结果方便随机改参数自测。3.2 变长子网划分从大到小分配地址段不重叠题目改成「500台、200台、100台、50台四个部门从172.16.0.0/16里分」等长子网就不够用了这是VLSM的高级考点。做法是从需求最大的部门开始逐级选能装下需求的最短前缀分配结果如下表部门台数需求前缀分配地址段可用主机数研发500/23172.16.0.0/23510测试200/24172.16.2.0/24254运维100/25172.16.3.0/25126办公50/26172.16.3.128/2662逐段核对/23覆盖172.16.0.0172.16.1.255/24覆盖172.16.2.0172.16.2.255/25覆盖172.16.3.0172.16.3.127/26覆盖172.16.3.128172.16.3.191四段互不重叠。核心原则是「先大后小、用完一段再开新段」。很多人在这里把100台写成/24白白浪费128个地址导致后面50台没位置这是最常见的失分点。3.3 路由聚合与最长前缀匹配判断能不能合、聚合到哪路由聚合题的问法是「两条路由能否合并合并后前缀多长」。判断条件有两个地址块大小必须相同且地址连续。192.168.0.0/24 和 192.168.1.0/24二进制看最后8位是00000000和00000001共同前缀23位所以聚合成192.168.0.0/23。如果换成192.168.0.0/24和192.168.2.0/24中间隔了192.168.1.0/24不能直接聚合否则会覆盖路由表里不存在的地址段。这里有个考官爱挖的坑聚合后的路由能匹配更广范围但路由表里若同时存在更精确的路由转发时仍优先匹配前缀更长的条目。题目给「目的地址192.168.1.5路由表有192.168.0.0/23和192.168.1.0/24两条」答案是走/24那条。用Python可以快速验证聚合结果import ipaddress n1 ipaddress.ip_network(192.168.0.0/24) n2 ipaddress.ip_network(192.168.1.0/24) print(n1.supernet(prefixlen_diff1)) # 输出 192.168.0.0/23 print(n1.overlaps(n2)) # False两段恰好相邻不重叠supernet(prefixlen_diff1)把前缀缩短1位得到父网段overlaps()用来判断两个网段是否重叠做VLSM检查时比手算快得多。4. 传输效率计算题CSMA/CD最短帧长与滑动窗口利用率这一章是计算机网络计算题里计算量最集中的部分湖科大教书匠的期末复习视频和王道考研书都把这里当作重点。核心是两个公式的变形CSMA/CD最短帧长 L_min 2τ × 速率以及信道利用率 有效发送时间 /发送时间 往返时延。所有考题本质上都在考τ和T_frame会不会算。4.1 CSMA/CD最短帧长公式往返时延是关键CSMA/CD的原理一句话发送方在发送过程中要能侦听到冲突所以帧的发送时间必须大于等于信号往返时间2τ。由此得到 L_min 2τ × CC是数据传输速率τ 距离/传播速度。算例1km同轴电缆传播速度2×10^8 m/s速率10Mbps。τ 1000/(2×10^8) 5μs2τ 10μsL_min 10μs × 10Mbps 100bit。题目若用字节问记得除以8100bit 12.5字节发送时通过填充字段补到标准最短帧长。对照真实以太网可以验证记忆10Mbps以太网最短帧长64字节即512bit由 2τ×10Mbps 512bit 反推得到争用期2τ 51.2μs。速率提高后帧长不变靠缩小网络直径维持同样的2τ百兆网直径缩到约200米千兆网改为512字节时隙或载波扩展这些常出成选择判断。用函数可以快速算def min_frame_bits(distance_m, speed_mps, rate_bps): tau distance_m / speed_mps # 单向传播时延单位秒 return 2 * tau * rate_bps # 最短帧长单位bit d, v, c 1000, 2e8, 10e6 bits min_frame_bits(d, v, c) print(bits, bits / 8) # 100.0 bit, 12.5 字节参数分别是距离、传播速度、速率注意速率用bps而不是B/s10e6是10^7写代码时最容易错的就是这个指数。4.2 停等协议与滑动窗口的利用率计算停等协议的利用率公式是 U T_frame / (T_frame 2τ)T_frame 帧长/速率。经典场景是卫星链路两端距离3.6×10^7 m传播速度3×10^8 m/sτ ≈ 120ms2τ ≈ 240ms帧长1000字节 8000bit速率1MbpsT_frame 8ms。利用率 8/(8240) ≈ 3.2%吞吐量只有约32kbps。这个数字直观解释了为什么现实里没人用停等协议传卫星链路。滑动窗口协议GBN或SR只是把分子乘以窗口大小WU W×T_frame / (T_frame 2τ)并且上限是1。还是上面的参数W10时利用率 80/(8240) ≈ 32.3%。计算时分子分母单位必须一致。用函数把两类场景都算一遍def utilization(frame_bits, rate_bps, tau_s, window1): t_frame frame_bits / rate_bps # 发送一帧的时间单位秒 u window * t_frame / (t_frame 2 * tau_s) return min(u, 1.0) # 利用率封顶1 tau 3.6e7 / 3e8 # 卫星单向传播时延约0.12秒 print(utilization(8000, 1e6, tau)) # 约0.032 print(utilization(8000, 1e6, tau, window10)) # 约0.323这里tau_s是单向传播时延window是发送窗口大小停等时取1。注意公式里的T_frame和2τ都是时间帧长如果给的是字节、速率是bps必须先乘8换成bit这是整套计算题里最常见的失分点。4.3 单位换算速查表与边界条件把期末和考研题里反复出现的换算关系整理成表做题前扫一眼能避免低级错误量换算关系易错点速率1 Mbps 10^6 bit/s不是2^20区分MB/s帧长1 字节 8 bit题目给KB时先乘1024再乘8传播时延τ 距离/传播速度电缆多用2×10^8卫星用3×10^8往返时延RTT ≈ 2τ题目直接给RTT时不要再乘2分组开销有效载荷 帧长 − 头部看到「有效载荷」就要减头部边界条件也要留意CSMA/CD里距离特别短时按公式算出的L_min可能小于协议规定的最短帧长此时按标准取滑动窗口利用率算出来超过1是正常的理论中间值实际要封顶在100%。5. 计算题自检技巧反向代入、极限直觉与二进制数轴最后给一套能在考场上实际用的自检方法不再堆新公式。第一反向代入。CRC算完FCS后把「数据FCS」重新除以G(x)余数必须为0子网划分完把主机地址和掩码做AND运算结果必须落在你写的网络地址区间内海明码写出码字后重新按分组表逐组做偶校验全为0才算对。反向代入只检查关键节点比重新算一遍快还能减少步骤分丢失。第二极限直觉。距离趋于0时CSMA/CD的L_min和停等协议的2τ都趋于0利用率趋近于100%距离极大时2τ占主导利用率趋近于0。如果距离1km还算出99%的利用率基本可以断定单位换算错了不用继续往下做。第三二进制数轴。凡是子网和聚合题在草稿纸上把地址块画成线段/26就是64个地址一段/25是128个地址一段从0开始依次排列。画完线再写答案VLSM有没有重叠、聚合后会不会覆盖多余的段一眼就能看出来。这一招对判断类题目尤其有效。最后用Python对整体做一次快速验算python3 -c import ipaddress; nipaddress.ip_network(192.168.10.64/26); print(n.network_address, n.broadcast_address, len(list(n.hosts())))输出192.168.10.64、192.168.10.127、62与手算一致。考前把文中几个函数存成一个小脚本随机改参数出题再用手算结果对照比反复翻答案更接近考场状态。计算题拿分的关键从来不是背公式而是让每一步都有可以反查的锚点。本文还有配套的精品资源点击获取