简介:04741计算机网络原理填空题及答案面向自考04741课程考生及计算机网络基础学习者,聚焦填空题型下的概念辨析与高频考点记忆,可用于章节自测、考前速记和查漏补缺。资源包共1个docx文档,大小36KB,内容以题目与答案对照的形式编排,便于打印批注和反复背诵。文档围绕OSI七层模型、TCP/IP协议族、局域网介质访问控制、网络操作系统、网络互联与网络安全等模块展开,涉及星型拓扑、ARP地址解析、DNS递归/循环/反向查询、CSMA/CD与令牌环、虚电路和数据报等常见填空点,每题附有对应答案,便于边做边核对,适合检验基础概念掌握程度并定位遗漏。目前已有221人学习下载,可作为课程复习阶段的轻量级练习材料,配合教材逐章核对,快速定位薄弱环节,提升复习效率。
1. 一份 190 空的题库,先看清它能补什么
复习 04741计算机网络原理 到第三轮的人大多有过这种体验:选择题能靠印象蒙对,简答题能扯两句,唯独填空题一见就卡——不是完全不会,是答不准。这份 docx 就是把这类"卡壳点"集中摊开的材料:一百九十来道填空,从 10BASE-T 的拓扑、速率、介质、信号,到 OSI 七层的职责划分,再到 TCP 端口号位数、子网掩码、ATM 信元长度这些硬参数,题干后面直接跟答案,不需要再去翻教材对。
它的价值不在"背答案",而在"定位":填空考的是精确回忆,任何含糊都会当场暴露。适合三类人——正在准备课程考试、需要一份查漏清单的;做过一遍真题、想把散点串成体系的;以及要给新人出一套核对题的。下面按我实际整理它的顺序写:先按层重排,再做数值专项,接着讲协议归层的判断法,然后是踩过的坑,最后把它做成能自测的东西。
2. 按 OSI 七层重排:一张归位表和四步拆题流程
2.1 为什么按层重排比按题号顺序刷更省力
填空答案之间不是孤立的。10BASE-T 那题的四个空——星型、10Mbps、双绞线、基带——其实是同一套标准参数的四条边,缺一条另外三条也记不牢;IEEE 802.3 的 MAC 帧最短 64 字节、前导码每个字节 10101010、目的地址最高位为 0 表示单个地址、全 1 表示广播地址,这几个空共享同一张帧结构图。
按题号顺序刷,等于把同一张图拆成四五个孤立句子分别硬记,回忆时没有挂钩点。按层重排之后,同一层的空会自动聚成一簇:想到"帧"就带出前导码、地址位、最短帧长、CRC 校验;想到"E1"就带出 2.048Mbps 和 PCM 载波。这是记忆锚点的复用,不是玄学。
我在带人过这份材料时的一般做法是:先不动答案,只问题干属于哪一层、哪个标准、哪个设备。归不了层的题,往往就是最该补的那几道——它意味着你连这道题在知识地图上的位置都没建立起来,背下来也是临时的。
2.2 归位表只留五列,多一列都是负担
列数一多,整理本身就会变成消耗。五列够用:层/域、标准或协议、考点类型、题干关键词、答案要点。层/域一列做粗分(物理层、数据链路层、网络层、传输层、应用层、网络管理与安全、体系结构与演进);考点类型分四类——数值参数、协议归属、术语定义、机制流程。
分类不是为了好看,是为了决定后面怎么复习:数值参数靠横向对比表,协议归属靠判断规则,术语定义靠一句话口述,机制流程靠手画时序。用错方法复习是最常见的低效来源,拿背术语的方式去背三次握手,背十遍也画不出来。
从原始材料里切一小段出来,归位表大概长这样:
| 层/域 | 标准或协议 | 考点类型 | 题干关键词 | 答案要点 |
|---|---|---|---|---|
| 物理层 | 10BASE-T | 数值参数 | 拓扑、速率、介质、信号 | 星型、10Mbps、双绞线、基带 |
| 物理层 | 10BASE5 | 数值参数 | 速率与每段最大长度 | 10Mbps、500m |
| 物理层 | RS-232C | 术语定义 | 最常用最经典的物理层协议 | RS-232C |
| 物理层 | E1 载波 | 数值参数 | 数据传输速率 | 2.048Mbps |
| 数据链路层 | HDLC | 数值参数 | 帧类型标识位 | 信息帧 0、监控帧 10 |
| 数据链路层 | IEEE 802.3 | 数值参数 | 最短帧长、前导码 | 64 字节、10101010 |
| 网络层 | ARP | 协议归属 | IP 地址映射物理地址 | 地址解析协议 |
| 传输层 | TCP | 数值参数 | 端口地址位数 | 16 位 |
| 应用层 | SMTP | 数值参数 | 端口号 | 25 |
这张表最大的用处是暴露出"同一层里参数没对齐"的地方。比如物理层那一簇,10BASE-T 的段长限制和 10BASE5 的 500m 很容易串位,串位的原因往往不是记性差,是根本没意识到 5 这个数字本身就是段长代号。表格把这些并排放着,一眼就看出来了。
2.3 四步拆题:抽取、贴标签、聚簇、写图景
手工拆一百多道题不现实,先跑一遍解析。原始 docx 里的题号格式相当乱:有"1."、"15."(全角句点)、还有"221."这种明显是上一题末尾数字粘过来的。所以切分模式必须宽松,同时要防止把"221"里的"21"当成题号。
import re raw = open("fill_in_blank.txt", encoding="utf-8").read() # (?<!\d) 保证题号左边不是数字,避免把 "221." 里的 "21." 切成一条 # 前瞻 (?=...|$) 表示题干一直吃到下一个题号或文本结尾,比 split 更稳 pattern = re.compile( r"(?<!\d)(\d{1,3})\s*[..、]\s*(.+?)(?=(?<!\d)\d{1,3}\s*[..、]|$)", re.S, ) items = [] for m in pattern.finditer(raw): no = int(m.group(1)) body = re.sub(r"\s+", " ", m.group(2)).strip() # 合并换行与全角空格 items.append({"no": no, "body": body}) print(len(items), items[0])逻辑说明:用前瞻而不是re.split,是因为split会把分隔符丢掉,题号就找不回来了;re.S让点号能跨行匹配,题干里有换行也不会截断。参数上\d{1,3}覆盖三位题号,如果后续出现四位编号再改。跑完之后一定要人工扫一遍,题号粘连的那种(正文里出现过221.、119.这类)会被切歪,只能靠人眼核对。
第二步贴标签,先用关键词字典做半自动归层,命中多条的直接留白,别硬塞。
LAYER_HINTS = { "物理层": ["10BASE", "双绞线", "光纤", "同轴", "RS-232", "编码", "调制", "多路复用", "ADSL", "E1"], "数据链路层": ["HDLC", "帧", "CRC", "LLC", "MAC", "网桥", "滑动窗口", "令牌", "突发"], "网络层": ["IP", "ARP", "路由", "子网掩码", "ICMP", "IGMP", "分组", "拥塞"], "传输层": ["TCP", "UDP", "端口", "三次握手", "端到端"], "应用层": ["DNS", "FTP", "SMTP", "URL", "WWW", "邮件", "域名"], } def guess_layer(text): hits = [k for k, kws in LAYER_HINTS.items() if any(w in text for w in kws)] # 命中两条以上说明题干跨层,交给人判断,别让脚本猜 return hits[0] if len(hits) == 1 else "待人工确认" for it in items: it["layer"] = guess_layer(it["body"]) print(sum(1 for it in items if it["layer"] == "待人工确认"), "条需要手判")关键词字典里"端口"要小心:它既可能指 TCP 端口号,也可能指交换机的物理端口、VLAN 的端口划分,所以命中"端口"而题干里同时出现"交换""VLAN"的,会被归到待确认,这是有意设计的保守策略。
第三步聚簇,把同一标准下的空合并成一条;第四步给每簇写一句"图景",也就是用一句话把这一簇的物理含义讲清楚。比如"10BASE-T:T 是 Twisted pair,10 是速率,Base 是基带,星型拓扑,段长 100 米"——这句话念顺了,四个空自然就填得出来。图景写不出来的簇,说明这一块只是背了答案,没有理解,得回去补。
3. 数值类填空专项:把速率、帧长、端口位数钉在上下文里
3.1 三类记忆锚点:速率族、长度族、机制族
数值题是填空题里最容易翻车的一类,因为答案短、无提示、错一位就全错。我的做法是分三族记,族内横向比,族间不混。
速率族:10Mbps(10BASE-T 与 10BASE5 共用)、56Kbps(电话双绞线上网主流速率)、64Kbps(其物理极限)、2.048Mbps(E1 载波)、8Mbps(ADSL 下行最高速率)、54Mbps(IEEE 802.11g 最高速率)、1Mbps(蓝牙最高速率,工作频率 2.4GHz)。这一族的关键是记住每个数字绑在谁身上,速率本身反而次要。
长度族:500m(10BASE5 每段最大长度)、64 字节(802.3 最短帧长)、48 字节(ATM 信元信息段)、16 位(TCP 端口地址位数)、14 位(B 类地址网络号位数)、7 层(OSI 层数)、13 减到 7(IPv6 报文头字段数)。
机制族:三次握手、HDLC 帧类型标识位(信息帧 0、监控帧 10)、MAC 目的地址最高位 0 为单播全 1 为广播、偶校验位与奇校验位的取值。
三族分开记的好处是不会互相污染。翻车最多的恰恰是跨族串味——把端口的 16 位串到 B 类地址上,或者把 64 字节的帧长记成 64Kbps 的速率。
3.2 参数对照表:一张表覆盖八成数值题
| 参数 | 取值 | 绑定的对象 | 常见错法 |
|---|---|---|---|
| 网络速率 | 10Mbps | 10BASE-T / 10BASE5 | 与 100Mbps 混 |
| 每段最大长度 | 500m | 10BASE5 | 套到 10BASE-T 上 |
| 最短帧长 | 64 字节 | IEEE 802.3 MAC 帧 | 写成 64 位 |
| 前导码字节模式 | 10101010 | 802.3 MAC 帧前导码 | 写成 01010101 |
| 信元信息段 | 48 字节 | ATM 信元 | 与 53 字节总长混 |
| 端口地址位数 | 16 位 | TCP 段结构 | 写成 32 位 |
| B 类网络号位数 | 14 位 | B 类 IP 地址结构 | 与掩码 16 位混 |
| 默认子网掩码 | 255.255.0.0 | B 类地址 | 写成 255.0.0.0 |
| E1 速率 | 2.048Mbps | PCM 载波标准 | 写成 1.544Mbps |
| ADSL 下行上限 | 8Mbps | ADSL 标准 | 与 56Kbps 混 |
| 802.11g 速率 | 54Mbps | 无线局域网 | 与 802.11b 的 11Mbps 混 |
| 蓝牙速率与频率 | 1Mbps、2.4GHz | 短距离无线 | 频率写成 5GHz |
| SMTP 端口 | 25 | 简单邮件传输协议 | 与 FTP 的 21 混 |
表格的用法不是通读,是遮住第三列自测:只给参数和取值,问它绑在谁身上;反过来只给对象,问取值。两个方向都能过,才算真记住。单向过表的典型结果是考场上看到"ATM 信元中信息段的长度是____"这种反向提问就卡住。
3.3 用正则把带单位的题一次性捞出来
一百多道题里翻数值题很费眼,用带单位的正则扫一遍,几分钟就能拉出清单。
import re # 单位要写全,注意 m\b 后面加边界,否则会把 ATM、modem 里的 m 也捞出来 UNIT_PAT = re.compile( r"\d+(?:\.\d+)?\s*(?:Mbps|Kbps|Gbps|GHz|MHz|字节|bit|位|米|m\b|层|个)" ) def pick_numeric(items): out = [] for it in items: hits = UNIT_PAT.findall(it["body"]) if hits: it["nums"] = hits out.append(it) return out numeric = pick_numeric(items) for it in numeric[:5]: print(it["no"], it["nums"], it["body"][:40])逻辑说明:findall只返回匹配到的数值片段,不返回上下文,所以打印时要带上题干前 40 个字符,方便判断这个数字说的是什么。m\b里的边界是血泪经验——不加的话,凡是含 "ATM"、"modem" 的题都会被误捞进来,清单立刻膨胀一倍。(?:\.\d+)?是为了兼容 2.048、2.4 这种小数。
参数调整上,如果题库里有中文单位"兆"、"千字节",把它补进分组里即可;扫描结果里大概率会混进"三次"、"两类"这种非参数的数词,人工剔一遍就行,不用把正则写到完美。
顺便提醒一个判分细节:填空题里问速率要带 Mbps 或 bps,问帧长要带字节,问位数要带位。答案写"64"而不写单位,在严格的阅卷标准下是要扣的。整理时把单位一起写进答案列,形成肌肉记忆,考场上就不会漏。
4. 协议与设备归层:用「作用域」判断,别靠背口诀
4.1 归层的唯一依据是寻址粒度
协议归层这类题看着杂,其实只有一条判断依据:它寻址谁、管到多远。管的是一个物理比特流能不能过去,就是物理层;寻址用的是网卡上的物理地址、管的是相邻节点之间一帧的完整性和流量,就是数据链路层;寻址用 IP 地址、管的是跨网段的分组转发和路由选择,就是网络层;寻址用端口号、管的是两个进程之间的端到端通信,就是传输层;再往上跟具体应用打交道,就是应用层。
拿这条依据去套,很多题不用背就出来了。ARP 把 IP 地址映像成物理地址,两头都碰,但它的服务对象是 IP 分组能不能封装成帧,所以归网络层,答案里写"地址解析协议"。ICMP、IGMP、ARP、RARP 被放在"TCP/IP 协议族中网络层协议"这一题里,也是同一个道理:它们都在为 IP 层服务。
设备同理。中继器和集线器只做比特转发,物理层;网桥和二层交换机看 MAC 帧、做协议转换,数据链路层;路由器在网络层做分组的存储转发和路径选择,网络层;网关提供传输层及以上的协议转换,所以答案写"传输层及传输层以上"。同一道题问"在传输层及以上的各层互联"用什么设备,答网关,不要答路由器。
4.2 协议、设备、层三者对照表
| 层 | 典型协议 | 数据单元 | 互联设备 | 判断抓手 |
|---|---|---|---|---|
| 物理层 | RS-232C、10BASE-T、E1 | 比特 | 中继器、集线器 | 只放大或转发比特,不看地址 |
| 数据链路层 | HDLC、IEEE 802.3、802.5 | 帧 | 网桥、二层交换机 | 认 MAC 地址,管相邻节点 |
| 网络层 | IP、ICMP、IGMP、ARP、RARP | 分组(数据包) | 路由器 | 认 IP 地址,管跨网段 |
| 传输层 | TCP、UDP | 段或数据报 | 网关(含以上各层) | 认端口号,管端到端 |
| 应用层 | DNS、FTP、SMTP、HTTP | 报文 | — | 面向具体业务 |
表里"数据单元"一列要特别注意:网络层的 PDU 在材料里同时出现过"数据包"和"分组"两种说法,这不矛盾,是译法差异。答题时看题干措辞就近选,别在一道题上纠结两个词谁更规范。
还有一组容易混的:局域网参考模型把数据链路层拆成 LLC 和 MAC 两个子层,LLC 与媒体无关、负责差错与流量控制,MAC 依赖物理媒体和拓扑结构。凡是问到"与介质无关的子层"或"负责差错与流量控制的子层",答案都是 LLC;问到"依赖于物理媒体和拓扑结构",答案是 MAC。
4.3 反向抽查:给设备问层,给机制问层
整理完之后要验证,验证的方向必须是反的:不是看到协议想层,而是看到层说协议、看到设备说层。正向能答、反向卡住,说明记住的是字符串顺序,不是知识结构。
import random CARDS = [ ("ARP 属于哪一层,作用是什么?", "网络层;把 IP 地址映射为对应的物理地址"), ("网关工作在哪几层?", "传输层及传输层以上,提供协议转换"), ("LLC 子层与介质有关吗?负责什么?", "无关;负责差错控制与流量控制"), ("SMTP 的端口号是多少?", "25"), ("B 类地址网络号占几位?默认掩码是什么?", "14 位;255.255.0.0"), ("HDLC 监控帧的帧类型标识位取值?", "10"), ("10BASE5 的 5 代表什么?", "每个网络段的最大长度为 500m"), ] def drill(n=7): for q, a in random.sample(CARDS, min(n, len(CARDS))): input(q + " (回车看答案)") print("答:" + a + "\n") drill()逻辑说明:random.sample保证一次抽测里不重复出同一张卡,比random.choice更适合小批量过题;input的作用是强制你先在心里说一遍再揭晓,跳过这一步,抽测就退化成看答案。参数n建议设在 10 到 15 之间,超过 20 注意力就开始掉了。
卡片内容建议按层轮流放,别把七张物理层的卡连在一起。混合出题才检验得出归层能力,连续同层只是在复习同一簇。
5. 避坑与排查:答案背熟了,为什么换道题还是错
坑一:网络层的数据单元,一会儿答"数据包"一会儿答"分组"。
现象:同一份材料里两道题,一道问"网络层的协议数据单元通常被称为",答案是数据包;另一道问"OSI 参考模型网络层中的协议数据单元常被称为",答案是分组。考场上遇到哪道都得先愣一下。
原因:这是不同版本教材的译法差异,不是两个概念。分组就是 packet,数据包也是 packet,有的教材把"包"专门留给物理层的信号单位,于是产生了分歧。
解决:把两个词当成同义答案绑定记,题干里出现哪个词就顺着答哪个,别去纠正题目用词。真要在笔记里统一,就记"网络层 PDU = 分组(packet),部分教材写作数据包"。
坑二:10BASE-T 与 10BASE5 的介质和段长串位。
现象:问 10BASE-T 用什么介质、段长多少,有人答"同轴电缆、500 米",把 5 那题的答案整段搬过来了。
原因:没有理解标准命名的构词规则。10 是速率,Base 是基带传输,后缀才是介质和段长代号:T 是 Twisted pair(双绞线),5 是 500 米,2 是 200 米级别的细同轴。
解决:把命名规则当成一条公式记下来,遇到任何 10BASE-x 都拆成三段读。这样即使考到没背过的变种,也能推个八九不离十。这条规则还能顺带解释为什么 10BASE-T 是星型拓扑——双绞线接的是集线器,天然星型。
坑三:端口 16 位、IP 32 位、B 类网络号 14 位、默认掩码 16 位,四个数字互相污染。
现象:题目问"TCP 段结构中端口地址的比特数",答成 32;问"B 类 IP 地址中用于标识网络地址的比特位数",答成 16。
原因:这几个数字都跟"地址"有关,但描述的是不同东西——端口是传输层进程标识,IP 是网络层主机标识,B 类的 14 位是因为前两位固定为 10,而默认掩码 255.255.0.0 覆盖的是前 16 位。四个数字分属三种口径。
解决:按"地址结构位"和"掩码覆盖位"两个口径分开记。B 类地址结构上网络号 14 位、主机号 16 位;默认掩码覆盖前 16 位。端口地址固定 16 位,与 IP 地址毫无关系。做题时先问自己这道题问的是哪一层的东西。
坑四:奇偶校验位方向搞反。
现象:对二进制信息 1001101 做偶校验,填了 1;做奇校验,填了 0,正好全反。
原因:没数清楚信息位里 1 的个数,或者把"偶校验"理解成"校验位取偶数"。
解决:固定流程——先数信息位里 1 的个数(1001101 中共 4 个),偶校验要求总数为偶数,已有 4 个,补 0;奇校验要求总数为奇数,补 1。写答案前在草稿上写一句"1 的个数 = 4",这一步花三秒,能省一道题。
坑五:题号粘连导致整理后总数对不上、旧题重复复习。
现象:解析完发现题目数量比预期多出几条,或者某几道题出现两次,而另一些题根本没进清单。
原因:从文档复制时,上一题末尾的数字和下一题的题号连在了一起,形成了"221."这类伪题号;还有一种情况是选项标号被当成题号切走。
解决:解析脚本先用宽松正则切,再统计题号序列,找出跳号和重号的位置人工核对。核对标准不是题号连续,而是语义不重复——宁可手工补几条,也别让重复题占掉复习时间。
坑六:HDLC 帧类型只记了信息帧 0 和监控帧 10,遇到无编号帧就蒙。
现象:题干给一个控制字段,问帧类型,前两种能答,第三种卡住。
原因:只背了材料里出现过的两个值,没建立"帧类型标识位是几位、还剩哪个组合"的结构认识。
解决:把 HDLC 三类帧的标识位当成一个穷举表记——信息帧 0、监控帧 10、无编号帧 11,三者覆盖了全部组合。记结构比记两个孤立数字可靠,遇到变体也能推。
6. 把 docx 变成可自测题库:解析、切分与命令行抽测
手抄一遍答案的做法,我试过,抄完基本不会再看第二遍。真正跑得通的是直接读 docx,切出题干和答案,导成 CSV,再用一个几十行的命令行脚本抽测。这样每次打开终端就能过十道,比翻文档现实得多。
from docx import Document import csv, re doc = Document("04741计算机网络原理填空题及答案.docx") # paragraphs 只能拿到正文段落;题目若被塞进表格,必须再扫一遍 tables blocks = [p.text.strip() for p in doc.paragraphs if p.text.strip()] for t in doc.tables: for row in t.rows: for cell in row.cells: txt = cell.text.strip() if txt: blocks.append(txt) SPLIT = re.compile(r"(?<!\d)(\d{1,3})\s*[..、]\s*") def split_items(blocks): items, buf = [], "" for b in blocks: if SPLIT.match(b): # 只看段首,正文中间的编号不动 if buf: items.append(buf) buf = b else: buf = (buf + " " + b) if buf else b if buf: items.append(buf) return items rows = [{"题干": x, "答案": ""} for x in split_items(blocks)] with open("qbank.csv", "w", encoding="utf-8", newline="") as f: csv.DictWriter(f, fieldnames=["题干", "答案"]).writerows(rows) print(len(rows), "条已导出")这里用SPLIT.match而不是search是有意的:题干内部经常出现层号、协议版本号这种"1."格式,search会把它们误判成新题号,match只看段首就稳得多。答案列默认留空,因为这份材料的答案是混写在题干句子里的,用规则切容易把"Windows NT"这种带空格的内容切断,人工补这一列大约二十分钟,比调正则划算。
导出之后抽测就简单了:
import csv, random def quiz(path, n=10): rows = [r for r in csv.DictReader(open(path, encoding="utf-8")) if r["答案"]] for r in random.sample(rows, min(n, len(rows))): input(r["题干"][:60] + " (回车看答案)") print("→ " + r["答案"] + "\n") quiz("qbank.csv", 10)if r["答案"]这一句过滤掉还没补答案的行,避免抽到空题。
从那以后我每次整理这类题库,都会先跑一遍解析、把题号序列对一遍,再动手背——顺序反了,后面全是在给错漏的清单补窟窿。希望帮到你。
本文还有配套的精品资源,点击获取