简介:这份资源是西南交通大学计算机网络课程(3学分)的期末复习题PDF,面向正在备考该课程期末考试的本科生,尤其适合需要系统梳理考点、查漏补缺的复习阶段使用。内容以填空题为主,覆盖计算机网络概述、OSI与TCP/IP体系结构、物理层传输与调制、数据链路层流量控制与HDLC帧结构等核心章节,并用红、蓝、绿三色标注了2013-2014、2016-2017、2019-2020三个年度的考试题与知识点,加※号标记重复出现的高频考点,便于读者快速锁定重点。资源包共1个PDF文件,大小约959KB,轻量易携带,可直接打印或平板批注。目前已有117人学习下载,适合作为期末冲刺阶段的刷题与背诵材料,帮助读者在有限时间内把握命题规律、巩固概念细节。
1. 西南交大计算机网络期末复习题:一份 3 学分 PDF 到底该怎么刷
每年期末前两周,图书馆里总有人抱着一沓打印出来的《西南交通大学计算机网络期末复习题(3学分)2019.pdf》,封面被翻得起了毛边,但真正把它刷透的人并不多。这份 3 学分版本的复习题,覆盖的是谢希仁《计算机网络》体系下最核心的那批考点:体系结构、物理层、数据链路层、网络层、传输层、应用层,外加一点网络安全和无线网络的边角料。它最大的价值不在于“押题”,而在于把一学期散落在 PPT、作业、实验报告里的知识点,压缩成一套可以反复自测的题面。适合谁?适合已经上完课、但脑子里还是一团浆糊,想用最短时间把“计算机网络期末复习”这件事收口的人。如果你还在纠结“湖科大教书匠计算机网络适合考408吗”这类问题,那这份题对你来说偏简单,它服务的是校内 3 学分期末,不是考研 408 的难度。下面我按自己带学弟学妹刷题的路子,把这份 PDF 拆成可执行的复习流程。
2. 先搞清楚这份 3 学分复习题的题型分布与考点权重
2.1 从题面反推考纲:六层结构各占多少分
拿到 PDF 不要从头到尾一题一题做,先花二十分钟做一次“题型普查”。我一般会拿一张 A4 纸,画六行,对应物理层、数据链路层、网络层、传输层、应用层、网络安全与无线,然后逐页翻,把每道题归到对应行,顺手在题号旁标上题型:选择、填空、简答、计算、综合。翻完一遍你就能看出这份 2019 版复习题的权重分布,大致是这样的:
| 层次 | 常见题型 | 大致占比 | 必考计算点 |
|---|---|---|---|
| 体系结构 | 选择、填空 | 8% | OSI 与 TCP/IP 对照 |
| 物理层 | 选择、简答 | 10% | 奈氏准则、香农公式 |
| 数据链路层 | 计算、简答 | 18% | CRC、停等协议效率、滑动窗口 |
| 网络层 | 计算、综合 | 25% | 子网划分、CIDR、路由聚合、IP 分片 |
| 传输层 | 计算、简答 | 22% | 三次握手、拥塞控制、滑动窗口 |
| 应用层 | 选择、简答 | 12% | DNS、HTTP、电子邮件协议 |
| 安全与无线 | 选择、填空 | 5% | 对称/非对称加密、CSMA/CA |
这张表不是让你背,而是让你决定时间怎么分。网络层和传输层加起来接近一半,这两块的计算题必须动手算到不出错,其他层次以概念辨析为主。很多人复习翻车,就是把大量时间花在背物理层公式上,结果子网划分一考就错。
2.2 三遍刷题法:第一遍标、第二遍算、第三遍默
第一遍只做一件事:把每道题旁边标一个符号。完全不会的标“?”,有印象但不确定的标“△”,确定会的标“√”。这一遍不要查书,不要问人,就凭现有记忆硬扛,目的是暴露真实盲区。第二遍只做“?”和“△”的题,这时候允许翻谢希仁的教材或者你的课堂笔记,把每道计算题的完整步骤写在草稿纸上,尤其是子网划分和拥塞控制那几道,必须写出每一步的中间结果。第三遍在考前三天,只做“?”的题,并且要求自己合上书,把解题过程默写出来。三遍下来,一份 PDF 基本就被你榨干了。
提示:第一遍标符号时用铅笔,第二遍如果某道“?”题已经能独立做对,就擦掉换成“√”,第三遍的题量会肉眼可见地减少,心理压力也小很多。
3. 网络层计算题:子网划分与 CIDR 聚合的手算流程
3.1 子网划分:从掩码到可用地址数的固定套路
网络层计算题里出现频率最高的就是给一个 IP 和掩码,让你算子网数、每个子网的地址范围、广播地址。这类题有固定套路,我把它写成一段可复用的 Python 脚本,你刷题时可以用它验证手算结果:
import ipaddress def subnet_info(network_str): # network_str 形如 "192.168.10.0/26" net = ipaddress.ip_network(network_str, strict=False) print(f"网络地址: {net.network_address}") print(f"广播地址: {net.broadcast_address}") print(f"可用主机数: {net.num_addresses - 2}") print(f"地址范围: {net.network_address + 1} ~ {net.broadcast_address - 1}") # 列出前 4 个可用地址,方便核对 hosts = list(net.hosts())[:4] print(f"前几个可用地址: {hosts}") subnet_info("192.168.10.0/26")这段脚本用的是 Python 标准库ipaddress,不需要额外安装。strict=False的作用是允许传入非网络地址的 IP,比如你写192.168.10.5/26它也能自动归到192.168.10.0/26。num_addresses - 2减掉的是网络地址和广播地址。手算时你要练的是:由掩码/26推出块大小是 64,所以子网边界是 0、64、128、192,每个子网 62 个可用地址。脚本只是验证,不能替代手算,因为考场上没有 Python。
3.2 CIDR 路由聚合:找最长公共前缀的笨办法
路由聚合题通常给一组连续子网,让你聚合成一条路由。比如192.168.0.0/24、192.168.1.0/24、192.168.2.0/24、192.168.3.0/24。笨办法是把第三个字节写成二进制:
0 = 00000000 1 = 00000001 2 = 00000010 3 = 00000011前六位相同,后两位不同,所以聚合后的前缀是/22,结果是192.168.0.0/22。这个办法看起来慢,但不会出错。我见过有人直接凭感觉写/23,结果把不连续的网段也聚进去,整道题丢分。聚合的边界条件是:待聚合的网段必须连续,且数量是 2 的幂。如果不满足,就不能聚成一条,只能聚成多条。
注意:CIDR 聚合题有时会故意给一个不连续的网段,比如缺了
192.168.2.0/24,这时候你要先判断能不能聚,不能聚就老实写两条路由,不要强行凑。
4. 传输层与数据链路层:滑动窗口和 CRC 的动手验证
4.1 滑动窗口效率计算:把公式拆成可代入的变量
数据链路层的停等协议和滑动窗口效率,传输层的 TCP 窗口与拥塞控制,本质上都是同一个公式的不同变体。我一般让学弟学妹先记一个通用形式:
效率 = 窗口大小 × 发送一帧的时间 / (发送一帧的时间 + 往返传播时延)具体到题目里,发送一帧的时间 = 帧长 / 带宽,往返传播时延 = 2 × 距离 / 传播速度。把题目给的数字代进去,注意单位统一成秒和比特。下面这段代码可以帮你快速验算:
def efficiency(window, frame_bits, bandwidth_bps, distance_m, speed_mps=2e8): # 发送一帧的时间 tx = frame_bits / bandwidth_bps # 往返传播时延 rtt = 2 * distance_m / speed_mps # 效率 eff = (window * tx) / (tx + rtt) return min(eff, 1.0) # 效率不会超过 1 # 例:窗口 7,帧长 1000 字节,带宽 10 Mbps,距离 2000 米 print(efficiency(7, 1000*8, 10e6, 2000))window是窗口大小,停等协议填 1,后退 N 帧填 N,选择重传一般填 N。frame_bits要把字节乘以 8。bandwidth_bps注意 Mbps 要写成10e6。speed_mps默认2e8,也就是电磁波在铜缆或光纤中的大致传播速度,题目如果给了具体值就以题目为准。算出来的效率如果大于 1,说明窗口开得太大,实际会被限制在 1,这时候要检查题目是不是在问“最小窗口”。
4.2 CRC 校验:手算一遍比看十遍书管用
CRC 题在数据链路层几乎年年出现。给一个生成多项式,比如G(x) = x^4 + x + 1,对应二进制10011,再给一个数据比特串,让你算冗余码。手算步骤是:数据后面补 4 个 0,然后用模 2 除法除以10011,余数就是 CRC。模 2 除法就是异或,不借位。我建议你拿纸笔至少手算三道,因为考场上没有计算器,而且这种题一旦算错一步,后面全错。下面这段代码可以帮你核对:
def crc_remainder(data_bits, generator): # data_bits 和 generator 都是字符串,如 "1101011011" 和 "10011" dividend = data_bits + "0" * (len(generator) - 1) dividend = list(dividend) gen = list(generator) for i in range(len(data_bits)): if dividend[i] == '1': for j in range(len(gen)): dividend[i+j] = str(int(dividend[i+j]) ^ int(gen[j])) return ''.join(dividend[-(len(generator)-1):]) print(crc_remainder("1101011011", "10011"))data_bits是原始数据,generator是生成多项式的二进制表示。dividend补零的个数是生成多项式长度减一。循环里从高位到低位,遇到 1 就异或一次生成多项式。最后取末尾len(generator)-1位作为余数。手算时容易犯的错是异或到一半忘了对齐,或者把生成多项式的位数数错,代码跑一遍就能发现。
5. 避坑与排查:刷这份 PDF 时最容易翻车的五个地方
5.1 把“3 学分”当成“408 难度”,复习方向跑偏
现象:有人拿着这份 PDF 去对王道计算机网络的题,发现好多 408 常考的复杂综合题这里没有,于是怀疑 PDF 不全,又去找别的资料,结果两边都没刷完。原因:3 学分期末和 408 的考纲深度不同,这份 PDF 侧重基本概念和标准计算,不涉及 408 里那种多知识点嵌套的大题。解决:先确认自己的考试类型,如果是校内期末,就以这份 PDF 的题型为准,不要盲目加难度;如果同时准备 408,把它当基础题练手,综合题另找专项。
5.2 子网划分只背结论不写过程,考场一紧张就错
现象:平时看答案觉得“我会了”,考场上给一个/27的掩码,算可用地址数时写成 32 而不是 30。原因:没有形成手算肌肉记忆,对“减 2”这个动作不敏感。解决:每道子网题都在草稿纸上写出块大小、子网边界、网络地址、广播地址、可用范围这五项,写满十道,形成条件反射。
5.3 滑动窗口效率题单位不统一,算出来差 1000 倍
现象:帧长给的是字节,带宽给的是 Mbps,距离给的是公里,直接代公式,结果效率算出来是 0.0001 或者 1000。原因:没有统一到比特、秒、米。解决:代公式前先做单位换算,字节乘 8 变比特,Mbps 乘10^6变 bps,公里乘 1000 变米。换算完在草稿纸角落写一行“单位已统一”,再开始算。
5.4 CRC 生成多项式抄错一位,整题归零
现象:题目给的是x^4 + x^2 + 1,抄成x^4 + x + 1,二进制从10101变成10011,后面全错。原因:多项式到二进制的转换不熟练,或者抄题时漏看指数。解决:先把多项式按次数从高到低写全,缺项的系数补 0,再转二进制。转完回头对一遍题目,确认没有漏项。
5.5 传输层拥塞控制把“超时”和“快重传”混为一谈
现象:题目问“发送方收到三个重复确认后,拥塞窗口怎么变”,有人答成“超时,窗口降为 1”。原因:把慢启动的超时处理和快重传的快恢复搞混了。解决:记清楚两条线——超时:ssthresh = cwnd/2,cwnd = 1,重新慢启动;三个重复确认:ssthresh = cwnd/2,cwnd = ssthresh,进入快恢复。画一张状态转移图贴在书桌前,每天看一遍。
6. 考前三天怎么用这份 PDF 做最后一遍自测
最后三天不要再刷新题了,把这份 2019 版复习题里标“?”的题再过一遍,但这次换一种方式:不看题面,只看题号,自己给自己讲这道题考什么、步骤是什么、易错点在哪。能讲顺的题直接划掉,讲不顺的题再动手算一遍。我当年考前两天,把网络层和传输层的所有计算题重新手算了一遍,发现子网划分里“可用地址数”还是偶尔会写成2^n而不是2^n - 2,于是专门在草稿纸顶部写了一行大字“减二”,考试时再没犯过。另外,应用层的 DNS 查询过程、HTTP 持久连接与非持久连接、电子邮件协议这几个简答题,建议你合上书用手机录音讲一遍,回放时能听出自己哪里卡壳。这份 PDF 的价值不在于它押中了多少题,而在于它逼你把整本书的骨架过了一遍。我自己的习惯是,考前最后一晚不再看新内容,只把标“?”的题号抄在一张卡片上,进考场前扫一眼,心里就有底了。希望帮到你。
本文还有配套的精品资源,点击获取