news 2026/10/10 12:38:53

计算机网络高频计算题手算全攻略:从CRC到RSA

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
计算机网络高频计算题手算全攻略:从CRC到RSA

期末复习计网的日子,对计科的同学来说总有点魔幻:明明是一门讲协议的课,背起来却像文科;可一到考试,满卷子都是计算题。我当年就是吃了这个亏——概念背得滚瓜烂熟,翻开“计科-计网8-计算题”这个整理文件夹,才发现CRC、香农公式、RSA这些计算题几乎没法下手。于是花了两个晚上把所有高频计算题重新过了一遍,整理出一套“看到题干就知道该套哪个公式”的做题思路,这才把分数稳住。这篇就把我的整理方法和手算过程完整写出来,适合正在学计网、准备期末或者考研复习的计科同学,尤其适合那种“公式背了但不会用”的人。

如果你非要把标题里的“计网8”对应到教材章节,大部分教材的第8章是网络安全,确实有一道镇场大题RSA;但实际考试的计算题往往从第2章物理量一路算到第8章,所以我按整个课程来整理,把所有必须会手算的题型串成一张地图。

1. 为什么“背会知识点”不等于“会做计算题”——先看计网计算题分布地图

1.1 全课程计算题分布地图

计算机网络这门课的计算题有一个很明显的规律:越偏底层的章节,计算越多;越偏应用层,越偏向流程描述。我复习时会把见过的历年真题按题型归类,大致是下面这张分布表。

章节/主题典型计算题常见考法
物理层奈氏准则、香农公式、码元速率与数据速率给带宽、信噪比、电平数,求极限速率
数据链路层CRC循环冗余校验、CSMA/CD最小帧长、滑动窗口利用率手算余数、判断差错、求最大帧长
网络层子网划分、CIDR聚合、最长前缀匹配、路由表更新给地址块求子网范围、聚合后前缀
传输层滑动窗口序号位数、信道利用率、TCP拥塞控制cwnd变化给窗口大小求序号位数、画cwnd变化
网络安全RSA加解密与签名、报文摘要、分组密码参数生成密钥、加密解密、签名验证

1.2 按性价比分配复习精力

我刷了几套真题之后发现,CRC、子网划分、滑动窗口这三类几乎是必考项,而且套路固定、步骤明确,属于“练熟就白给分”的题型。物理层的奈氏和香农更是送分题,难点只在于判断用哪个公式。RSA在一些学校作为压轴大题,虽然计算繁琐,但流程非常固定。反倒是TCP拥塞控制这种画图表题,有时候反而容易因为细节丢分。我的策略是先拿稳前三个高频题型,再攻RSA,最后才去啃拥塞控制那些边角料。

这背后的逻辑其实很简单:计网计算题不是在考数学,而是在考“你把协议的边界条件搞清楚没有”。理解了每个公式对应的协议机制,公式自然就记得住;死记硬背反而最容易在单位换算、边界条件上翻车。

2. 链路层最容易拿分也最怕手滑:CRC循环冗余校验完整手算流程

2.1 为什么不直接求和而要“模2除法”

CRC即循环冗余校验,数据链路层用来检测帧是否在传输中被破坏。很多人第一次看到模2除法觉得奇怪:为什么加减法都变成异或?其实很简单,CRC的数学基础是多项式除法,而模2运算天然适合硬件异或门实现,不需要考虑进位和借位。你可以把它理解为“只判断相同还是不同”:1异或1得0,0异或0得0,1异或0得1。

另一个容易混淆的点是:CRC是用“发送数据+校验位”这个整体去除一个双方约定的生成多项式,余数为0就认为没出错。这个“校验位”就是之前信息位后面补的0经过除法得到的余数,补在信息位后面一起发出去。

2.2 完整手算示例

先看一个非常典型的考试题目:待发送的数据位串 M = 1010001101,生成多项式 G(x) = x^5 + x^4 + x^2 + 1,求CRC校验位和最终发送帧。

第一步,确定校验位位数。G(x)的最高次数是5,所以校验位位数 r = 5。然后把 M 后面补5个0,得到 101000110100000。

第二步,把生成多项式的系数写出来:G(x) 对应比特串 110101,注意 x^5、x^4、x^2、x^0 的系数是1,其他是0。

第三步,做模2除法。直接用长除法的过程展示前几步:

101000110100000 ÷ 110101 被除数前6位:101000 101000 ⊕ 110101 = 011101 → 取后5位11101,拉下一位1,得111011 111011 ⊕ 110101 = 001110 → 取后5位01110,拉下一位1,得011101 011101 最高位是0,商0 → 取后5位11101,拉下一位0,得111010 111010 ⊕ 110101 = 001111 → 取后5位01111,拉下一位1,得011111 ...

整个过程你不需要关心商是多少,只用把最后一次异或的结果截取 r=5 位就可以了。我完整算下来,最终余数是 01110。

第四步,把余数拼到原数据后面,发送帧就是:

1010001101 01110

也就是 101000110101110。

接收端收到这个比特串后,用同一个生成多项式 110101 去除,如果余数为0,则认为帧无差错;如果余数不为0,说明有比特位在传输过程中出错,需要重传。

2.3 手算最容易翻车的三个点

我当年在这个知识点上丢过好几次分,总结下来是这三个地方:

  • 余数位数不够 r 位时,必须在前面补0。比如你最后算出来余数是111,但 r=5,那就要写成00111,不能直接写111。你补到信息位后面的时候,缺一个0都是错的。
  • 生成多项式的系数要写对。最高位和最低位必须是1,考试如果给的是十六进制写法,比如0x05,你要能先转化成二进制再算。
  • 不要被“除法”这个说法带偏。商在计算中没用,只留余数。很多同学在考场上一味想凑商,结果把自己绕晕了。

另外提醒一句:CRC只能检错,不能定位哪个比特出错,更没有纠错能力。考题经常在选择题里把“可以纠错”作为一个干扰项,这是最典型的坑。

3. 不是只有“255.255.255.0”:子网划分与CIDR聚合的快速心算技巧

3.1 子网划分的核心:块大小

子网划分在计网计算题里几乎必考,但也是很多人的心理阴影。其实你不用死记掩码表,抓住一个核心概念就够了:块大小 = 2^(32 - 掩码长度)。这里的块大小表示这个子网包含多少个IP地址,包括网络地址和广播地址。

举个例子:把 192.168.4.0/24 分成4个等长子网。原本掩码是 /24,要分成4个子网,需要向主机位借2位,掩码变成 /26。这时块大小 = 2^(32-26) = 64,也就是每个子网有64个地址。四个子网分别是:

子网号广播地址可用主机范围可用主机数
192.168.4.0192.168.4.63192.168.4.1 ~ .6262
192.168.4.64192.168.4.127192.168.4.65 ~ .12662
192.168.4.128192.168.4.191192.168.4.129 ~ .19062
192.168.4.192192.168.4.255192.168.4.193 ~ .25462

注意每个子网都要减掉网络地址和广播地址,所以可用主机数 = 块大小 - 2。很多同学算完块大小直接说“可用64个”,这是最经典的丢分位置。另外,给你任意一个IP,判断它属于哪个子网时,用IP地址与掩码按位相与就能得到网络地址;也可以直接看它落在哪个块区间里,这对快速解题更快。

3.2 CIDR聚合的“对齐”陷阱

CIDR聚合和子网划分是一体两面:子网划分是把大块拆小块,聚合是把小块合成大块。但聚合有一个隐藏条件:每一级的块边界必须对齐。不是任意两个相邻网段都能直接合并。

举个例子,192.168.24.0/24 和 192.168.25.0/24 可以聚合吗?把第三字节换成二进制:24 = 00011000,25 = 00011001。可以看到前7位完全一样,只有最后一位不同,所以这两个/24可以聚合成一个 /23,网络地址是 192.168.24.0/23,掩码是 255.255.254.0。可用地址范围是 192.168.24.1 到 192.168.25.254,总共510个。

但如果问你 192.168.25.0/24 和 192.168.26.0/24 能不能聚合成 /23?答案是“不能”。因为25 = 00011001,26 = 00011010,它们在第三字节的前7位就不一样了,强行合并成 /23 会导致前缀不能形成一个连续且对齐的地址块。这种情况下只能找更大的前缀块,比如 /22,从 192.168.24.0/22 开始才能把这两个网段同时覆盖进去。

我自己的快速判断方法是:/23 块的起始第三字节必须是偶数,/22 块的起始第三字节必须是4的倍数,/21 必须是8的倍数。这个规律在考场上非常救命,不用每次都掰二进制。

3.3 最长前缀匹配的做题套路

路由表计算题里最长前缀匹配也是常见考点。原则只有一条:多个路由表项都匹配时,选择掩码最长也就是前缀最长的那个。比如目的地址 202.113.16.150,路由表里同时有 202.113.16.0/24 和 202.113.16.128/27,后者更具体,所以走后者。

做题时先按掩码长度排序,再从最长的开始逐个判断:把目的地址和掩码相与,看落不落在对应网络地址范围内。这里特别提醒:不要上来就算二进制,先看IP的前几段,很多题目用排除法几秒钟就能出答案。

4. 滑动窗口那点事:GBN、SR和停止等待协议的窗口与序号计算

4.1 三种可靠传输协议的窗口限制

滑动窗口是传输层和链路层都爱考的计算点,核心是序列号位数的计算。背景是:发送方和接收方靠序号来区分新旧数据,如果序号不够用,就会产生歧义,所以不同协议对窗口大小有硬性限制。

  • 停止等待协议:发送窗口=1,接收窗口=1,相当于最原始的“发一个等一个”。
  • GBN(后退N帧):发送窗口 ≤ 2^n - 1,n是序号位数。
  • SR(选择重传):发送窗口 + 接收窗口 ≤ 2^n,通常会取两边相等。

为什么GBN不是2^n而是2^n - 1?最常见的解释是:如果发送窗口等于整个序号空间,接收方发回的ACK全部丢失时,发送方超时重传的帧会让接收方无法区分“这是新帧还是重复帧”。必须空出一个序号作为边界标记来消除歧义。SR协议因为有接收窗口缓存乱序帧,所以可以让发送窗口和接收窗口加起来正好占满序号空间。

4.2 信道利用率:先算发送周期

信道利用率这道题,几乎所有学校都爱考。先记住公式框架:利用率 = 发送时间 / 发送周期。这里发送周期 = 发送时间 + 传播时间 + 确认帧的传播时间。如果题目说忽略确认帧发送时间和处理时间,那就简化成:

发送周期 = T帧 + 2 × 单向传播时延 信道利用率 = T帧 / (T帧 + 2τ)

举个例子:链路数据速率 1Gbps,数据帧长 1000 字节,单向传播时延 5μs,忽略确认帧长度。那么:

  • 帧长 = 1000字节 = 8000 bit
  • T帧 = 8000 / 1Gbps = 8μs
  • 发送周期 = 8 + 2×5 = 18μs
  • 停止等待时利用率 = 8 / 18 ≈ 44.4%

如果改用发送窗口为4的GBN协议,理论利用率变成 4×8 / 18,这是一个超过1的数字。超过1说明链路已经饱和,实际最大利用率就是100%。这时候瓶颈不再是等待确认,而是发送方自身的发送速率和链路带宽。这个“超过1取100%”的细节,考场上很多同学会愣一下。

4.3 带宽时延积和序号位数

理解信道利用率之后,带宽时延积就顺理成章了。带宽时延积 = 数据速率 × 往返时间,表示“在一条链路上同时可以承载的数据量”。还是上面的例子:R×2τ = 1Gbps × 10μs = 10000bit = 1250字节。意思是即使没有任何确认机制,链路上同时传输的数据也只有1250字节。而你一个帧就有1000字节,所以停止等待协议每发一帧就有接近一半时间在空等。

序号位数题目通常是反向考法。比如:GBN协议的发送窗口大小为32,问最小需要几位序号?答案是 2^n - 1 ≥ 32,所以 n≥6。如果你直接写5,那就踩坑了,因为2^5=32,但GBN窗口最多只能到31。如果换成SR协议,发送窗口=接收窗口=32,则需要 32+32 ≤ 2^n,n≥6;如果窗口都到64,就需要n≥7。

我把这部分跟 BW(带宽时延积)联系起来复习之后,才真正理解为什么高速长距离链路上要用大窗口:窗口的本质就是“允许在RTT时间内发多少数据才能填满管道”。

5. 香农公式、奈氏准则与CSMA/CD最小帧长:两个公式一个边界

5.1 无噪声用奈氏,有噪声用香农

物理层的极限速率计算题,本质就是两个公式的取舍问题:

  • 奈氏准则:C = 2W·log₂V,适用无噪声环境。W是带宽,V是信号电平数。
  • 香农公式:C = W·log₂(1 + S/N),适用有噪声环境。S/N是信噪比。

判断依据很简单:题目同时给了信噪比,就用香农;题目只给带宽和电平数,就用奈氏。如果两个条件都给,通常要算两个值再取较小者,因为真实系统的速率要同时受两个因素限制。

5.2 分贝与倍数的换算坑

香农公式最大的坑不在公式本身,而在单位。题目说“信噪比为30dB”,很多同学直接把30代入公式,那会大错特错。正确的换算是:

S/N = 10^(30/10) = 1000

也就是说,30dB对应的是信号功率是噪声功率的1000倍。只有题目直接写“信噪比为1000”这种无量纲比值时,才能直接代入。如果带宽为4000Hz,那么:

C = 4000 × log₂(1 + 1000) ≈ 4000 × 9.966 ≈ 39864 bps

奈氏那边的典型题是:带宽3kHz,使用4电平传输,最大数据速率 C = 2×3000×log₂4 = 12000bps。这种题属于送分题,但经常有人把2倍关系忘掉,直接写成 3000×2 = 6000,反而错了。

5.3 CSMA/CD的最小帧长怎么来的

CSMA/CD的碰撞检测机制要求:发送方在发送完一帧之前,必须能检测到最远端的碰撞。因此最小帧长 = 数据速率 × 最远往返传播时延。公式就是:

Lmin = 2τ × R

其中τ是单程传播时延,2τ就是往返时间,R是数据速率。道理很生活化:你说话还没说完的时候,就要听到别人反驳的声音,才知道吵架了;如果话说完了才听到,那就晚了,只能重新开始。

看一道经典题:总线长度1km,信号传播速率200m/μs,数据速率10Mbps,求最小帧长。单程时延 = 1000 / 200 = 5μs,往返10μs,最小帧长 = 10Mbps × 10μs = 100bit。这个结果只有12.5字节。而标准以太网为什么定64字节(512bit)?因为覆盖的碰撞域更大,同时留出了余量,保证快速发送时也能可靠检测碰撞。如果题目反着问“已知帧长64字节,求最大碰撞域距离”,还是一样公式:先算2τ = 512bit / 10Mbps = 51.2μs,再根据信号传播速率求距离。这个知识点很容易和CRC一起出现在第二道大题里,两类都是必须拿分的题。

6. RSA从密钥生成到加解密签名:网络安全章节的“镇场大题”

6.1 密钥生成五步走

到了网络安全这一章,计算题的核心基本就是RSA。考试不会让你处理上千比特的大素数,通常给两个小素数,考察完整流程。以最常见的教学参数 p=11、q=13 为例。

密钥生成分五步:

  1. 计算 n = p×q = 11×13 = 143。
  2. 计算欧拉函数 φ(n) = (p-1)×(q-1) = 10×12 = 120。
  3. 选一个公钥指数 e,要求 1 < e < φ(n),且 gcd(e, φ(n)) = 1。考试通常直接给你 e=7。
  4. 求私钥 d,满足 d×e ≡ 1 (mod φ(n)),也就是 7d mod 120 = 1。
  5. 找满足条件的d:试算到 d=103,因为 7×103 = 721,721 mod 120 = 1。

这里要注意,公钥是 (e, n) = (7, 143),私钥是 (d, n) = (103, 143)。公钥不保密,私钥绝对不能公开。考试经常在填空或选择题里考“哪一组是公钥、哪一组是私钥”,不要写反。

6.2 加密解密手算过程:别硬算大数

加密时使用公钥。假设明文 M=2,密文 C = M^e mod n = 2^7 mod 143 = 128。这里2的7次方还不算大,但解密就吓人了:M = 128^103 mod 143。如果你直接在考场上硬乘,计算器都可能溢出。正确做法是“平方-乘”法,把指数拆成二进制幂次,边算边取模。

我知道处理大数幂取模是很多人的障碍,下面把整个过程写清楚。先把 103 拆成 64+32+4+2+1,然后从128开始逐次平方取模:

128^1 mod 143 = 128 128^2 mod 143 = 82 128^4 mod 143 = 3 128^8 mod 143 = 9 128^16 mod 143 = 81 128^32 mod 143 = 126 128^64 mod 143 = 3

所以:

128^103 mod 143 = 128^64 × 128^32 × 128^4 × 128^2 × 128^1 mod 143 = 3 × 126 × 3 × 82 × 128 mod 143

逐步计算:

3 × 126 = 378 mod 143 = 92 92 × 3 = 276 mod 143 = 133 133 × 82 = 10906 mod 143 = 38 38 × 128 = 4864 mod 143 = 2

最终得到 2,正好等于原来的明文。这一套流程练熟之后,RSA计算题其实就是“反复平方、取模、乘起来、再取模”,机械性很强,但绝对值得多写几遍。

6.3 数字签名与加密的区别:私钥公钥别反着用

RSA还有一个高频概念题:数字签名。它的本质是用私钥签名,用公钥验证;而加密是公钥加密、私钥解密。两者正好相反。签名的作用是身份认证和防抵赖:因为私钥只有发送方自己知道,所以能用私钥生成合法签名的,就证明这条消息来自发送方。而加密的作用是机密性:只有持有私钥的接收方才能解开密文。

有的题目会问:发送方想同时保证机密性和完整性,应该怎么做?标准回答是“先用自己的私钥签名,再用接收方的公钥加密”。顺序不能反过来,因为先加密再签名的话,签名本身不包含接收方身份信息,在某些场景下可能被利用。这一点不一定让你计算,但经常出现在选择填空里,顺便一起整理了。

7. 最后冲刺阶段怎么刷计算题:按题型横向刷,不按章节刷

考前最后两三天,我建议不要再看整本教材的知识点了,也别顺着章节顺序从前往后复习。我自己的方法是把所有历年真题里的计算题全部扣出来,然后按题型横向刷:一晚上只做CRC,把所有题做熟;第二天只做子网划分和CIDR;第三天集中练滑动窗口。这样做的原因是计算题考的是套路熟练度,你在短时间反复做同一类题,很容易形成肌肉记忆,考试看到题干关键词就能自动反应出公式。

按性价比我给一个刷题优先级:

  • 必拿:CRC、子网划分、奈氏/香农、CSMA/CD最小帧长。这四类只要练两遍就不该再扣分。
  • 多练:滑动窗口利用率和序号位数、RSA密钥与加解密。这些稍微复杂,但是步骤固定,练熟之后正确率可以很高。
  • 有空再看:TCP拥塞控制的cwnd变化图、IP分片偏移量、UDP/TCP校验和计算。这类题出现频率相对低,而且容易耗时间。

考场上的检查清单也分享一下。CRC手算一定要把余数位补齐再拼到帧尾;子网划分算可用主机数一定要减2;信噪比给的是dB就必须先转倍数再代入香农;RSA算大数幂一定用平方-乘,不要硬乘;看到“最大”“最小”这种词先圈出来,再决定是套奈氏还是香农。

我个人的体会是:计网计算题真的不难,难就难在把一堆公式对应到正确的题型上。把整理好的题型模板过一遍,比单纯重看教材概念管用得多。最后一个小技巧:考前把所有公式做成一张便签,左边写公式,右边写适用场景,贴在电脑边;每做一道题之前先判断场景再动笔。这个方法帮我从“背了不会用”变成“看到题干就知道算哪里”,希望你也能用上。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/10 12:38:13

Linux进程控制基石:fork、wait、exec实战详解与坑点

fork、wait、exec&#xff0c;这三个系统调用是Linux进程控制的基石。无论你是做嵌入式开发、写后台服务、维护运维脚本&#xff0c;还是准备Linux岗位的面试&#xff0c;都绕不开它们。这篇文章我会从最基础的概念讲起&#xff0c;用手写C代码的方式&#xff0c;把进程创建、回…

作者头像 李华
网站建设 2026/10/10 12:38:10

校园食堂点餐小程序毕设全攻略:数据库设计、前后端对接与答辩实战

每年到了三四月份&#xff0c;总有一批计算机专业的大四学生被毕设折磨得焦头烂额。如果你正在纠结选题&#xff0c;或者已经选了“校园食堂点餐小程序”这个题目却不知道怎么动手&#xff0c;这篇文章就是写给你们的。作为一个带过不少毕设、也亲手从零搭过小程序后端的老兵&a…

作者头像 李华
网站建设 2026/10/10 12:38:01

高可用架构三支柱:无状态化、水平扩展与故障转移的协同设计

做高可用这些年&#xff0c;每次听人讲“无状态化、水平扩展、故障转移”&#xff0c;都像在背三个独立的口诀。可真到了线上&#xff0c;这三件事从来不是孤立执行的。我见过不少团队&#xff0c;机器加了不少&#xff0c;容器一次性扩到三四十个副本&#xff0c;结果该宕机还…

作者头像 李华
网站建设 2026/10/10 12:36:48

Linux IP访问控制实战:iptables与firewalld规则详解

半夜收到监控告警&#xff0c;某台公网服务器的SSH端口被一个IP连续爆破&#xff0c;几百条失败日志刷下来&#xff0c;一看就是扫描器在撞库。这种时候多数人的第一反应是iptables -A INPUT -s <IP> -j DROP&#xff0c;先把来源拉黑再说。做运维这几年&#xff0c;类似…

作者头像 李华
网站建设 2026/10/10 12:36:46

OpenClaw卸载不干净?一份从进程到缓存的完整清理指南

OpenClaw这种跑在大模型边上的自动化助手&#xff0c;装的时候能折腾一整天——git clone、npm install、docker compose up、配Ollama、写API Key&#xff0c;每一步都有坑。等你想卸载的时候才发现&#xff0c;这坑比安装还深。我在Windows和Linux上分别部署过OpenClaw&#…

作者头像 李华
网站建设 2026/10/10 12:36:12

代码性能剖析实战指南:从火焰图到慢接口优化

做后端服务优化这几年&#xff0c;我见过太多人一遇到接口变慢&#xff0c;第一反应就是加缓存、加线程池、拆微服务&#xff0c;折腾一整晚&#xff0c;效果却像在漏水的船上换了一个更大的桶——水流得再多也没用。真正老练的做法其实是反过来的&#xff1a;先用代码性能剖析…

作者头像 李华