以太网与交换与邻接与路径 MTU

共 24 题
📑 题目列表 24 题
#
★★★

1. 交换机如何学习源 MAC 并转发未知单播,MAC 表震荡通常反映什么拓扑问题?

请解释二层交换机如何通过源 MAC 学习构建 MAC 地址表,以及交换机会如何转发目的 MAC 未知的单播帧;同时说明 MAC 地址表(CAM 表)频繁震荡通常反映怎样的拓扑问题?

  • 交换机 MAC 地址学习机制与泛洪(flooding)行为
  • 未知单播帧的转发策略
  • MAC 表震荡与环路/次优路径的因果关系

交换机在收到一帧时,会先读取源 MAC 地址,将其连同收到该帧的接口和 VLAN 一起写入 MAC 地址表(若已有则刷新老化时间)。对于目的 MAC,若表中有匹配项则按表项唯一接口转发(单播),若没有匹配项(未知单播)则除了接收接口外的所有同 VLAN 接口泛洪转发。MAC 表震荡指同一 MAC 地址在多个接口之间反复出现/被改写,通常表明网络中存在环路(如两台交换机用两条线互联且未启用生成树),广播帧在环上循环,导致同一主机从不同接口都被看到,于是 MAC 表项在接口间来回"漂移";也可能是因为同网段存在两条等价路径而在做次优转发。环路同时还会引发广播风暴和泛洪风暴。

学习机制利用"源 MAC 学习、目的 MAC 查找"这一不对称性,本质是二层转发依赖数据面的经验积累。MAC 震荡是环路最典型的早期信号之一,排查时应优先检查生成树配置、STP 状态是否一致,以及是否存在误配的冗余链路。

#
★★★

2. RSTP 如何通过端口角色和同步过程缩短收敛,边缘端口误接交换机有何风险?

请说明 RSTP(802.1w)相比 STP 通过端口状态精简、端口角色和同步(proposal/agreement)机制如何把收敛时间从数十秒缩短到秒级,并解释边缘端口(edge port)被误接交换机后可能带来什么风险?

  • RSTP 的最小端口状态集合(discarding/learning/forwarding)与端口角色
  • proposal/agreement 握手同步机制
  • 边缘端口转入 blocking 的机制与风险

RSTP 把 STP 的 5 种端口状态压缩为 discarding、learning、forwarding 三种,并定义了根端口、指定端口、替代端口、备份端口等角色。收敛的核心是 proposal/agreement 同步过程:当端口通过 proposal 提出成为指定端口时,对端若确认,则立即进入 forwarding 状态,无需等待 forward delay,从而把收敛时间从 STP 的 30 秒级缩短到 (通常是确定型拓扑的)秒级甚至更低。边缘端口默认直接进入 forwarding 且不参与生成树计算,用于连接终端主机;若把它误接到交换机上,该端口不会阻塞,可能造成环路,因此 RSTP 要求边缘端口收到 BPDU 后应立即转成普通端口并重新参与生成树计算(edge port 自动降级)。

RSTP 的改进在于"被动等待"变成"主动协商同步",以握手方式快速确定端口状态。边缘端口是从"面向终端"的苛刻假设出发的优化,部署时若网络拓扑可能变化,务必配合 BPDU guard 关闭误接交换机端口,防止误连引入环路。

#
★★★

3. 链路聚合中基于五元组哈希为何无法让单一大流使用全部带宽?

请解释链路聚合(LACP/port-channel)在负载均衡时基于五元组哈希的原理,以及为什么一条单项大流(如单 TCP 连接)无法利用全部成员链路带宽?

  • 哈希算法与流一致性的权衡
  • 单流映射到单条成员链路的限制
  • 哈希分布不均与聚合带宽利用

链路聚合把多根物理链路绑成逻辑通道,转发时对每个帧的字段(如五元组 IP 源/目的地址、端口号等)做哈希,用哈希值取模后映射到某条成员链路。为保证同一流的所有帧走同一链路(避免乱序),同一流必须哈希到同一成员链路,因此单一大流(单个 TCP 连接)只能占用一条链路的带宽,无法超过单链路速率。聚合带宽只有在大流数量多、哈希分散均匀时才接近总和;若少数大流或哈希字段分布不均,会出现"哈希碰撞",导致某条链路过载而其他链路闲置,聚合总吞吐受限。

五元组哈希是"一致性"与"均衡"之间的权衡:按流哈希保证有序,代价是单流串行。要提高聚合利用率,可改用更细的哈希字段(如加入 L4 端口、支持 ECMP 级 LAG)、启用更多哈希桶,或让应用层建立多条连接;但本质限制是单流无法跨链路并行。

#
★★★

4. 在 EVPN-VXLAN 叠加网络中,VTEP 如何依据本地路由表封装 inner MAC,为什么 BUM 流量需要头端复制或组播?

请说明 EVPN-VXLAN 叠加网络中 VTEP(VXLAN Tunnel EndPoint)如何根据本地路由表为二层帧封装 inner MAC 与 VXLAN 头,以及为什么广播、未知单播和组播(BUM)流量需要头端复制或组播?

  • VTEP 的 VNI 与 MAC/路由表封装逻辑
  • EVPN 控制面(MP-BGP 分发 MAC/IP 路由)与数据面转发
  • BUM 流量在无组播 underlay 下的处理方式

在 EVPN-VXLAN 中,VTEP 通过 BGP 控制面(EVPN 地址族)用 Type-2 路由(MAC/IP 路由)和 Type-3 路由(Inclusive Multicast)把远端主机的 MAC、相连 VTEP 的 IP 分发到各 VTEP,从而在本地 ip-forward 表中建立"远端 MAC → 远端 VTEP IP"的映射。数据转发时,VTEP 收到内层二帧,查本地 EVPN 路由表得到目的 VTEP,将内层 MAC/IP 帧作为 VXLAN payload,加上 VXLAN 头(含 VNI)和 UDP/IP 外层头封装后发出。对于 BUM 流量,因为目的 MAC 没有单播表项,VTEP 无法确定唯一远端,需要把帧复制发送给所有(或组内)远端 VTEP——即头端复制(head-end replication);若 underlay 支持组播,也可使用组播组承载 BUM 流量,VTEP 只需把帧发往组播组即可。

EVPN 的贡献在于把传统数据面泛洪的 MAC 学习搬到了控制面,减少 BUM 流量。但 BUM 仍未根本消除,因为广播/未知单播语义上就是要"发给所有人",所以必须靠头端复制或组播;头端复制在成员多时放大复制倍数,是 EVPN 规模化的主要瓶颈之一。

#
★★★

5. 交换机的 CoS 队列与 WRR/SP 调度在语音/视频/数据混跑场景下的带宽保证与延迟分布如何评估?

请说明交换机上基于 CoS(802.1p)的队列分类以及 WRR/SP 调度算法,在语音、视频、数据混跑时如何评估各队列的带宽保证与延迟分布,并给出配置要点?

  • CoS 队列映射与队列数
  • 严格优先级(SP)与加权轮询(WRR)调度
  • 带宽保证、延迟、抖动与拥塞时的权衡

交换机把入队流量按 CoS 值(802.1p 的 0-7 优先级)映射到若干内部队列(如 8 个),调度器决定出队顺序。SP(严格优先级)保证高优先级队列先被全部发送,低优先级队列在高优先队列拥塞时可能"饿死";WRR 按权重轮询各队列,保证每个队列获得一定比例的带宽,避免饿死,但高优先级队列得不到绝对优先。评估时需同时看:带宽保证(各队列在拥塞下的最低可用带宽)、延迟(高优先级队列应接近零排队延迟)、抖动(语音/视频对抖动敏感)。实际规划通常用 SP 保证语音(紧急,低延迟)、WRR 给视频和数据按权重分配剩余带宽,并重新标记/trust 边缘的 CoS。

没有单一调度器能同时绝对优先和按比例分配,SP 与 WRR 是"低延迟"与"公平带宽"的取舍。语音要求确定性低延迟,故用 SP;视频/数据需公平竞争用 WRR;合理的组合是"SP(语音)+ WRR(视频/数据)"或"SP with priority queue + 加权"。

#
★★★

6. ARP 与 IPv6 NDP 在地址解析、邻居可达性检测和路由器发现上有哪些关键差别?

请对比 IPv4 ARP 与 IPv6 NDP 在地址解析、邻居可达性检测(NUD)和路由器发现(router discovery)三个方面的关键差异?

  • ARP 请求/响应与 NDP 的 NS/NA 消息
  • 邻居不可达检测(NUD)状态机
  • 路由器发现(RS/RA)与默认路由自动配置

ARP 用广播请求查询目标 IPv4 的 MAC,响应为单播,且 ARP 本身不提供可达性检测或路由器发现能力。IPv6 NDP 用 ICMPv6 消息:地址解析用 NS(邻居请求,组播到 solicited-node 组)和 NA(邻居通告),同时具备地址重复检测(DAD)能力;NUD 通过状态机(INCOMPLETE→REACHABLE→STALE→DELAY→PROBE)主动探测邻居可达性,可用单播 NS 探测;路由器发现由路由器和主机之间通过 RS(路由器请求)和 RA(路由器通告)完成,主机可据 RA 自动配置默认路由、前缀和参数。NDP 还支持地址自动配置(SLAAC)与重定向。

NDP 把 ARP 的多个功能(解析、可达性、路由发现、DAD)统一到 ICMPv6 上,且用组播替代广播,并引入完整的可达性状态机,使主机能主动感知邻居失效。这是 IPv6 相比 IPv4 在邻居管理上的系统性改进。

#
★★★

7. PMTUD 与 PLPMTUD 如何发现瓶颈 MTU,ICMP 被过滤时传统 PMTUD 为何形成黑洞?

请说明传统 PMTUD(路径 MTU 发现)与 PLPMTUD(包层面 MTU 探测)如何发现端到端瓶颈 MTU,并解释 ICMP 类型 3 代码 4 报文被过滤时传统 PMTUD 为何会形成"黑洞"?

  • PMTUD 依赖 DF 位与 ICMP"需要分片"反馈
  • PLPMTUD 主动发送探测包、二分探测
  • 黑洞现象与缓解手段

传统 PMTUD 由发送端设置 DF(不分片)位发送大包,若路径上某路由器因包过大需分片,会回 ICMP 类型 3 代码 4(Fragmentation Needed)并携带下一跳 MTU,发送端据此下调报文大小,从而逼近路径最小 MTU。若中间设备的 ICMP 被过滤(出于安全策略),发送端收不到"需要分片"反馈,只能反复发大包,接收端永远收不到完整数据,表现为"连接建立但数据传输卡死/超时",即 PMTUD 黑洞。PLPMTUD 则不再依赖 ICMP,而是主动发送一组自选尺寸的探测包(payload 逐步增大),根据对端是否成功接收(ACK/回包)来二分逼近路径 MTU,常见于 QUIC 等传输层实现。

PMTUD 的脆弱性核心在于"别人替我报告"(依赖中间设备回 ICMP),一旦 ICMP 被过滤就失效。PLPMTUD 把探测改为"自己发、自己判断成功与否",不依赖 ICMP,是现代传输协议(QUIC、DCTCP 场景)更稳健的方案。

#
★★★

8. 排查同网段偶发丢包时,如何区分双工不匹配、环路、MTU 不一致与邻居表溢出?

请给出同网段偶发丢包时,区分双工不匹配、环路、MTU 不一致和邻居表溢出这四类根因的排查思路与诊断手段?

  • 双工不匹配的表现(CRC 错误、FCS 错误、碰撞)
  • 环路与广播风暴/ MAC 震荡
  • MTU 不一致(分片黑洞)与邻居表溢出(ARP/NDP 表满)

首先看接口计数器和错误:双工不匹配通常伴随大量 CRC/FCS 错误、runts、late collisions,且只在两台设备协商不一致时出现,可核对两端 auto-negotiation 与 duplex 配置。环路则表现为广播/组播流量激增、CPU 升高、MAC 表震荡、同一帧被重复收到,可用 STP 状态、广播风暴计数、抓包看重复帧判断。MTU 不一致表现为小包通、大包丢(尤其带 DF 的大包),因为中间设备对超过接口 MTU 的包因 DF 直接丢弃且 ICMP 被过滤,可用 ping 不同 payload 大小定位分界点。邻居表溢出(ARP/NDP 缓存满)表现为新主机无法解析而丢包,但已建立连接的老邻居正常,可查看邻居表的大小与丢弃计数、限制每接口条目数。

四类问题一个在物理层(双工)、一个在拓扑层(环路)、一个在数据面(MTU/分片)、一个在控制面(邻居表)。按"先物理计数器、再拓扑与抓包、再报文大小、再控制面表项"的顺序排查,能快速收敛根因。

#
★★★

9. SCTP 的多宿主路径探测与 PMTUD 联合发现机制相比 TCP 的 ICMP-based PMTUD 有哪些优势?

请说明 SCTP 的多宿主(multi-homing)路径探测与 PMTUD 联合发现机制,相比 TCP 依赖 ICMP 的 PMTUD 有哪些优势?

  • SCTP 多宿主与路径管理
  • SCTP 路径 MTU 探测(基于 ICMP 与主动探测)
  • 多路径冗余与故障切换

SCTP 支持多宿主,一个关联可绑定多个本地/远端 IP 地址,对每条路径独立维护状态并做路径 MTU 发现。SCTP 的 PMTUD 既利用 ICMP 减少包大小,也支持主动探测(类似 PLPMTUD)在一条路径上逐步增大探测包,且探测失败只影响该路径而不整体降级。相比 TCP 单路径 + 依赖 ICMP 的 PMTUD,SCTP 的优势在于:多路径可在主路径故障时快速切换,路径 MTU 逐路径独立维护,探测失败的重选路径能力更强,不会因单一 ICMP 被过滤就形成黑洞而中断整个连接。

TCP 的 PMTUD 黑洞是"单点失败"问题——路径唯一、反馈依赖 ICMP。SCTP 通过多主机/多路径把 MTU 探测与路径选择解耦,一个个路径的探测失败不影响其他路径,体现的是"冗余与解耦"思想。

#
★★★

10. 在 vxlan-overlay 网络中 MTU 黑洞如何导致长连接延迟飙升,运维探测 PMTUD 的可行方案有哪些?

请说明 VXLAN-overlay 网络中由于外层封装头导致 MTU 黑洞如何使长连接延迟飙升,并给出运维上探测 PMTUD 的可行方案?

  • VXLAN 50 字节外层开销与 MTU 黑洞
  • 长连接上 MTU 黑洞的表现(卡顿、重传、延迟飙升)
  • 运维探测 PMTUD 的方法(tcpdump、ping 大小、traceroute、PLPMTUD 工具)

VXLAN 会在内层帧上叠加约 50 字节(VXLAN 8 + UDP 8 + IP 20 + 可选 Ethernet 14)的外层头。若 underlay 物理 MTU 仍是 1500,而 overlay 门限没调,内层大包(如 1500)加上外层头就超过 1500,被 underlay 设备因 DF 直接丢弃,形成 MTU 黑洞。长连接上因数据本来就是大包,黑洞表现为:连接能建立(握手小包通)但传输大包时持续丢包、触发重传和超时,TCP 长连接反复重传导致吞吐骤降、延迟飙升。运维探测方案包括:用 ping 不同 payload 并带 DF 标志定位最大可用 MTU;用 traceroute 找哪一跳丢弃;用 tcpdump 抓包确认是否收到 ICMP fragmentation needed;在主机上设置正确的 veth/overlay MTU 与 MSS clamp;用支持 PLPMTUD 的工具或协议主动探测。

MTU 黑洞导致的"握手通、传输卡"是 overlay 网络最隐蔽的问题之一。根因是 overlay 与 underlay 的 MTU 规划不一致,探测要点是"带 DF 分级 ping + 抓包看 ICMP + 调整 MSS/MTU"。

#
★★★

11. IPv6 邻居缓存(Neighbor Cache)在路由器通告下发 RA 后的生命周期与邻居不可达探测行为如何配置?

请说明 IPv6 邻居缓存(Neighbor Cache)在路由器通告(RA)下发后的生命周期,以及邻居不可达探测(NUD)行为如何配置与影响?

  • Neighbor Cache 表项生命周期与 RA 参数(Reachable Time、Router Lifetime)
  • NUD 状态机与探测
  • 相关 sysctl 与 RA 参数配置

IPv6 邻居缓存存放邻居 IP 到 L2 地址的映射,表项有状态生命周期。路由器通过 RA 通告携带 Reachable Time(默认 30s)、Router Lifetime、转发标志等参数,主机据此更新默认路由与邻居状态。NUD 状态机在 REACHABLE 超时后进入 STALE,若之后有流量则进入 DELAY,再进入 PROBE 并发送单播 NS 探测,探测失败则标记 INCOMPLETE/不可达。相关配置:Linux 上可调 net.ipv6.neigh..base_reachable_time_ms、gc_stale_time、neigh_probe 间隔等;路由器上可配置 RA 的 Reachable Time、Retrans Timer、Router Lifetime 等来控制邻居表生命周期与探测频率。

RA 参数直接决定邻居缓存的刷新节奏与默认路由存活时间,配置不当会导致邻居表过早过期(频繁探测)或长期固化(故障感知慢)。NUD 的 DELAY→PROBE 设计是为了在"可能有流量"时才真正探测,节省探测开销。

#
★★

12. LLDP 与 CDP 报文如何被中间网络设备透传或剥离,安全场景下禁用 LLDP 的代价是什么?

请说明 LLDP 与 CDP 报文在中间网络设备上如何被透传或剥离,以及在安全场景下禁用 LLDP 会带来什么代价?

  • LLDP/CDP 的帧格式与处理(本地处理、透传、剥离)
  • 交换机默认处理行为
  • 禁用 LLDP 的运维代价(拓扑发现、故障诊断)

LLDP 和 CDP 是二层邻居发现协议,帧在数据链路层发送(目的 MAC 为组播/广播地址)。中间设备对这类帧一般"本地接收并处理"而不是透传,即被接收端剥离(不转发),因此 LLDP/CDP 信息只在相邻设备间可见,不会跨越多跳。安全场景下禁用 LLDP 可防止信息泄露(如设备型号、管理接口、VLAN 信息被侦听)和潜在的协议攻击,但代价是失去自动拓扑发现、端口/邻居自动识别、故障定位与自动化运维(如网管自动发现链路、定位端口对端)的能力,需人工维护或改用其他带外方式。

LLDP/CDP 是"逐跳本地"协议,不透明转发,因此只有直连邻居才看到。安全与可运维性是权衡:禁用提升保密性,但降低自动化与排障效率,可考虑用 LLDP 认证、限制复杂度来兼顾。

#
★★

13. 万兆以上链路的 LACP 模式(active/passive)与短帧、巨型帧(jumbo frame)的 MTU 协商如何影响吞吐?

请说明万兆以上链路 LACP 的 active/passive 模式如何协商,以及短帧、巨型帧(jumbo frame)的 MTU 协商如何影响吞吐?

  • LACP active/passive 协商逻辑
  • MTU 协商(jumbo frame)与帧效率
  • 大帧对吞吐的影响

LACP 有 active 与 passive 两种模式:active 主动发送 LACPDU 发起协商,passive 被动应答。两端至少一方为 active 才能建立聚合,两端都 passive 则无法协商形成 LAG。MTU 协商上,万兆以上链路常启用 jumbo frame(如 9000),MTU 越大则每个帧携带的有效载荷占比越高,帧头开销(每帧 20 字节 IP + 14 字节以太网 + 4 字节 CRC 等)相对越小,吞吐越高;同时 CPU 中断次数减少。但 MTU 需全网一致,否则会分片或产生黑洞。吞吐同时受 LACP 哈希均衡与帧效率共同影响。

LACP 模式决定"是否主动发起",MTU 决定"每帧能装多少"。吞吐提升来自两方面:聚合带宽(需 active 协商成功且哈希均匀)和帧效率(大 MTU 减少协议开销)。两者都需正确配置才能达到链路速率上限。

#
★★

14. 数据中心里 jumbo frame 配 9000 后跨 VLAN 仍出现分片,常见瓶颈是否在 vSwitch/物理 NIC offload?

请分析数据中心配置 jumbo frame(9000)后跨 VLAN 仍出现分片的现象,判断常见瓶颈是否在 vSwitch 或物理 NIC offload?

  • jumbo frame 与 MTU 一致性
  • vSwitch(如 OVS)与 NIC offload 对 MTU 的处理
  • 分片产生的根因

配置 jumbo frame 9000 后仍出现分片,说明路径上存在某处 MTU 小于 9000,常见瓶颈主要在 vSwitch 的虚拟端口(veth/vhost 接口)默认 MTU 未同步提升、物理 NIC 的 MTU 未设置 9000、VLAN 或隧道接口的 MTU 未调整,而不是"offload"本身。offload(如 TSO/GRO)是在软硬件层面把大包切分/合并,不会凭空产生分片;若 offload 与实际 MTU 不匹配或配置错误,可能造成伪分片或校验错误,但分片根因通常是"接口 MTU 不一致"——某跳接口仍是 1500,导致超过 1500 的包被分片或丢弃。

分片根因是"路径上最小 MTU 小于报文大小",vSwitch 虚拟端口、物理 NIC、隧道都对 MTU 有影响,但 offload 不是分片的原因本身。排查时应逐接口核对 MTU,并检查 vSwitch 数据面是否开启分片支持。

#
★★

15. 1Q 标签中的 PCP、DEI、VID 各自承担什么作用,native VLAN 配置不一致会产生什么现象?

请说明 802.1Q 标签中 PCP、DEI、VID 三个字段的作用,以及 native VLAN 配置不一致时会产生什么现象?

  • PCP(优先级)、DEI(丢弃 eligible)、VID(VLAN ID)语义
  • native VLAN 与 untagged 帧
  • native VLAN 不匹配的后果(VLAN 错绑、安全穿越)

802.1Q 标签共 4 字节:TCI 中的 PCP(3 bit,0-7,表示 CoS 优先级,用于 QoS 分类)、DEI(1 bit,标识帧是否可被丢弃,用于拥塞丢弃、与 PCP 配合)、VID(12 bit,标识 VLAN ID,0-4095,其中 0 表示优先级标签、4095 保留)。native VLAN 是 trunk 上不带标签(untagged)传输的 VLAN:交换机对 native VLAN 的帧不加标签。若两端 native VLAN 配置不一致,一端的 native 帧在另一端被当作其 native VLAN 之外的帧解释,导致 VLAN 错绑、流量被错误划分到错误的广播域,甚至可能跨越不同 VLAN 造成安全越权(VLAN hopping 的一种)。

PCP/DEI/VID 分别承担 QoS 优先级、丢弃决策和广播域标识,三者正交。native VLAN 的关键是不一致时"无标签帧被错误解释",因为它没有标签信息,只能靠本地配置推断,因此必须两端一致并配合安全措施(如关闭未用端口、禁用 native VLAN 上的协议)。

#
★★

16. MAC 地址表的 aging timer、静态绑定与 MAC ACL 在防 MAC 漂移与 ARP 欺骗上的工程差异是什么?

请对比 MAC 地址表的 aging timer、静态绑定(static/sticky MAC)与 MAC ACL 三者在防止 MAC 漂移和 ARP 欺骗上的工程差异?

  • aging timer 动态学习与老化
  • 静态/粘性 MAC 绑定
  • MAC ACL 过滤与端口安全

aging timer 是动态 MAC 表项的老化时间,正常老化让表项随网络变化自动更新,但它本身不防护,MAC 漂移时动态表项会随攻击源不断改写,无法阻止。静态绑定(static MAC 或 sticky MAC + 端口安全)把指定 MAC 固定绑定到某端口,动态表项只能出现在绑定端口,其他端口出现相同 MAC 即被拒绝,从而有效阻止 MAC 漂移和 ARP 欺骗(攻击者伪造 MAC 会被拦截)。MAC ACL 则在转发层面按 MAC 地址/协议类型过滤帧,可精确允许/拒绝特定 MAC 的流量,但更偏向访问控制而非"绑定地址到端口",且不直接维护 MAC 表。工程上常组合使用:静态绑定防漂移 + MAC ACL 做精细过滤 + 端口安全限制学习数量。

三者层次不同:aging timer 是正常老化机制(无防护),静态绑定是"地址-端口契约"(防漂移核心),MAC ACL 是"流量过滤"(访问控制)。ARP 欺骗的根治靠静态绑定 + IPv6 的 SEND 或 DHCP snooping 等联动。

#
★★

17. 生成树的 PVST、RSTP、MSTP 三种模式在 VLAN 数量与收敛时间上的取舍,根桥选举的优先级向量如何计算?

请对比 PVST、RSTP、MSTP 三种生成树模式在 VLAN 数量与收敛时间上的取舍,并说明根桥选举的优先级向量如何计算?

  • PVST/RSTP/MSTP 的机制与 VLAN 映射
  • 收敛时间与资源开销
  • 根桥选举优先级向量(Bridge ID、成本)

PVST 为每个 VLAN 运行一个独立的生成树实例,收敛依赖 STP 的传统状态机(可到 30s+),VLAN 多时实例多、资源开销大,但可实现按 VLAN 负载均衡。RSTP 是快速收敛的生成树(proposal/agreement 秒级收敛),通常只运行一个实例(或 Cisco 的 RSTP 按 VLAN 变体),但所有 VLAN 共享同一棵拓扑,无法按 VLAN 分流。MSTP 把多个 VLAN 映射到若干个 MST 实例(多实例),每个实例一棵树,兼顾了"实例数量可控"与"按 VLAN 分流",收敛可用 RSTP 的快速机制。根桥选举按优先级向量比较:Bridge ID(优先级 0-65535 + MAC 地址),优先级值小者优先,相同时比较 MAC 地址;路径成本用于比较到根桥的路径,选根端口。

三者是"实例数量"与"收敛速度 / 资源"的权衡:PVST 多实例但慢且耗资源,RSTP 快但单实例,MSTP 折中(多实例 + 快速收敛)。根桥选举的本质是比较 Bridge ID 的字典序。

#
★★

18. 当物理端口因风暴控制 storm-control 被自动 shutdown 后,恢复方式、抑制阈值与日志告警应当如何设置?

请说明物理端口因风暴控制(storm-control)触发自动 shutdown 后的恢复方式,以及抑制阈值和日志告警应该如何设置?

  • storm-control 阈值与动作(shutdown)
  • 自动恢复(errdisable recovery)
  • 阈值、日志与告警配置

storm-control 通过限制广播/组播/未知单播的速率来防止风暴,超过阈值后可配置动作(如 shutdown 端口)。被 shutdown 后,恢复方式包括:手动恢复(no shutdown 或 shutdown 后重新启用)、errdisable recovery(配置自动恢复时间,如 300 秒后自动重新启用端口)。阈值应按实际流量基准设置,避免误杀正常流量,通常设一个上限(如带宽的 30%-50%)并启用恢复;日志告警应开启端口状态变更日志、errdisable 原因记录和 SNMP 告警,使风暴触发与恢复可追溯、可监控。

风暴控制是"防患于未然"的自我保护,但误触发会中断业务,因此阈值要留余量、恢复要自动化、告警要可见。自动恢复(errdisable recovery)平衡"持续阻断"与"自动化恢复"。

#
★★

19. MAC-in-MAC(802.1ah)与 MAC-over-802.1Q(Q-in-Q)在运营商接入网中的封装层级与广播域控制差别是什么?

请对比 MAC-in-MAC(802.1ah)与 MAC-over-802.1Q(Q-in-Q)在运营商接入网中的封装层级与广播域控制差别?

  • Q-in-Q 的双层 802.1Q 标签
  • 802.1ah 的运营商 MAC 封装
  • 广播域隔离与规模

Q-in-Q(802.1ad)在客户帧上叠加一层运营商 VLAN 标签,形成 S-Tag(服务)与 C-Tag(客户)两层标签,客户 MAC 仍可见,广播域按运营商 VLAN 划分,可支撑几千个客户 VLAN,但客户 MAC 的规模对运营商网络可见,扩展性有限。MAC-in-MAC(802.1ah,PBB)则把整个客户帧(含客户 MAC)封装进运营商 MAC 帧(B-MAC/B-VID),运营商网络只看到运营商 MAC,实现客户与运营商 MAC 空间隔离,广播域按运营商 B-VID 控制,规模更大、更安全,广泛用于运营商以太网接入。差别核心:封装层级(Q-in-Q 只加一层标签,802.1ah 加完整运营商 MAC 头)与广播域/MAC 可见性控制。

Q-in-Q 是"标签叠加",客户 MAC 透传;802.1ah 是"隧道封装",客户 MAC 被隔离在运营商 MAC 之后。后者牺牲一点封装开销换取规模与隔离性,是运营商级接入的关键。

#
★★

20. Linux 的 neigh_table GC 触发条件与 neigh_unreachable_timer 在 ICMP 不可达时的状态推进流程是什么?

请说明 Linux 内核 neigh_table 的垃圾回收(GC)触发条件,以及 neigh_unreachable_timer 在邻居不可达(ICMP 不可达)时的状态推进流程?

  • neigh_table GC 与 gc_thresh 参数
  • 邻居状态机与 unreachable timer
  • 不可达时的状态推进与回收

Linux 的邻居表(neigh_table)有 gc_thresh1/2/3:表项数超过 gc_thresh1 时开始 GC,超过 gc_thresh2 时强制 GC,超过 gc_thresh3 时拒绝新邻居并报错。GC 触发条件还包括表项在 STALE 状态的定时老化。邻居不可达时,neigh_unreachable_timer 控制状态推进:REACHABLE 超时→STALE→DELAY→PROBE(发送单播 NS/ARP 探测),PROBE 多次(默认 3 次)无回应则进入 FAILED(不可达)并最终被回收。若收到 ICMP 不可达(如 host unreachable),会加速将邻居置为不可达并触发 GC 回收。

GC 是"容量控制"(防表溢出),unreachable_timer 是"健康管理"(探测与回收)。两者配合决定邻居表在可控规模内保持新鲜,参数(gc_thresh、gc_stale_time、retries)影响故障感知速度与表容量。

#
★★

21. IPv6 的 DAD(Duplicate Address Detection)如何用 NS/NA 完成 SLAAC 地址冲突检测,冲突时是否会上线?

请说明 IPv6 的 DAD(重复地址检测)如何通过 NS/NA 完成 SLAAC 地址冲突检测,以及发生冲突时地址是否会上线?

  • DAD 的 NS/NA 过程
  • 地址状态(tentative→preferred)
  • 冲突处理与不上线

DAD 在 SLAAC 形成的新地址上线前进行:主机把地址标记为 tentative 状态,向该地址的 solicited-node 组播发送 NS(邻居请求),若在指定时间内(默认 1 秒)收到任何 NA(邻居通告)或匹配的 NS 回应,说明网络上已有同名地址,则认为冲突,地址不会上线(保持 tentative/不可用,并记录重复)。若静默无回应,DAD 通过,地址转为 preferred/激活状态,可用于通信。DAD 是 IPv6 地址自动配置的必选步骤,防止地址冲突。

DAD 用"组播 NS + 监听 NA"来问"这地址有人用吗",冲突时"宁可不用"以保证地址唯一性。类似 IPv4 的 ARP 探测但更规范,且是 SLAAC 流程的组成部分。

#

22. 网卡 checksum/GSO/GRO 卸载为何会让抓包中的长度与校验和看似异常?

请说明网卡 checksum/GSO/GRO 卸载机制为何会让抓包工具看到的包长度与校验和看似异常?

  • checksum offload(TX/RX)与部分校验和
  • GSO 大包、GRO 合并
  • 抓包假象与校验

网卡硬件卸载(offload)把部分处理交给 NIC:checksum offload 让网卡在发送时计算校验和、接收时验证,因此抓包时 TCP/UDP 校验和字段可能为 0 或未计算(TX 侧),Wireshark 会提示校验和错误——这是假阳性。GSO 让内核把大报文(如 64KB)交给网卡分段,抓包看到的是"未分段的大包"而非实际线上小包,长度异常;GRO 则把接收侧多个小包合并成一个大包,抓包看到合并后的包,与实际线上帧不符。因此抓包看到的长度/校验和与线上实际帧不同。

offload 把"标准逐包处理"外包给硬件,抓包点(在驱动/内核层)看到的是"待卸载"或"已合并"的包,而非线上原始帧。校验时应关闭 offload 或忽略校验和提示,用线缆/tap 抓包才能看到真实帧。

#

23. GRE、IPsec、VXLAN 在 MTU 1500 网络上的封装开销分别是多少,对 MSS 与 PMTUD 探测的影响是什么?

请说明 GRE、IPsec、VXLAN 在 MTU 1500 网络上的封装开销分别约为多少,并分析它们对 MSS 与 PMTUD 探测的影响?

  • 各封装开销(GRE 24、IPsec 约 50+、VXLAN 约 50)
  • MSS 下调与 MTU 规划
  • PMTUD 探测影响

在普通以太网(MTU 1500)上:GRE 封装约加 24 字节(20 IP + 4 GRE),IPsec 隧道模式约加 50 字节以上(20 内层 IP + 20 外层 IP + IV/认证等,ESP 一般 50-60+),VXLAN 约加 50 字节(14 外层以太网 + 20 IP + 8 UDP + 8 VXLAN,若在 IP 上则约 50)。这些开销意味着内层 MTU 必须相应下调,否则大包超过 1500 会被分片或丢弃。对 MSS 的影响:TCP 的 MSS 是 MTU 减 40(IP+TCP 头),overlay 后应再减封装开销,发送端应设置 MSS clamp 或按内层 MTU 计算 MSS。对 PMTUD:封装增加后,若外层 DF 位设置且 ICMP 被过滤,PMTUD 更容易失效形成黑洞,需主动探测或调整 MTU。

封装开销是"每包固定成本",吞吐越高包越大,开销占比较小;但 MTU 规划必须把外层头算进去。MSS 需按内层 MTU 下调,PMTUD 在 overlay 下更脆弱。

#

24. 抓包工具(Wireshark)看到的校验和错误提示在 NIC 卸载场景下为何属于假阳性,如何正确校验?

请说明 Wireshark 看到的校验和错误提示在 NIC 卸载场景下为何属于假阳性,并给出正确校验校验和的方法?

  • checksum offload 与抓包假阳性
  • 校验和计算位置
  • 正确校验方法

当网卡启用 checksum offload 时,发送方向校验和由网卡硬件计算,驱动在把包交给网卡前可能把校验和置 0 或留空,Wireshark 抓到的就是这个"未计算"的包,于是提示校验和错误(Checksum errors),但实际线上网卡会算好校验和,因此属假阳性。接收方向,网卡可能已校验并通过后才把包交给内核,Wireshark 看到的校验和是"已验证通过"的,也不会错。正确校验方法:在 Wireshark 中关闭校验和验证(Edit→Preferences→Protocols→TCP/UDP 取消 checksum validation),或使用带校验的 tap/镜像抓包,或关闭 offload(ethtool -K eth0 tx off rx off)后再抓包,并用 Wireshark 的 IP/TCP 校验和验证功能核对。

假阳性源于"抓包点在校验和计算之前/之后",而非校验和真的错。判断关键是看是否启用了 offload 以及抓包位置(驱动层 vs 线上)。关闭 offload 或用硬件 tap 才能得到可验证的校验和。