☰
计算机网络期末样卷深度拆解:从海明距离到TCP可靠传输
2026/10/16 20:08:49 网站建设 项目流程

简介:这份北师大计算机网络期末考试样卷面向高校计算机相关专业学生及备考期末的读者,用于系统检验和巩固计算机网络核心知识。试卷内容覆盖信道分配方案、纠错编码、数据链路层概念、传输层协议设计、CRC校验、DSL技术、信道利用率、缓冲区管理、曼彻斯特编码、IP数据报分片重组、Nagle与Clark算法、奈奎斯特定理与香农定理、距离矢量路由算法等高频考点,题型包含单选、填空与判断,并附有详细知识点说明,便于对照复习与查漏补缺。资源包共1个docx文件,约769KB,内容为可直接查阅的试卷文档,结构清晰,适合打印练习或电子化整理。目前已有119人学习下载,可作为期末冲刺阶段的自测材料,帮助读者快速定位薄弱环节,理清各层协议与经典计算题的解题思路。

1. 计算机网络期末样卷到底在考什么:从一道海明距离题说起

如果你随手翻开一份计算机网络期末样卷,第一眼看到的可能是“码字 10101001 和 10110001 的海明距离是多少”这种让人头皮发麻的题。别慌,这其实是在问:两个二进制串有几个位置不一样?逐位比一下,第 4、5、6 位不同,答案就是 3。你看,所谓“海明距离”,说白了就是两个码字之间“打架”的位数。

这份样卷之所以值得拿来拆解,是因为它不是零散知识点的堆砌,而是一张完整的“计网认知地图”。从物理层的曼彻斯特编码、数据链路层的帧与 CRC 校验,到网络层的 IP 分片、传输层的滑动窗口与拥塞控制,再到应用层之下的套接字原语,它把一整条数据从发送端到接收端的旅程压缩进了八页纸里。搞懂这套题背后的概念,你脑子里就能串起一条完整的链路:数据是怎么被编码、封装、寻址、传输、纠错、重传,最后被正确交付的。这份资料的价值不在于“押题”,而在于它用最浓缩的方式,把计网的核心骨架摆在了你面前。

2. 从比特到帧:物理层与数据链路层到底在忙什么

2.1 曼彻斯特编码为什么让信号频率翻倍

先看一道选择题:10Mbps 速率下,曼彻斯特编码和差分曼彻斯特编码的信号变化频率分别是多少?答案是 20MHz 和 20MHz。很多人第一次看到会愣住:数据速率才 10Mbps,怎么信号频率跑到 20MHz 去了?

打个比方,曼彻斯特编码就像用“上坡再下坡”表示 1,“下坡再上坡”表示 0。每一个比特周期中间都必须发生一次电平跳变,接收方才能靠这个跳变来同步时钟。也就是说,不管传的是 0 还是 1,每个比特时间里至少跳一次,跳变频率自然就是数据速率的两倍。差分曼彻斯特编码更“讲究”:它不看电平绝对高低,只看每个比特周期开始时有没有跳变——有跳变表示 0,没跳变表示 1。但中间那次跳变照样保留,所以频率还是两倍。

注意:这里说的“信号变化频率”指的是电平跳变的最快节奏,不是载波频率。曼彻斯特编码的代价就是占用更宽的频带,换来了自带时钟同步的好处。

理解了这一点,再看 ADSL 为什么走电话线路就不奇怪了。电话线本来只传 4kHz 左右的语音,但它的频带其实远不止这么窄。ADSL 把高频段划出来传数据,低频段留给语音,相当于在同一条路上划出公交专用道,互不干扰。

2.2 CRC 校验:多项式除法怎么变成检错码

数据链路层最经典的检错手段就是 CRC(循环冗余校验)。样卷里有一道题:帧为 1101011011,生成多项式为 x⁴+x+1,求 CRC。很多人卡在“多项式怎么变成二进制”这一步。

其实很简单:x⁴+x+1 对应的二进制就是 10011——x⁴ 系数为 1,x³ 系数为 0,x² 系数为 0,x¹ 系数为 1,x⁰ 系数为 1。CRC 的计算过程就是拿帧后面补四个零,然后对 10011 做模 2 除法(异或),余数就是 CRC。

def crc_remainder(frame, generator): # frame: 字符串形式的二进制帧,如 "1101011011" # generator: 生成多项式对应的二进制串,如 "10011" data = list(frame + "0" * (len(generator) - 1)) gen = list(generator) for i in range(len(frame)): if data[i] == '1': for j in range(len(gen)): data[i + j] = str(int(data[i + j]) ^ int(gen[j])) return ''.join(data[-(len(generator) - 1):]) print(crc_remainder("1101011011", "10011")) # 输出 1110

这段代码的关键在于:每次发现当前位是 1,就用生成多项式去异或,把这一位消成 0。最后剩下的余数就是 CRC。接收方拿到帧加 CRC 后,再除一次生成多项式,余数为 0 就认为没出错。

提示:CRC 只能检错,不能纠错。它能发现绝大多数突发错误,但一旦发现错误,通常的做法是丢弃并请求重传,而不是自己修正。

2.3 帧、分组、段:不同层的数据块为什么名字不一样

样卷里有一道看似简单的题:数据链路层的数据块常被称为什么?答案是“帧”。但很多人会把它和“分组”“段”搞混。其实这三个词对应的是不同协议层对“数据块”的称呼:传输层叫“段”(TCP segment),网络层叫“分组”(packet),数据链路层叫“帧”(frame),物理层叫“比特”(bit)。

这就像寄快递:你写的信是“段”,装进信封写上收件人地址变成“分组”,再套一层快递袋贴上物流标签变成“帧”,最后装上卡车变成“比特流”。每一层都在上一层的基础上加了自己的“信封”,接收方则一层层拆开。理解了这个封装关系,再看 IP 分片重组发生在哪里就清楚了:分片发生在经过的路由器上(因为不同链路 MTU 不同),重组只在目的主机上进行。

3. 从信道竞争到可靠传输:那些容易混淆的协议与算法

3.1 ALOHA、CSMA 和 CSMA/CD 到底怎么选

样卷第一题就问:竞争站点数量小且固定、流量连续时,哪种信道分配方案比较有效?答案是 FDM 和 TDM。很多人会选 CSMA 或 ALOHA,因为它们更“有名”。但这里的关键词是“数量小且固定”和“流量连续”。

打个比方:ALOHA 像一群人开派对,谁想说话就直接说,不管别人有没有在说,冲突了就重来。CSMA 稍微礼貌一点,先听一下有没有人在说,没人说才开口。但如果人少且每个人都在稳定地说话,那还不如直接给每个人分配一个固定的发言时段——这就是 FDM/TDM 的思路。频分或时分把信道切成固定的小块,每人一块,不用抢,效率反而最高。

CSMA/CD 则多了一个“碰撞检测”:边说边听,一旦发现别人也在说,立刻闭嘴,等随机时间再试。以太网早期就是用这个。但无线网络里很难边发边听,所以 Wi-Fi 用的是 CSMA/CA(碰撞避免),先预约再发送。

3.2 滑动窗口与序列号空间:为什么窗口不能超过序列号的一半

样卷里有一道问答题:支持大小为 N 的滑动窗口,序列号空间需要 [0..2N-1]。如果序列号空间太小会怎样?答案是会出现二义性——接收方无法区分一个新帧和一个重传的旧帧。

举个例子:假设序列号只有 0 和 1 两个值,窗口大小 N=2。发送方发了 0 和 1,接收方都收到了并确认。但确认丢失了,发送方超时重传 0。接收方一看序列号是 0,以为是新的一轮,于是又收了一遍。这就乱套了。

所以规则是:序列号空间必须至少是窗口大小的两倍。这样发送方在收到确认之前,不会重复使用同一个序列号。Go-back-N 里未确认帧的最大数量是 2ⁿ-1(n 是序列号位数),也是同样的道理——留一个号出来防止新旧混淆。

3.3 Nagle 算法与 Clark 方案:一个管发送,一个管接收

样卷填空题问:Nagle 算法和 Clark 方案分别解决什么问题?答案是:Nagle 解决“发送方频繁发送小分片”的问题,Clark 解决“接收方窗口更新过于频繁”的问题。

Nagle 算法的思路很朴素:如果还有未确认的数据在飞,那就先把小数据攒着,等确认回来或者攒够一个 MSS 再发。这就像你写微信消息,不会每打一个字就发一条,而是打完一句话再发。Clark 方案则是针对“愚笨窗口综合症”:接收方每次腾出一点缓冲区就立刻通告一个小窗口,发送方就发一点数据,导致大量小包。Clark 的建议是等缓冲区空出一半或者一个 MSS 再通告窗口更新。

这两个方案互补:一个管住发送方的“碎碎念”,一个管住接收方的“频繁汇报”。合在一起,网络里的无效小包就少多了。

4. 常见误区与易混概念:这些坑你踩过几个

4.1 误区一:传输层和链路层的重传定时器是一回事

样卷里有一道选择题专门考这个:可靠的传输层和链路层协议设计时,都要考虑重传定时器的超时间隔大小问题。两者最大的区别在于 RTT 抖动的方差,前者大,后者小,这是由通信双方间的链路性质决定的。

为什么?链路层的通信是相邻节点之间的,RTT 基本固定,抖动很小,定时器可以设得很准。但传输层是端到端的,中间要经过无数路由器、不同链路,RTT 忽大忽小,抖动很大。所以 TCP 的定时器必须自适应,用 Jacobson/Karels 算法动态估算 RTO。把两者混为一谈,就会在计算题里选错。

4.2 误区二:IP 分片重组发生在路由器上

很多人以为分片和重组都在路由器上完成。实际上,分片确实发生在路由器上(因为出接口 MTU 可能变小),但重组只在目的主机上进行。中间路由器不负责重组,因为那样会大大增加路由器的负担,而且分片可能走不同路径到达。

注意:IPv6 已经取消了中间路由器分片,分片只能由源主机完成。这是为了减轻路由器负担,提高转发效率。

4.3 误区三:中继器、网桥、路由器都是网络层设备

样卷判断题里有一道:中继器、集线器、网桥、交换机、路由器和网关都是网络层互联设备。答案是错。中继器和集线器工作在物理层,网桥和交换机工作在数据链路层,路由器和网关才涉及网络层及以上。

区分方法很简单:看它认不认 MAC 地址。中继器只放大信号,不认地址;网桥和交换机认 MAC 地址;路由器认 IP 地址。一层层往上,设备越来越“聪明”,但转发速度也越来越慢。

4.4 误区四:路由环会导致数据包永远在环里转

判断题里有一道:如果两个路由器配置错误导致路由环,目的地为 D 的 IP 数据包会无休止地在环中传送。答案是错。因为 IP 包头里有 TTL(生存时间),每经过一个路由器减 1,减到 0 就丢弃。TTL 就是数据包的“后悔药”,防止它在网络里无限循环。

4.5 误区五:三次握手如果双方同时发起会建立两个连接

样卷判断题里有一道:如果双方同时发起连接,将会建立起两个端到端连接。答案是错。TCP 的同时打开(simultaneous open)只会建立一个连接,双方各自发送 SYN,然后各自回复 SYN+ACK,最终合并成一条连接。这就像两个人同时给对方打电话,结果发现是同一通电话,不会变成两通。

5. 什么时候该翻这份样卷,什么时候别把它当唯一救命稻草

这份计算机网络期末样卷最适合的场景,是你已经过了一遍教材、脑子里有零散概念,但还没串成线的时候。它像一张体检表:单选题帮你快速定位哪个层的概念还模糊,填空题逼你把关键算法和参数写出来,判断题让你辨析那些“看起来对其实错”的说法,问答题则要求你把协议流程完整讲清楚。如果你正在准备考试,用它来查漏补缺,效率比从头翻书高得多。

但它也有明显的边界。第一,它不覆盖编程实践。样卷里没有让你写 socket 代码、抓包分析或者配置路由器的题,所以如果你要应付实验课或项目,这份卷子帮不上忙。第二,它的题量有限,不可能覆盖所有考点。比如应用层的 HTTP、DNS、SMTP 在这份卷子里几乎没有出现,网络安全、无线网络也涉及很少。第三,它的难度偏中等,适合打基础,但如果你目标是高分冲刺,还需要补充更复杂的综合题。

我自己的习惯是:先限时做一遍,对答案时不只看对错,而是把每个错题对应的知识点在教材目录里标出来,然后集中把那一章重新过一遍。尤其是那些“以为自己懂了”的题——比如 CRC 计算、滑动窗口序列号空间——一定要动手算一遍,光看答案很容易翻车。从那以后我每次复习计网都强制走一遍“做题→定位→回炉”的流程,比单纯刷题管用得多。

如果你手头正好有这份样卷,建议先从单选题和填空题入手,把每个选项为什么对、为什么错都搞清楚,再去看问答题。遇到卡壳的地方,回到教材对应章节把概念重新捋一遍。希望这份资料能帮你把计网的骨架搭起来,考试时心里有底。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询