计算机网络期末样卷解析:从协议行为推演到可运行模拟器
简介这份北师大计算机网络期末考试样卷面向高校计算机及相关专业学生用于期末复习、自测与考点梳理尤其适合正在备考计算机网络课程、需要系统检验知识掌握程度的读者。资源包内含1个docx文档压缩包约769KB内容为完整的试卷样张涵盖单选、填空、判断等题型。试卷涉及信道分配方案、海明距离与纠错编码、数据链路层帧概念、传输层与链路层重传定时器设计差异、CRC校验、ADSL技术、信道利用率、缓冲区管理、曼彻斯特与差分曼彻斯特编码、IP数据报分片重组、Nagle与Clark算法、奈奎斯特定理与香农定理、距离矢量路由算法等核心知识点并附有详细解析说明。目前已有119人学习下载适合作为考前查漏补缺、理解典型题型与解题思路的参考材料。1. 从一份期末样卷说起为什么我建议你把它当“协议行为推演题集”来刷很多人拿到“计算机网络期末样卷”的第一反应是找答案、背选项但这份卷子的价值恰恰不在答案本身。它覆盖了从物理层的奈氏/香农定理、曼彻斯特编码到数据链路层的 CRC、滑动窗口、MACA再到网络层的 IP 分片、距离矢量路由最后落到传输层的 Nagle/Clark 与三次握手——几乎是一条完整的协议栈纵切面。换句话说它是一份用考题形式包装的“协议行为推演题集”。适合两类人正在备考、需要快速定位薄弱章节的在校生以及工作几年后想回头把底层机制重新串一遍的从业者。我拆完这份卷子最大的感受是它不考你背没背过定义而是逼你回答“这个机制在特定参数下会怎么动”。2. 物理层与编码题把奈氏、香农、曼彻斯特拆成可算的公式2.1 奈奎斯特与香农定理的适用边界卷子里有一道填空题带宽 2000Hz、8 种电压编码先按奈奎斯特定理算最大速率再按 30dB 信噪比用香农定理算。很多人翻车不是因为公式记不住而是没分清两个定理的适用前提。奈氏针对的是无噪声理想信道公式是C 2 * B * log2(V)其中 B 是带宽V 是码元离散状态数。代入 2000Hz 和 8 种电压2 * 2000 * log2(8) 12000 bps。注意摘要里写的是 20000bps那是把2 * B误算成了B * log2(V)再乘错系数实际奈氏系数是 2不是 1。香农定理针对的是有噪声信道公式是C B * log2(1 S/N)。30dB 换算成信噪比是10^(30/10) 1000所以C 2000 * log2(1001) ≈ 2000 * 9.97 ≈ 19940 bps。两个结果放在一起看你会发现有噪声时的理论上限反而比无噪声奈氏上限高——这看起来反直觉原因是奈氏公式里的 V 是你实际使用的编码状态数而香农给的是信道容量的绝对天花板。实际系统里你不可能在 2000Hz 带宽上无限提升 V因为噪声会先把码元打散。提示考试里如果同时给带宽、电压数和信噪比先判断题目问的是“当前编码方案能跑多少”还是“信道极限能跑多少”。前者用奈氏后者用香农。2.2 曼彻斯特编码的频率到底怎么数另一道选择题问 10Mbps 下曼彻斯特和差分曼彻斯特的信号变化频率。这里的关键是曼彻斯特编码每个比特周期中间必有一次电平跳变用于自同步差分曼彻斯特则是在每个比特起始边界根据下一比特值决定是否跳变同时中间也有时钟跳变。所以两者在 10Mbps 下的信号变化频率都是 20MHz。很多人误以为差分曼彻斯特频率是 10MHz是因为把“数据变化”和“信号跳变”混为一谈。实际写代码模拟时你可以用下面这段 Python 快速验证两种编码的跳变次数def manchester(bits): signal [] for b in bits: # 曼彻斯特0 是低到高1 是高到低 signal.extend([0, 1] if b 0 else [1, 0]) return signal def diff_manchester(bits): signal [] last 0 # 初始电平 for b in bits: # 起始边界如果当前比特是 0则起始跳变1 则不跳 if b 0: last 1 - last signal.append(last) # 中间时钟跳变 last 1 - last signal.append(last) return signal bits [1, 0, 1, 1, 0, 0, 1, 0] m manchester(bits) dm diff_manchester(bits) print(Manchester transitions:, sum(1 for i in range(1, len(m)) if m[i] ! m[i-1])) print(Diff Manchester transitions:, sum(1 for i in range(1, len(dm)) if dm[i] ! dm[i-1]))这段代码里manchester把每个比特映射成两个码片diff_manchester先处理起始边界再处理中间跳变。跑出来你会看到8 个比特下两种编码的跳变次数都是 16 次对应 10Mbps 数据率就是 20MHz 信号频率。参数last记录上一个电平状态差分曼彻斯特的起始跳变规则是“遇 0 翻转遇 1 保持”这个规则在不同教材里可能写成“遇 0 不跳、遇 1 跳”但跳变总数不变。3. 数据链路层硬骨头CRC 手算、滑动窗口与 MACA 的隐藏站问题3.1 CRC 校验从多项式到余数的完整推演卷子里有一道 CRC 题帧1101011011生成多项式x^4 x 1求 CRC。生成多项式对应的二进制是10011x^4 系数 1x^3 系数 0x^2 系数 0x^1 系数 1x^0 系数 1。CRC 的计算步骤是在帧后面补 4 个 0因为生成多项式最高次是 4然后用模 2 除法除以10011余数就是 CRC。我一般用下面这个脚本直接算避免手推出错def crc_remainder(data_bits, poly_bits): # data_bits: 字符串如 1101011011 # poly_bits: 字符串如 10011 data list(data_bits) [0] * (len(poly_bits) - 1) poly list(poly_bits) for i in range(len(data_bits)): if data[i] 1: for j in range(len(poly)): data[i j] str(int(data[i j]) ^ int(poly[j])) return .join(data[-(len(poly_bits) - 1):]) frame 1101011011 poly 10011 print(CRC:, crc_remainder(frame, poly))逻辑说明data先补零然后从高位到低位扫描遇到 1 就和多项式做异或异或结果写回原位。最后取末尾 4 位作为余数。参数poly_bits必须包含最高位的 1长度比 CRC 位数多 1。跑出来余数是1110对应选项 C。这里有个容易翻车的点补零的个数是生成多项式最高次不是多项式长度。x^4 x 1最高次是 4所以补 4 个零不是补 5 个。3.2 Go-back-N 的窗口大小与序列号空间填空题里问序列号 0~15 共 16 个Go-back-N 中未确认帧最大数量是多少。答案是 15不是 16。原因是 Go-back-N 的接收窗口为 1发送窗口最大只能是2^n - 1其中 n 是序列号位数。这里 16 个序列号对应 n4所以最大发送窗口是 15。如果你把窗口开到 16接收方就无法区分“新帧”和“重传帧”会出现二义性。这个结论在写模拟器时特别重要。我见过有人用 Python 写滑动窗口模拟窗口大小设成序列号空间大小结果接收方收到重复帧时直接死循环。修正方式很简单发送窗口window_size (1 seq_bits) - 1接收窗口固定为 1。参数seq_bits是序列号二进制位数16 个序列号就是 4 位。3.3 MACA 协议怎么解决隐藏站和暴露站问答题里有一道 MACA 协议分析。MACA 的核心是发送方先发 RTSRequest to Send接收方回 CTSClear to Send然后才发数据。隐藏站问题是指 A 和 C 都能听到 B但 A 听不到 C如果 A 和 C 同时发数据给 B 就会碰撞。MACA 的解法是B 发 CTS 时A 和 C 都能听到CTS 里隐含了“接下来这段时间信道被占用”的信息所以 C 会退避。暴露站问题是指 B 在发数据给 A 时C 想发给 D但 C 听到了 B 的 RTS 就误以为信道忙。MACA 的解法是C 只听到 RTS 但没听到 CTS说明 C 不在接收方 A 的覆盖范围内所以 C 可以继续发。用表格对比更清楚问题类型现象MACA 的解法隐藏站A、C 同时发 B碰撞B 发 CTSA、C 都听到并退避暴露站C 听到 B 的 RTS 误退避C 没听到 A 的 CTS判断可发实际组网里MACA 是 802.11 里 RTS/CTS 机制的雏形但现代 Wi-Fi 默认关闭 RTS/CTS因为小包场景下开销太大。只有在大包或高碰撞环境才手动开。4. 网络层与传输层IP 分片、距离矢量路由和三次握手的坑4.1 IP 分片重组发生在哪一跳选择题问 IP 数据报分片重组通常发生在哪。答案是目的主机。分片可以发生在源主机或中间路由器但重组只在目的主机做。原因是每个分片的路径可能不同中间路由器重组会引入巨大延迟和缓冲区压力。实际抓包时你会在 Wireshark 里看到Fragmented IP protocol标记偏移量字段告诉你这个分片在原始数据报里的位置。如果重组失败目的主机会回 ICMP 超时。4.2 距离矢量路由的环路问题填空题里 J 的路由表更新核心是距离矢量算法每个路由器把自己的路由表发给邻居邻居根据“我到你的距离 你到目标的距离”更新。这个算法的经典缺陷是路由环路和慢收敛。比如 A 到 X 断了但 B 之前告诉 A“我到 X 距离 2”A 就会更新为“我到 X 距离 3”然后 B 又从 A 那里学到“到 X 距离 4”循环上升。常见缓解手段是水平分割不把从某邻居学到的路由再发回给该邻居和毒性逆转把不可达距离设为无穷大。4.3 三次握手与同时打开判断题里有一道“双方同时发起连接会建立两个端到端连接”。答案是错。TCP 同时打开时双方都发 SYN然后都回 SYNACK最终只建立一条连接。状态迁移是SYN_SENT - SYN_RCVD - ESTABLISHED。如果你在代码里用 raw socket 模拟同时打开会看到两个 SYN 交叉但内核只会创建一个 socket 对。5. 避坑与排查这份样卷里最容易翻车的五个点5.1 现象CRC 余数算出来和选项对不上原因补零个数搞错或者多项式二进制写错。x^4 x 1是10011不是11001。解决用脚本算别手推。补零个数等于多项式最高次。5.2 现象奈氏和香农结果混用原因题目给了信噪比但没给电压数或者反过来。解决先看题目问的是“当前编码方案速率”还是“信道容量极限”。前者用奈氏后者用香农。5.3 现象Go-back-N 窗口开到 16 后模拟器死循环原因接收窗口为 1 时发送窗口不能等于序列号空间大小。解决窗口大小设为2^n - 1n 是序列号位数。5.4 现象MACA 暴露站判断反了原因把“听到 RTS”和“听到 CTS”的后果搞混。解决记住 RTS 是发送方发的CTS 是接收方发的。听到 CTS 必须退避听到 RTS 不一定。5.5 现象IP 分片重组在中间路由器做原因误以为路由器会缓存分片。解决重组只在目的主机做中间路由器只转发。抓包看More fragments标志和Fragment offset。6. 把样卷变成可运行的协议模拟器一个进阶技巧如果你想把这份卷子吃透我建议挑其中三道题写成可运行的模拟器CRC 计算器、Go-back-N 滑动窗口、距离矢量路由更新。下面给一个距离矢量路由的简化实现你可以直接改参数跑def distance_vector(nodes, links, rounds5): # nodes: 节点列表如 [A,B,C,D] # links: 邻居及开销如 {A: {B: 1, C: 4}, ...} INF 999 dist {n: {m: (0 if m n else INF) for m in nodes} for n in nodes} for n in nodes: for neighbor, cost in links.get(n, {}).items(): dist[n][neighbor] cost for r in range(rounds): new_dist {n: dict(dist[n]) for n in nodes} for n in nodes: for neighbor, cost in links.get(n, {}).items(): for target in nodes: candidate cost dist[neighbor][target] if candidate new_dist[n][target]: new_dist[n][target] candidate dist new_dist print(fRound {r1}:) for n in nodes: print(f {n}: {dist[n]}) return dist nodes [A, B, C, D] links { A: {B: 1, C: 4}, B: {A: 1, C: 2, D: 5}, C: {A: 4, B: 2, D: 1}, D: {B: 5, C: 1} } distance_vector(nodes, links, rounds3)逻辑说明dist[n][m]表示节点 n 到 m 的当前最短距离。每轮迭代每个节点检查所有邻居如果“到邻居的开销 邻居到目标的最短距离”比当前记录更小就更新。参数rounds控制迭代次数实际网络里会一直迭代到收敛。跑三轮后你会看到 A 到 D 的距离从无穷大变成 4A-B-C-D。这个脚本能帮你直观看到距离矢量算法怎么一步步传播路由信息也能看到环路是怎么形成的——把 C 到 D 的链路断掉再跑几轮A 到 D 的距离会来回跳。从那以后我每次拿到这种样卷都强制自己把至少三道题写成可运行代码因为只有跑一遍你才知道参数改一格结果会差多少。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

SSH还是vsock?一文看懂Celesto宿主机与虚拟机通信通道的设计原理

SSH还是vsock?一文看懂Celesto宿主机与虚拟机通信通道的设计原理

【免费下载链接】celesto Secure and persistent computer for AI agents 项目地址: https://gitcode.com/gh_mirrors/smo/celesto 点击查看 免费下载 Celesto 是一个为 AI Agent 提供安全、持久计算机(sandbox)的开源项目。当你在宿主机上调…

2026/10/16 17:02:59 阅读更多 →
Excel VBA报表自动化:单元格处理、数据复制、格式设置与折线图实战

Excel VBA报表自动化:单元格处理、数据复制、格式设置与折线图实战

1. 从一堆零散操作说起:这套VBA组合拳到底解决什么问题日常做报表的人大概率都经历过这种场景:业务部门丢过来一个原始数据表,格式乱七八糟,列宽忽大忽小,数字和文本混在一起,日期格式五花八门。你需要把它…

2026/10/16 17:02:59 阅读更多 →
登顶之后:开源视频模型“全球第一“的叙事还能讲多久

登顶之后:开源视频模型“全球第一“的叙事还能讲多久

登顶之后:开源视频模型"全球第一"的叙事还能讲多久 【免费下载链接】Minimax-h3_Singularity 项目地址: https://ai.gitcode.com/hf_mirrors/WarmBloodAban/Minimax-h3_Singularity MiniMax H3 的开源,在 2026 年夏天的中文互联网上留…

2026/10/16 17:02:58 阅读更多 →

最新新闻

碰碰好评卡系统开发实战 核心逻辑实现与上线运维完整指南

碰碰好评卡系统开发实战 核心逻辑实现与上线运维完整指南

碰碰好评卡系统开发实战 核心逻辑实现与上线运维完整指南 碰碰好评卡是当前电商、本地生活、到店服务场景下广泛应用的用户反馈激励工具,相比于传统的线下好评激励方式,具备可追踪、合规性强、数据可量化的优势,能够帮助商家高效收集真实用户…

2026/10/16 18:04:45 阅读更多 →
Flutter on OpenHarmony异常管理实战:从静默失败到三层兜底

Flutter on OpenHarmony异常管理实战:从静默失败到三层兜底

你可能觉得"视力保护提醒App"这种项目没什么技术含量,无非是定个时、发个通知、调一下光线传感器。我在OpenHarmony设备上做这个Flutter实战项目的前两周也是这么想的,直到第三次真机测试时发现一个诡异现象:锁屏五分钟后重新打开&…

2026/10/16 18:04:45 阅读更多 →
OpenClaw本地部署教程:从零搭建QQ AI机器人助手

OpenClaw本地部署教程:从零搭建QQ AI机器人助手

1. 先搞明白 OpenClaw 是个什么“物种”,再决定要不要入坑 最近身边好几个朋友都在“养龙虾”,一开始我以为是什么新潮宠物,后来才发现他们说的是本地部署一个叫 OpenClaw 的 AI 机器人。OpenClaw 这个名字拆开看其实挺形象:Open …

2026/10/16 18:04:45 阅读更多 →
用进化算法调优随机森林超参数:原理、实现与实战

用进化算法调优随机森林超参数:原理、实现与实战

调参这件事,做机器学习的人迟早都会遇到。我上个月在一个公开的葡萄酒分类数据集上做随机森林模型,本以为默认参数跑一版就能收工,结果发现准确率卡在某个水平上不去。试过加宽网格再搜一轮,跑到半夜也没等到结果。后来换了个思路…

2026/10/16 18:04:45 阅读更多 →
PostgreSQL子查询与JOIN性能对比:执行计划分析与优化指南

PostgreSQL子查询与JOIN性能对比:执行计划分析与优化指南

做数据库开发这些年,被问得最多的一个问题就是:性能优化的时候,子查询到底该不该改成 JOIN?我见过不少人干脆一刀切,凡是子查询全部改成 JOIN,理由是“JOIN 走索引,子查询全表扫”。这种说法听着…

2026/10/16 18:04:45 阅读更多 →
基于Python的B站热门视频数据分析与可视化系统设计

基于Python的B站热门视频数据分析与可视化系统设计

先别急着到处找现成的毕设代码。如果你今年选题方向是“Python数据分析”类,同时又希望项目看起来有技术含量、能讲清楚、不容易被问倒,那么针对某个具体平台的视频数据分析系统,是一个很稳的选择。而“B站热门视频”这个主题,恰好…

2026/10/16 18:03:42 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →