简介:计算机网络计算题整理文档,面向需要系统复习网络性能计算的考生与学习者。内容涵盖电路交换与分组交换时延对比、发送时延与传播时延的关系、香农公式带宽计算、数据传输效率分析、光纤频带宽度计算等核心考点,并配有典型例题的分步推导与结论总结,可帮助读者快速掌握解题思路。文档共1个docx文件,大小约57KB,内容浓缩,适合考前快速回顾。题目按章节归并,从基础公式到综合应用层层递进,每个例题均以问题、计算过程、最终结论的形式呈现,便于对照练习。除上述考点外,还涉及CRC循环冗余校验、PPP帧解析、码分多址、以太网传输效率等内容,覆盖期末、考研及资格认证中的高频出题方向。已有217人学习下载,适合配合教材进行第二轮刷题或考前突击使用。
1. 这门课最值钱的题型:计算机网络计算题到底在考什么
期末前朋友圈里刷到最多的一句话就是「湖科大教书匠的计算机网络适合考408吗」,底下跟帖的永远是一堆「救大命」。但真到了考场,能把卷子上那几道计算题稳稳拿满分的,永远是少数。原因很直接:计算机网络这门课的选择题靠背,简答题靠理解,而计算题靠的是「公式在手 + 边界条件不踩坑」。你不会算,就真的一个字都写不出来。
这份「计算机网络计算题.docx」类文档,通常是期末复习或备考408时整理的计算题专项题库,覆盖的题型其实非常固定:IP地址与子网划分、TCP传输时间与吞吐量、CSMA/CD冲突检测、滑动窗口与停等协议、路由聚合与最长前缀匹配。本文不评价某份具体文档,而是把做计算题必须掌握的套路和容易翻车的细节完整拆给你,让你拿到任何一份计算题题库都能照方抓药。
2. IP地址与子网划分:从IPv4编址到聚合,算不对就白背了
2.1 子网掩码与主机数的换算:2的幂次背熟,边界条件记牢
IP地址计算题是所有计算题里出镜率最高的,没有之一。无论谢希仁第八版还是王道考研,这一章的课后题都是同一套逻辑:给你一个网络地址和掩码,求可用主机数、划分几个子网、每个子网的范围。
核心公式只有两个:子网数 = 2(借位位数),可用主机数 = 2(主机位位数) - 2。减的这个「2」,一个是网络地址,一个是广播地址。所有学生第一次做都会踩的坑就是把网络地址和广播地址当普通IP算进去,结果多算了两个。
我一般做题时第一步不是急着算,而是先把掩码换写成二进制,数清楚网络位和主机位。比如 255.255.255.192,前三个八位组全是1,第四个八位组是 11000000,借了2位,主机位剩6位,那这个子网下可用主机数就是 62。你要是心算 2 的 6 次方再减 2,很快就能出答案。
def calc_hosts(mask_str): # 将点分十进制掩码转成二进制,数出主机位位数 mask_bin = ''.join([bin(int(x))[2:].zfill(8) for x in mask_str.split('.')]) host_bits = mask_bin.count('0') usable = 2 ** host_bits - 2 # 主机位为0时是网络地址,全1是广播地址,均不可分配给主机 return f"可用主机数: {usable}" # 测试 255.255.255.192 -> 主机位6位 -> 62 print(calc_hosts("255.255.255.192"))这段脚本把掩码的每一位都摊开,先转成完整的32位二进制字符串,再用 count('0') 数主机位。逻辑上很直接,适合做验算。但考场里你不可能开电脑,所以我把常见掩码对应的可用主机数都背下来了:/24 是 254,/25 是 126,/26 是 62,/27 是 30,/28 是 14,/29 是 6,/30 是 2。这几个值一定要刻进脑子里,做题速度能快一倍。
2.2 子网划分的两种题型:等分和变长掩码,解法完全不同
子网划分题有两大流派:等长子网划分(固定掩码)和 VLSM 变长子网划分。等等分,就是给你一个大网段,要求切成大小一样的子网。比如给你 192.168.1.0/24,要分成 4 个子网,那每个子网就是 /26,网络地址分别是 192.168.1.0、64、128、192,每个段可用主机地址 62 个。这种题只要会数二进制,基本不出错。
VLSM 就麻烦了,它要求你对不同规模的网络给不同长度的掩码。常见考题是:一个 192.168.1.0/24 网段,需要容纳 100 台、50 台、25 台、12 台主机的四个子网。正确做法是从需求最大的开始分配:100 台需要 /25(126个可用地址),占了 192.168.1.0/25;50 台需要 /26(62个可用),剩下的从 192.168.1.128/26 开始;25 台需要 /27(30个可用),从 192.168.1.192/27 开始;12 台需要 /28(14个可用),从 192.168.1.224/28 开始。这个过程不能跳步,每一步都要确认起始地址之前没有被占用,很多人在这里把地址段算重叠了。
def vlsm_alloc(network, hosts_needed): # hosts_needed 从大到小排序,贪心分配 hosts_needed = sorted(hosts_needed, reverse=True) current = int(network.split('.')[-1]) # 简化处理,只针对 /24 内的偏移 results = [] for h in hosts_needed: # 找满足需求的最小掩码长度:2^n - 2 >= h bits = 0 while 2 ** bits - 2 < h: bits += 1 mask = 32 - bits # 计算块大小 = 2^(32-mask) = 2^bits block = 2 ** bits results.append((current, mask, current + block - 1)) current += block return results # 100,50,25,12 台主机的分配结果 print(vlsm_alloc("192.168.1.0", [100, 50, 25, 12]))这里的关键参数是贪心顺序:永远从最大需求开始分配。代码里 while 循环找满足主机数的最短前缀,bits 就是这个子网需要的地址块大小对应的指数。注意排序用 reverse=True,保证先分大块。要是你把顺序搞反,小网络先占了地址,大网络可能就找不出连续地址块了。
2.3 路由聚合与最长前缀匹配:找共同前缀,别被二进制吓退
路由聚合计算题在计算机网络期末复习和408里属于必考送分题。给你几个网段,让你求聚合后的路由。原理就一句话:把多个网段的网络地址都写成二进制,找它们从左到右最长的一段相同前缀,这个前缀长度就是聚合后的掩码。
举例:202.113.16.0/24 和 202.113.17.0/24 聚合。把 16 和 17 写成二进制:16 是 00010000,17 是 00010001,前 7 位相同,都是 0001000,所以聚合后是 202.113.16.0/23。因为 16 和 17 只差最后一位,相当于块大小是 2。
但这里有个经典陷阱:不是任意两个相邻网段都能聚合。必须满足「块大小是 2 的整数次幂且起始地址是该块的倍数」。比如 202.113.15.0/24 和 202.113.16.0/24 就不能直接聚合成 /23,因为 15 和 16 的二进制是 00001111 和 00010000,前 7 位并不相同。你硬要用 /23,结果会把中间不该包含的地址段也包含进去。很多同学在多个网段聚合时图省事,看数字相邻就直接合并,最后聚合后的路由把别人的地址空间也吃掉了,这在路由设计里是大忌。
2.4 地址计算题的自检套路:网络地址、广播地址、可用范围一次过
做完一道地址计算题,如果时间允许,我会用三个值互相校验。网络地址是主机位全0,广播地址是主机位全1,可用范围在两者之间。旁路由和交换机配置里经常因为网络地址或广播地址写错导致整个网段不通,本质就是这里没算对。
举一个完整例子:IP 192.168.1.130/26。掩码 255.255.255.192,块大小 64。192.168.1.130 落在哪个子网?用 130 除以 64,商 2,所以网络地址是 192.168.1.128,广播地址是 192.168.1.191,可用地址 192.168.1.129 到 190。这个「块大小除法」的技巧比写二进制快很多,在考场和时间赛跑时非常实用。但注意它只适用于连续掩码(CIDR),碰到非连续掩码还是得回到二进制方法,不过考试基本不会出非连续掩码。
3. 传输层计算:TCP传输时间、吞吐量与滑动窗口的必杀解法
3.1 慢启动与拥塞避免:从1个报文段到满窗口的时间线
TCP 传输时间计算是计算机网络的拉扯大户,几乎所有计算题题库里都会有一道慢启动相关的题目。这类题给的条件通常是:RTT 是多少,接收窗口多大,报文段大小多少,问传输一个文件需要多久。
我做这类题的第一步是把慢启动的时间线画出来。慢启动的拥塞窗口从 1 开始,每个 RTT 翻倍:1、2、4、8、16、32……直到达到慢启动阈值(ssthresh)。没有拥塞丢包时,wnd 按照这个指数序列增长。很多学生直接套公式,但忘了「一个 RTT 内发送的数据量等于当前窗口大小」。你要算的是每个 RTT 能发多少数据,而不是单纯数 RTT 个数。
def tcp_transfer_time(file_size_mss, rtt_sec, recv_wnd, ssthresh): # file_size_mss: 文件大小除以MSS后的报文段个数 # recv_wnd: 接收窗口(以MSS为单位) # ssthresh: 慢启动阈值(以MSS为单位) cwnd = 1 time = 0 sent = 0 while sent < file_size_mss: # 本RTT内发送量 = min(cwnd, recv_wnd) send_now = min(cwnd, recv_wnd) sent += send_now time += rtt_sec # 更新 cwnd:在慢启动期翻倍,到达阈值后线性 +1 if cwnd < ssthresh: cwnd *= 2 else: cwnd += 1 return time # 900个MSS文件,RTT=100ms,接收窗口64,ssthresh=16 print(tcp_transfer_time(900, 0.1, 64, 16))这段代码模拟了每个 RTT 内窗口的演变。注意 send_now 取了 cwnd 和 recv_wnd 的最小值——接收窗口是硬上限,就算拥塞窗口已经超过它,发送速率也被接收方卡死了。这就是题里最常埋的伏笔:很多题目给你 ssthresh 和文件大小,让你算慢启动到多少轮次会碰到窗口天花板,其实答案就在 min 这一步里。
参数设置上,ssthresh 在经典题目里通常预设在 16 或 32,考试时自己细心读题。cwnd 从 1 开始是协议规定的,别写成 0。还有一个容易被忽略的点:发送窗口增长到接收窗口大小后就不再涨了,后面一直按接收窗口大小发。这个「封顶」条件一旦忘了,算出来的时间会比答案短很多。
3.2 可靠传输的停等协议与连续ARQ:确认帧开销怎么计入总时长
停等协议的效率计算是另一类高频送分题。公式是 效率 = 发送数据时间 /(发送时间 + 传播时间 + 确认帧发送时间 + 确认帧传播时间),注意要用往返时间算,因为等确认等到的是 RTT,不是单程传播延迟。很多初学者把传播时间只算一遍,结果效率算成两倍,看到答案后一脸懵。
连续 ARQ(滑动窗口)的效率就更上一层:效率 = 窗口大小 × 发送时间 /(发送时间 + 往返时间),但前提是窗口没把管道填满。要是窗口太大,吞吐量就受限于链路带宽而不是窗口了。这类题常和信道利用率挂钩,网络期末卷子里那种「发送窗口为4,帧长1000字节,带宽1Mbps,传播延迟250ms」的题,本质上就是套这几个数比大小。
3.3 TCP吞吐量上限:窗口除以RTT,这个比值决定理论天花板
「TCP 吞吐量 = 窗口大小 / RTT」,这是我见过考频极高的公式,也是很多学生的认知盲区。网络环境再好,延迟再低,TCP 的发送速率不可能超过「窗口除以往返时间」。换句话说,你要是在备考408,这条公式是必背项。
这个概念放在实际场景里特别好理解:你家宽带是千兆,但路由器 RTT 是 100ms,接收窗口是 64KB,那最大吞吐量大约是 64KB / 0.1s = 640KB/s ≈ 5.12Mbps。宽带再大也没用,协议天花板卡死在这里。计算题里常见问法:给你带宽、延迟、窗口,求最大吞吐量或达到最大吞吐量的最小窗口。后者就是「带宽延迟积 = 带宽 × RTT」,窗口至少要到这个值才能把链路用满。
这里面最隐蔽的坑是单位换算。64KB 是字节,带宽是 bit 每秒,必须先统一单位。我见过太多人在这一步把 64K 当成 64×1024bit 算,结果数值差了 8 倍。做题前先把所有单位标记清楚,K 到底是 KB 还是 Kb,M 到底是 MB 还是 Mb,写一遍再算,能省去后面所有返工。
4. 链路层与物理层计算:CSMA/CD、CRC、信道容量的考场公式
4.1 最小帧长与争用期:2τ这个系数是怎么来的
CSMA/CD 以太网的计算题是计算机网络基础谢希仁教材里的标配,几乎所有期末复习资料都会收录。核心公式是 最小帧长 = 2τ × 数据传输率,其中 τ 是单程传播延迟。为什么是 2 倍?因为发送站必须在发送完整个帧之前检测到冲突,而最坏情况下冲突信号要经过两倍的传播延迟才能回到发送站。
这类题最常考的是:给定总线长度、传播速度、数据率,求最小帧长或最大网络长度。我习惯的解题路径是:先算单程传播时间 = 总线长度 / 传播速度,乘 2 得到争用期,再乘以数据率。考试不会直接给你 τ,而是给你网线长度和电磁波传播速率,这一步换算绕不过去。
def min_frame_len(link_length_m, speed_mps, rate_bps): # 单程传播时间 tau = link_length_m / speed_mps # 争用期 = 2 * tau contention = 2 * tau # 最小帧长 = 争用期 * 数据率,单位换算成字节 frame_bits = contention * rate_bps frame_bytes = frame_bits / 8 return frame_bytes # 1km同轴电缆,传播速度2e8 m/s,数据率10Mbps print(min_frame_len(1000, 2e8, 10e6))代码里的传播速度是个关键参数。很多题目明确给了光速或铜缆中的电磁波传播速率,一般是 2×10^8 m/s。注意这个数不是真空光速 3×10^8,别背错。考试时没给传播速度就用标准取值,给了一定要用题给值。算出来的最小帧长如果在 64 字节附近,恭喜你,和以太网标准对上了——这本身就是一道很好的验算题。
4.2 CRC循环冗余校验:按位异或的手算步骤与多项式辨识
CRC 在考试里考的不是实现而是手算。给你一个数据位串和一个生成多项式,求余数即 FCS 帧检验序列。步骤是固定的:数据位串后面补多项式最高次那么多个 0,做模 2 除法(异或),得到的余数就是 CRC 校验码。
具体到操作:设生成多项式 G(x) = x^3 + x + 1,对应二进制 1011,最高次是 3,那就在原始数据后补 3 个 0,然后做按位异或除法。我一直提醒学生这里要慢——异或除法不是普通除法,不进位不借位,每一位只看当前最高位是不是 1。很多人手算出错,八成是在这个环节用了十进制除法的直觉。
最后发送的数据 = 原始数据 + 余数。接收方校验就用「收到的整个位串」对同一个多项式做除法,余数为 0 则说明没有检测到错误。考试里还有一道变形题:给你一个接收到的码字和多项式,判断有没有差错。这道题只要模 2 除一遍就能出结果,过程写清楚通常就是满分。
4.3 奈奎斯特与香农公式:无噪声与有噪声的信道容量边界
物理层的两道公式题几乎是期末必考。奈奎斯特公式 C = 2W log2(V),适用无噪声信道,V 是电平数;香农公式 C = W log2(1 + S/N),适用有噪声信道。需要留意的是信噪比一般给的是分贝(dB),要通过 10 log10(S/N) 换算成倍数再代公式。
最经典的考题是:「电话线带宽 3kHz,信噪比 30dB,求最大数据传输率」。30dB 换算过来就是 S/N = 1000,代进香农公式得到 3000 × log2(1001) ≈ 3000 × 9.97 ≈ 29.9kbps。题目如果再加一句「若要提高到 64kbps,需要多少带宽」,就变成反向代入,本质还是解方程。
这一类题最怕的就是把奈奎斯特和香农公式用反。我看到无数学生在有噪声题目里用了奈奎斯特公式,算出一个远超实际的值还觉得自己是对的。判断标准很直接:题里有没有出现 dB 或信噪比,有就一定是香农;只给带宽和电平数,就用奈奎斯特。
5. 计算题避坑指南:五类高频翻车现场与排查方法
5.1 现象:子网划分可用主机数总是多两个或少两个
这个问题在期末试卷里出现频率极高,几乎所有初学者都会栽一次。原因就是忘了「减2」这道坎,把网络地址和广播地址当成了可用主机地址。解决方法是:算完先检查每个子网的第一个地址和最后一个地址,确认它们分别是网络地址和广播地址;如果题目问的是「可用主机数」,必须减 2,如果问「地址总数」,才不用减。
5.2 现象:TCP传输时间算出来比答案短一半
这类错基本都出在「确认帧耗时」或「接收窗口封顶」这两个条件上。原因:有些人没把 ACK 的发送时间计入循环,有些人没算尾部的最后一个 RTT 等待确认。解决:画时间线数 RTT 次数时,发送最后一个数据段后还要等一个 ACK 到达才能算传输完成。如果在 3.1 的代码里没有把最后一个 RTT 加进去,结果自然少了一个 RTT 的时间。
5.3 现象:聚合路由算出的网络前缀覆盖了其他非目标网段
这个坑我在 2.3 里已经提过,但值得单列一条:数值相邻的网段不一定能聚合。根本原因是可聚合的条件是「块大小 = 2 的整数次幂且起始地址是该块的倍数」。解法只有回到二进制看完整前缀,不要用十进制直觉。考场上快速验证法:拿两个网络地址做按位与,再从左边数相同位个数,这个位数就是聚合后的前缀长度。
5.4 现象:CRC手算余数和答案对不上
这是典型的「过程全对,某一位异或斜了」的翻车。原因往往出在把模 2 减法当成了普通减法,借了一位。解决:重新学过模 2 除法,每一位只有 0 和 1,1 对 0 就是 1。写步骤时把每一步异或的对齐关系写清楚,宁可慢一点也别跳行。另外记得余数位数比生成多项式少 1 位,如果不够,前面补 0。
5.5 现象:单位换算看混,KB 和 Kb 之间差了 8 倍
这类错非常隐蔽,因为答案看起来「顺理成章」。原因:带宽按 bps 记,文件大小按 Byte 记,做题时不统一直接代公式,结果自然错八倍。解决:先把所有数据转换成相同的单位体系。我一般会把带宽除以 8 变成 Bps,或者把文件大小乘 8 变成 bit,反正必须保证分子分母单位一致后再往下算。单位不统一,公式再熟也白搭。
6. 复习和自检的高级技巧:把你手里的题库变成「考点地图」
如果你手头已经有一份像「计算机网络计算题.docx」这样的文档,千万不要从头做到尾就扔到一边。我常用的做法是把每道题标注考点标签,比如「IP子网」「TCP慢启动」「CSMA/CD」「CRC」「香农公式」,然后把同一标签的题放在一起统一练。这样你会发现自己的薄弱点非常集中——八成以上的人「传输层耗时」类题型都错在时间线不清晰上,剩下两成是单位换算。
具体操作是先用 10 分钟把整份文档的题按考点分类,标好题号;然后每天专攻一个考点,做完用 2.1、3.1、4.1 里的脚本验算答案;最后一天把所有错题的共同原因写在一张纸上,贴在书桌前。这个方法比从头做三遍效率高得多,因为你在跟考点较劲,而不是跟题序较劲。
最后一个技巧:把题目改成另一种考法自测。子网划分题改成路由聚合方向,TCP传输时间题改成反推窗口大小,CRC的发送端算完改成接收端校验。这样做一遍等于吃透三道题,比题海战术有用得多。我在备考408时就靠这个办法把计算题从永远算不对练到稳定满分,现在复习期末也一直沿用这套思路。网络计算题不像网络原理那么抽象,只要肯花时间把公式的适用条件和边界挖清楚,分数是实打实能拿到的。希望帮到你。
本文还有配套的精品资源,点击获取