2. 报文进入与解析引擎

报文进入交换芯片的第一步,并不是查表,而是“被正确接收并翻译成芯片内部可识别的字段”。在 Broadcom 这类高密度交换芯片中,入端口处理、PHY/MAC 层适配和 Parser 解析共同构成报文进入流水线的入口段。理解这一段,才能解释为什么同一份 ACL 在不同端口上表现不同、为什么某些报文会被丢弃或误分类。

一、入端口处理:从 SerDes 到内部帧

物理端口首先由 SerDes 完成串并转换与时钟恢复,随后进入 PHY 层完成编码解码(如 64b/66b)、对齐与通道绑定。以 100G 端口为例,常见形态是 4×25G 或 2×50G 通道,芯片内部按 lane 对齐后重组为统一码流。PHY 之上是 MAC 层,负责前导码/SFD 识别、FCS 校验、帧长检查以及流控(Pause/PFC)处理。

MAC 之后进入入端口处理模块,典型动作包括:

  • 端口/VLAN 归属判定:为无标签帧打上端口默认 VLAN(PVID),有标签帧按 TPID 识别。
  • 入向统计与镜像:更新 RMON 计数器,按入端口镜像规则复制到监控端口。
  • 端口级过滤:如 ingress filtering、STP 状态(Discarding/Learning/Forwarding)检查。
  • 元数据生成:为报文附加内部头(通常称 Module Header 或 HiGig Header),携带源端口、优先级、目的端口位图等。

这一步的关键是:Parser 看到的不是原始以太网帧,而是带有内部元数据的内部帧。元数据决定了后续解析的上下文,例如端口默认 VLAN、是否信任 DSCP、是否启用隧道解析。

二、PHY/MAC 适配中的常见差异

不同端口类型对报文的“预处理”不同,直接影响 Parser 的输入。例如:

端口类型典型适配动作对 Parser 的影响
100G CR4FEC 解码、lane 对齐FEC 纠错后帧才可见,错误帧被丢弃
25G 光口RS-FEC 或 BASE-R FECFEC 模式不匹配会导致链路 up 但丢包
10G 电口PHY 自协商、速率适配自协商失败时端口可能处于半双工,影响流控
堆叠口HiGig 封装/解封装内部头携带源模块 ID,Parser 需识别堆叠标签

实际排障中,若端口 up 但业务不通,应优先确认 PHY 层 FEC、自协商和 MAC 层 FCS 计数,而不是直接怀疑 Parser。因为 Parser 只处理“已经通过 MAC 校验”的帧。

三、Parser 对 L2/L3/L4 字段的提取

Parser 的核心任务是从帧头开始逐层解析,提取后续查表所需的关键字段。以典型以太网帧为例,解析顺序为:

  1. L2:目的 MAC、源 MAC、EtherType/TPID。若 EtherType=0x8100,则识别为 VLAN 标签,继续读取 VID 与内层 EtherType。
  2. L3:根据 EtherType 判断 IPv4(0x0800)、IPv6(0x86DD)或 ARP(0x0806)。IPv4 提取源/目的 IP、协议号、TOS/DSCP、TTL;IPv6 提取源/目的地址、Next Header、Traffic Class。
  3. L4:根据协议号判断 TCP(6)、UDP(17)、ICMP(1)。TCP/UDP 提取源/目的端口;若存在选项或分片,需按偏移量计算 L4 头位置。
  4. 隧道:若识别到 VXLAN(UDP 4789)、GRE 或 Geneve,则继续解析内层帧,提取内层 L2/L3/L4 字段。

解析结果通常写入解析结果描述符(Parse Result),供后续 ACL、L3 路由、ECMP、QoS 等模块使用。例如,一个 VXLAN 报文可能同时提取外层五元组和内层五元组,分别用于隧道终结和租户内转发。

报文进入与解析流水线(入端口 → PHY/MAC → Parser → 查表) 入端口处理 PVID / 端口过滤 镜像 / 统计 PHY 层 SerDes / FEC 64b/66b 对齐 MAC 层 FCS 校验 Pause / PFC Parser 解析引擎 L2 / L3 / L4 字段提取 隧道识别与内层解析 内部帧结构: 内部元数据 L2 头 L3 头 L4 头 Payload FCS 解析结果(Parse Result) • 源/目的 MAC、EtherType、VID • 源/目的 IP、协议号、DSCP、TTL • 源/目的端口(TCP/UDP) • 隧道类型与内层五元组 • 解析异常标志(Malformed / Unknown) 后续查表与转发 • ACL / QoS 分类 • L2 桥接 / L3 路由 • ECMP / 隧道终结 • 出端口队列调度 解析异常 → 丢弃 / 送 CPU Malformed / Unknown EtherType

四、可编程解析器与固定解析器的差异

固定解析器(Fixed Parser)按芯片预设的协议模板解析,支持标准以太网、VLAN、IPv4/IPv6、TCP/UDP、GRE、VXLAN 等常见组合,优点是延迟低、资源固定、行为可预测。可编程解析器(Programmable Parser)允许通过配置或微码定义新的解析图(Parse Graph),支持自定义 EtherType、私有隧道封装或非标准协议偏移。

两者的核心差异体现在:

  • 灵活性:可编程解析器可新增协议节点;固定解析器只能使用已有模板。
  • 资源占用:可编程解析器消耗 TCAM/微码资源,可能影响 ACL 表项容量。
  • 调试复杂度:固定解析器行为稳定,可编程解析器需验证解析图是否覆盖所有报文路径。
  • 性能:固定解析器通常流水线更深但更确定;可编程解析器在复杂封装下可能增加解析延迟。

工程中常见做法是:标准数据中心协议用固定解析器,私有隧道或实验性协议用可编程解析器扩展,并通过解析图版本管理避免配置漂移。

五、常见解析异常与调试方法

解析异常通常表现为报文被错误分类、丢弃或送 CPU。常见原因包括:

  1. EtherType 未识别:如私有标签 0x88A8 未在解析图中注册,导致 VLAN 被跳过,后续 L3 解析偏移错误。
  2. 隧道嵌套过深:超过解析器最大深度,内层字段无法提取,ACL 匹配失败。
  3. 分片报文:IPv4 分片后 L4 头不在首片,若解析器未处理分片偏移,TCP/UDP 端口提取为 0。
  4. 畸形帧:帧长小于最小以太网帧或 FCS 错误,MAC 层已丢弃,Parser 不会看到。
  5. 配置不一致:端口信任模式(trust L2/L3)与解析结果不匹配,导致 QoS 映射错误。

调试时建议按以下顺序进行:

1. 查看端口计数器:rx_fcs_err、rx_align_err、rx_pause 是否异常增长
2. 确认 PHY 状态:FEC 模式、自协商结果、lane 映射
3. 检查 MAC 层:是否因 FCS 或帧长丢弃
4. 查看 Parser 统计:parse_error、unknown_ethertype、tunnel_depth_exceed
5. 使用镜像或 sFlow 抓取入端口原始帧,核对解析偏移
6. 若为可编程解析器,导出解析图并逐节点验证 EtherType/协议号匹配
实际排障中,若 ACL 规则未命中,先确认 Parser 是否提取到了预期字段。例如 VXLAN 内层 ACL 需要解析器支持内层五元组提取;若解析图未启用内层解析,ACL 只能匹配外层字段。
修改可编程解析器配置后,必须重新验证所有依赖该解析结果的 ACL、QoS 和路由策略。解析图变更可能改变字段偏移,导致原有规则失效。

总结来说,入端口处理决定报文的“身份上下文”,PHY/MAC 适配决定报文能否“完整到达”,Parser 决定报文“被翻译成什么字段”。三者环环相扣,任何一环异常都会在后续查表阶段表现为“规则不生效”或“流量被误丢”。掌握这条入口链路,是后续学习 ACL、L3 路由和隧道转发的基础。