拓冰建站拓冰建站
首页 / 资讯中心 / 正文

网络运维测试题解析:VLAN、STP、OSPF与Python自动化实践

简介这份PDF汇集了网络系统建设与运维科目中关于IP地址赋值、OSPF Hello报文、RSTP/STP生成树、VLAN划分与间通信、交换机端口类型等高频考点以“题目正确答案简要解析”的方式呈现适合正在备考HCIA/华为网络工程师认证、高校网络基础课程考试或从事网络运维的初学者用于自测与查漏补缺。资源为1个PDF文件压缩包仅383KB轻量便携可快速下载到手机或电脑上反复刷题目前已有3420人学习使用。内容涵盖二十余道典型选择题覆盖二层交换机转发原理、MAC地址类型、STP端口角色切换、DHCP报文作用等领域不仅给出答案也解析关键概念与易错点有助于读者建立清晰的配置与排错思路提升网络故障排查和协议理解能力。1. 这份网络运维测试题拆开看全是生产环境里的真问题拿到这份《网络系统建设与运维测试题及答案》的时候我第一反应是“又是一份题库”但翻完 50 道题之后发现它其实把二层环路、VLAN 划分、STP/RSTP 收敛、OSPF 邻居建立、WLAN 组网、Python 自动化连接设备这些运维日常工作全串起来了。很多考生背答案能过但真到了交换机前反而说不清为什么 Access 口只能发 untagged 帧、为什么根端口失效时 Alternate Port 能秒切转发。这篇文章不按题号讲而是把题目按“网络工程师真正会遇到的场景”重新组织从 IP 赋值这种最基础的 Python 语法一路推到 OSPF 状态机、RSTP 端口角色、Hybrid 端口放通规则最后落到 Paramiko 批量巡检这个实操点上。适合正在备考华为 1X 或 HCIA 的读者也适合刚接手公司局域网、被广播风暴和 VLAN 间通信折腾过的运维新人。2. 从一道 Python 赋值题说起IP 地址在代码里是字符串不是数字2.1 正确写法与常见误用测试题第一题问“192.168.1.1 赋值给 a 对象的 Python 代码”正确答案是a192.168.1.1。这个题看似简单但暴露了 IT 从业者一个很常见的思维惯性看到 IP 就以为是数字直接用a192.168.1.1去写。Python 解释器会把它当成192.168.1减去1的算术表达式直接抛出SyntaxError因为168.1也不是合法数字。# 正确做法 a 192.168.1.1 # 字符串类型适合做比较、split、socket 传参 # 错误做法示例 # a 192.168.1.1 # SyntaxError: invalid syntax # 如果需要数值比较先转换 ip_int int(.join([f{int(x):08b} for x in a.split(.)]), 2) print(ip_int)这段代码先把192.168.1.1按.拆成四段每段转成 8 位二进制再拼起来最后转成整数。这样做的意义在于网络设备配置里ACL、路由汇总、子网计算经常要判断两个 IP 是否属于同一网段字符串比较不可靠192.168.1.2 192.168.1.10会是 True因为字典序必须先转成整数再比。2.2 这道题背后的网络自动化思维为什么一份网络系统建设与运维的考题会掺 Python因为现在批量登录交换机、跑巡检脚本、自动下发配置全都依赖 Paramiko、Netmiko 这类库做 SSH 连接。也就是说你不仅要会配 STP、VLAN还要能把 IP 地址以正确的数据类型扔进脚本里。常见做法是在脚本里维护一个设备清单IP 用字符串存登录用户名和密码用字典存再循环连接。这里有个坑从 Excel 或 CSV 读设备 IP 时如果用 pandas 读IP 可能被识别成 float192.168.1.1变成192.168.1.1没问题但192.168.1.0会被读成192.168.1丢掉末尾的 0。解决方案是读取时强制指定 dtypeimport pandas as pd df pd.read_excel(devices.xlsx, dtype{ip: str}) for row in df.itertuples(): print(row.ip) # 确保是完整字符串这一点在生产里特别容易被忽略丢一个 0 就 SSH 不到设备排查半天才发现是类型问题。所以第一题不只是考语法而是在提醒你网络自动化的第一步是把地址数据弄干净。3. VLAN 划分与端口类型为什么 Access 口只能发 untagged 帧3.1 基于 MAC 划分 VLAN 的适用场景题目里有一道很典型的员工经常变换办公位置从不同交换机接入该用什么方式划分 VLAN答案是基于 MAC 地址划分。理由是端口划分 VLAN 是静态绑定接入端口人换了位置就失效基于子网划分要看 IPDHCP 没下来之前也麻烦基于协议划分基本用于 IPv4/IPv6 混合场景不解决移动性问题。基于 MAC 划分后交换机把 MAC 与 VLAN 的对应关系写进配置用户无论插到哪台交换机的哪个口都能进到同一个广播域。但要注意基于 MAC 划分 VLAN 有代价第一交换机需要维护一张 MAC-VLAN 映射表设备多了表项膨胀第二如果用户网卡 MAC 被克隆或更换设备需要重新绑定第三首次接入时如果 MAC 未学习到端口默认 VLAN 的配置会影响初始帧的转发行为。所以现在园区网里终端密集且工位固定仍以端口划分 VLAN 为主只有会议室、开放工位这类高流动性区域才单独划几个口做基于 MAC 的动态 VLAN。3.2 Access、Trunk、Hybrid 的收发票据逻辑题目里说 Access 端口只能发送 untagged 帧Trunk 端口既能发送 tagged 也能发送 untagged取决于 PVID 和允许列表这句话在实际配置中要结合华为设备的 Hybrid 特性一起理解。华为交换机默认端口类型是 Hybrid它既可以像 Access 一样只放通一个 VLAN 并剥离标签也可以像 Trunk 一样放通多个 VLAN。区别在于出口处理规则端口发送帧时如果帧的 VLAN ID 等于该端口的 PVID则剥离标签发送如果不等于则带标签发送。# 华为交换机配置示例 [Huawei] vlan batch 10 20 30 [Huawei-GigabitEthernet0/0/1] port link-type hybrid [Huawei-GigabitEthernet0/0/1] port hybrid pvid vlan 10 [Huawei-GigabitEthernet0/0/1] port hybrid untagged vlan 10 [Huawei-GigabitEthernet0/0/1] port hybrid tagged vlan 20 30这里port hybrid pvid vlan 10表示该端口的缺省 VLAN 是 10收到不带标签的帧时打上 VLAN 10 的标签untagged vlan 10表示发送 VLAN 10 的帧时剥离标签因为对面接的是终端终端不认 802.1Qtagged vlan 20 30表示发送这两个 VLAN 的帧时保留标签通常对端接的是另一台交换机或路由器子接口。Access 口的逻辑则简单得多入方向打上 PVID 对应的标签出方向一律剥离。所以题目说“Access 端口只能发送 untagged 帧”是对的但更准确的说法是“Access 端口发送的所有帧都剥离标签”它压根不检查帧的 VLAN 是不是自己的 PVID只要从 Access 口进都强制按 PVID 打标。这样就带来一个生产坑如果两台交换机用 Access 口对接两边 PVID 不一致帧会被重新打标交换机 MAC 表直接学乱二层转发出现间歇性不通。3.3 802.1Q 为什么最多 4094 个 VLAN题目问 802.1Q 最多支持多少 VLAN答案是 4094。这个数字背后是协议格式VLAN Tag 占用 4 字节其中 TPID 2 字节TCI 2 字节。TCI 里又分 PCP3 bit、DEI1 bit、VID12 bit。12 bit 最大是 4095但 VID 0 和 4095 保留所以可用范围是 1 到 4094。VLAN 4095 在华为设备上作为保留 VLAN不能创建VLAN 0 用于 802.1p 优先级标记不是业务 VLAN。# 计算 VLAN 范围 vlan_max 2 ** 12 - 1 # 4095 usable [v for v in range(1, vlan_max) if v not in (0, 4095)] print(f可用 VLAN 数量: {len(usable)}) # 4094这里顺带说一个 VLAN 规划经验不要把 VLAN 号铺满 4094要留出扩展空间。比如办公区用 10-50服务器区用 100-150管理 VLAN 用 1000 以上这样后续加业务不用重构。另外很多交换机支持 Super VLAN、VLAN pooling 之类的特性本质上都是为了突破 4094 对三层接口数量的限制但二层广播域数量仍然受 4094 约束。4. STP/RSTP 收敛机制端口角色、BPDU 参数与定时器4.1 配置 BPDU 里到底装了什么STP 计算依赖配置 BPDU也就是题目里说的“用于计算生成树的信息被封装在配置 BPDU 中”。BPDU 的关键字段包括 Root Identifier、Root Path Cost、Bridge Identifier、Port Identifier以及 Message Age、Max Age、Hello Time、Forward Delay。题目考了 Root Identifier它由优先级和 MAC 地址组成两字节优先级加六字节 MAC用来标识根桥。这里有个容易记混的点Bridge Identifier 描述的是“发送这条 BPDU 的交换机自己”Root Identifier 描述的是“当前所认为的根桥”两者都包含优先级和 MAC。# 查看 STP 根桥信息和端口角色 [Huawei] display stp -------[CIST Global Info][Mode STP]------- CIST Bridge :32768.4c1f-cc0a-1234 CIST Root/ERPC :32768.4c1f-cc0a-1234 CIST RegRoot/IRPC :32768.4c1f-cc0a-1234输出里的CIST Bridge是本机桥 IDCIST Root是根桥 ID。如果两者一致说明本机就是根桥。如果不一样ERPC表示本机到根桥的外部路径开销。生产里排查二层环路第一步就是display stp看根桥是不是规划的汇聚交换机如果根桥变成了一台接入交换机说明有交换机优先级被改过或者新设备默认优先级抢占需要立刻调整。4.2 根端口失效时 Alternate Port 为什么能秒级切换标准 STP 有 Listening、Learning、Blocking、Forwarding、Disabled 五种状态端口从 Blocking 到 Forwarding 要经过两个 Forward Delay默认每个 15 秒总共 30 秒。RSTP 引入端口角色和 Proposal/Agreement 机制Alternate Port 就是根端口的备份它平时处于 Discarding 状态但一直保存着到根桥的次优路径信息。当根端口失效时Alternate Port 直接进入 Forwarding不需要等待定时器。# 启用 RSTP [Huawei] stp mode rstp # 配置边缘端口 [Huawei-GigabitEthernet0/0/24] stp edged-port enable # 开启 BPDU 保护 [Huawei-GigabitEthernet0/0/24] stp bpdu-protection边缘端口的概念和题目里“直接与终端相连接”的定义一致。终端不参与 STP如果端口等 30 秒再转发用户开机拿不到 IP 会报“网络未连接”。所以边缘端口要edged-port enable让端口直接进入转发状态。但要加bpdu-protection防止有人把交换机接到这个口上伪造 BPDU导致整个生成树重建。如果边缘端口收到 BPDU华为交换机会直接 shutdown 该端口并在日志里报BPDU PROTECTION。4.3 Forward Delay 默认 15 秒和端口状态转换题目考了 Forward Delay 默认 15 秒也考了端口从不转发进入转发要等 2 个 Forward Delay。2 个 Forward Delay 的物理意义是先经历 Listening15 秒保证 root 信息已经同步再经历 Learning15 秒学习 MAC 地址防止转发开始瞬间广播包被反灌成环路。如果网络直径过大默认 15 秒不够需要调大如果网络规模小、链路冗余多可以适当调小。# 调整 STP 定时器需在根桥配置 [Huawei] stp timer forward-delay 10 [Huawei] stp timer hello-time 2 [Huawei] stp timer max-age 20注意定时器必须在根桥上配置才生效因为 BPDU 里携带这些数值非根桥收到后以根桥的数值为准。一般建议不要随便改除非网络直径超过 7 跳否则维持默认值最稳。另外Max Age 默认 20 秒表示 BPDU 存活时间如果 20 秒没收到上级 BPDU就认为链路故障开始重新计算。所以遇到环路震荡先看display stp里的 Max Age 和 Forward Delay 是否一致不一致往往会导致一方已经收敛、另一方还在等待。4.4 TC 置位 BPDU 的转发角色题目里问非根交换机中哪个端口会转发根交换机产生的 TC 置位 BPDU答案是指定端口。根桥发出 TC 置位 BPDU 后每台非根交换机的根端口负责接收指定端口负责继续向下游泛洪。备份端口和预备端口在 STP 里都处于阻塞状态不转发 BPDU。这里最容易混淆的是RSTP 里所有端口都会发送 BPDU每台交换机自己定 hello 周期发但在标准 STP 里BPDU 只由根桥发起非根桥沿指定端口逐跳转发。5. OSPF 邻居建立与报文细节Hello 里有什么、没有什么5.1 Hello 报文内容与状态机迁移题目里几个 OSPF 判断题和选择题放在一起看很有意思。Hello 报文里有 Router ID、Neighbor 列表、DR/BDR 字段、区域 ID、认证信息、可选能力字段但没有 hello time 和 dead interval这两个定时器是接口上的配置通过 Hello 报文里携带的字段比对。如果两端 hello time 不一致对应字段仍然会被发送但收到方不做数值比对而是比较 dead interval 是否一致。华为设备默认 Hello 10 秒、Dead 40 秒广播网络中如果一方改成 5 秒另一方仍然是 10 秒邻居关系照样能建立但双方检测超时的频率不同实际体验是路由不稳定所以生产里建议两边保持一致。OSPF 状态机从 Down 到 Init、2-Way、ExStart、Exchange、Loading、Full。题目问哪些状态迁移不可能选项里 Down-Full 不可能因为必须经过 2-Way 和 ExStart。同理Init-2-Way 是可能的表示从只听到对方 Hello 到相互听到。还有一个容易忽略的细节在广播网络中两台路由器状态到 2-Way 后会停留等待 DR/BDR 选举不参与选举的路由器DROther之间邻居状态停在 2-Way不会进入 Full。所以display ospf peer看到一堆 DROther 之间是 2-Way 是正常现象不是故障。# 查看 OSPF 邻居状态 [Huawei] display ospf peer OSPF Process 1 with Router ID 10.0.0.1 Neighbors Area 0.0.0.0 interface 192.168.12.1(GigabitEthernet0/0/1) RouterID: 10.0.0.2 Address: 192.168.12.2 State: Full Mode:Nbr is Master Priority: 1输出里的State: Full表示邻接关系建立完成对于 P2P 链路这是最终状态如果状态卡在 ExStart 或 Exchange通常是因为 MTU 不匹配。题目说 Hello 报文里有 MTU 信息严格讲 Hello 报文里没有 MTU 字段但华为实现里 DD 报文会携带 MTU所以 MTU 不一致会在 Exchange 阶段卡住。5.2 OSPF 的组播地址与 DR/BDR 监听广播型网络中OSPF 用 224.0.0.5 表示所有 OSPF 路由器224.0.0.6 表示 DR/BDR。题目里说 DR 和 BDR 既侦听 224.0.0.5 也侦听 224.0.0.6这是对的。因为 DROther 路由器需要向 DR/BDR 发送链路状态更新目的地址是 224.0.0.6而 DR/BDR 需要接收所有路由器发来的 Hello 和 LSA所以要侦听 224.0.0.5。DROther 之间不建立 Full 邻接关系不直接交换 LSA所以 DROther 只需要侦听 224.0.0.5 来接收路由信息。如果用 Wireshark 抓 OSPF 包会看到目的地址 224.0.0.5 和 224.0.0.6 两类。生产里排查“OSPF 邻居能建立但路由少一条”时先抓包看 LSA 是否泛洪到 224.0.0.6如果只有 224.0.0.5说明 DR 选举有问题很可能是新接入的交换机把 DR 抢走了导致 LSA 泛洪路径变化。5.3 OSPF 的承载方式与验证题目最后一道判断题说“OSPF 由 UDP 承载目标端口号为 89”这是错的。OSPF 直接承载在 IP 协议之上协议号是 89不经过 TCP 或 UDP。这个知识点的重要性在于你在设备上配置 ACL 或者防火墙放行策略时如果只放行了 TCP/UDP 端口OSPF 报文会被丢弃。常见做法是放行协议号 89 和 224.0.0.5/224.0.0.6 组播组。# 思科/华为通用 ACL 规则片段示意 rule 5 permit ospf source 192.168.12.0 0.0.0.255 destination 224.0.0.5 0.0.0.0 rule 10 deny ip如果防火墙策略只放行 UDP 89OSPF 邻居会反复 Flapping因为 Hello 包被丢弃Dead 计时器超时后邻居消失过一会儿又收到下一个 Hello重新建立。排查方法是用display ospf error看是否有Hello interval不匹配或Neighbor mismatch同时抓包确认报文确实到达了对端接口。6. 用 Paramiko 写一个自动巡检脚本把题目里的考点变成线上命令6.1 连接交换机并执行命令题里已经点明 Paramiko 可以 SSH 连接网络设备这是实操价值最高的一道题。下面是一个最小可用的巡检脚本批量连接交换机执行display stp和display vlan把输出保存到本地文件。import paramiko import datetime devices [ {host: 192.168.1.10, username: admin, password: Huawei123}, ] def run_cmd(host, username, password, commands): client paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(host, port22, usernameusername, passwordpassword, look_for_keysFalse, allow_agentFalse, timeout10) shell client.invoke_shell() time.sleep(1) shell.recv(65535) # 清空 banner output [] for cmd in commands: shell.send(cmd \n) time.sleep(2) recv shell.recv(65535).decode(utf-8, errorsignore) output.append(f----- {cmd} -----\n{recv}) client.close() return \n.join(output) for dev in devices: result run_cmd(dev[host], dev[username], dev[password], [display stp brief, display vlan brief]) ts datetime.datetime.now().strftime(%Y%m%d_%H%M%S) with open(fbackup_{dev[host]}_{ts}.txt, w, encodingutf-8) as f: f.write(result)代码里invoke_shell()模拟交互式终端适合华为/思科这类需要分页或有时延的设备。look_for_keysFalse和allow_agentFalse是为了避免本机 SSH 密钥干扰密码认证。shell.recv(65535)可能只读到部分输出因为回显是分片的要更可靠可以循环读取直到提示符出现。6.2 处理分页和回显残留交换机默认分页开启display vlan如果超过一屏会停在---- More ----脚本会卡住。强制关闭分页是必须的screen-length 0 temporary通过 Paramiko 发送这行命令后后续输出不再分页。但注意temporary在会话断开后失效不用改设备全局配置适合巡检。另一个坑是回显里包含\r\n和空格用errorsignore忽略非法字符避免某些设备的特殊控制字符导致UnicodeDecodeError。6.3 把题库知识点变成校验规则巡检脚本光收集输出还不够最好自动判断状态。比如检查 STP 是否收敛解析display stp brief里每个端口的角色和状态如果存在Learning或Listening超过几秒还没转成Forwarding说明网络还在收敛中如果同时出现两个Root角色可能有环路冲突。再比如检查 OSPF 邻居状态如果display ospf peer里出现ExStart/Exchange而不是Full大概率 MTU 不匹配。import re def check_stp_state(output): pattern r\b(\d)\s(\w)\s(\w)\s(\d) for line in output.splitlines(): m re.search(pattern, line) if m: port, role, state, cost m.groups() if state in (LEARNING, LISTENING): print(fWarning: {port} still in {state})这段正则按display stp brief的列格式解析端口号、端口角色、端口状态、开销。不同版本交换机的输出列不完全一样所以生产里建议先用一条display stp brief手工跑一遍确认字段位置再写正则。如果嫌正则麻烦可以考虑用华为的display stp brief | include Forwarding先在设备端过滤减少脚本解析压力。6.4 定时巡检与异常告警把脚本放到 cron 或 Windows 任务计划里每天凌晨跑一次结果文件归档。更进一层是判断输出里有没有Down或ERR一旦发现就发邮件或钉钉通知。比如if RouterID in result and Full not in result: send_alert(fOSPF peer on {dev[host]} not full)实际运维里我一般会在脚本里加入重试机制SSH 连接失败后隔 5 秒重试 3 次因为设备可能正在重启或忙于处理告警风暴。同时给client.connect设置timeout10防止某台设备不可达时脚本卡住整个巡检链路。对于密码过期、账号被锁这类问题脚本要能捕捉AuthenticationException并单独记录不中断其他设备。这套做法正好对应题目里说的“网络系统建设与运维”的日常配置是建设巡检是运维而把巡检自动化就是把宝贵的下班时间抢回来。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门