深度来源笔记:IEEE 802.1Qci 按流过滤与监管
来源信息
- 标题:IEEE Standard for Local and metropolitan area networks, Bridges and Bridged Networks, Amendment 28: Per-Stream Filtering and Policing
- 标准号:IEEE Std 802.1Qci-2017
- 发布时间:2017-10-06
- 原始文件:
raw/802.1Qci-2017.md - 学习定位:TSN 中的接收侧按流过滤、门控、监管和异常流封锁
- 关联概念:概念_802.1Qci_PSFP、概念_802.1Qci_stream_filter、概念_802.1Qci_stream_gate、概念_802.1Qci_flow_meter、概念_802.1Qci_stream_gate_control、概念_802.1Qci_IPV
这篇资料解决什么问题
802.1Qci 解决的是“已经进入桥的帧,如何按具体 stream 做过滤和监管”。如果 Qbv 重点在发送侧控制“什么时候发”,Qci 重点就在接收侧控制“谁能进来、什么时候能过、超出流量轮廓时如何处理、过了以后按什么 traffic class 排队”。
它引入的能力叫 PSFP,即 Per-Stream Filtering and Policing。PSFP 不是只看端口,也不是只看 VLAN,而是依赖 802.1CB Clause 6 的 stream identification,把 stream_handle 带入过滤和监管逻辑。
阅读前需要知道什么
802.1CB 的 stream identification
Qci 明确要求使用 802.1CB 的 Stream identification function。stream_handle 是 PSFP 决策的输入之一。没有 stream_handle,PSFP 就退化不成真正的 per-stream。
802.1Q 的 forwarding / queueing
Qci 最终仍然落到 802.1Q 的 traffic class 和 queueing。它新增的是进入 queue 之前的一组过滤、门控、监管动作,以及通过 IPV 影响后续 traffic class mapping。
Policing 与 shaping 的差异
Qav/Qbv 更偏发送侧 shaping/scheduling;Qci 更偏接收侧 policing/filtering。policing 常常会丢弃或标记异常流量,而不是像 shaper 那样只是延后发送。
原文结构地图
Clause 5: Conformance
Clause 5 增加 PSFP 对 VLAN Bridge component、MAC Bridge component 和 end station 的要求。学习重点是知道 PSFP 可作为桥和端站能力出现。
Clause 8.6.5: Flow classification and metering
这是 PSFP 的核心入口。它引入 connection_identifier,并新增 8.6.5.1,定义 per-stream filtering and policing。
Clause 8.6.5.1.1: Stream filter instance table
stream filter 是有序列表,按 stream_handle 和 priority 匹配。匹配到的 filter 决定后续 stream gate、filter specification、flow meter 和计数器。
Clause 8.6.5.1.2: Stream gate instance table
stream gate 决定帧是否能通过,还可以提供 IPV。它也有异常锁定类参数,例如 gate closed 时收到帧、interval octets 超额时是否关闭。
Clause 8.6.5.1.3: Flow meter instance table
flow meter 基于 MEF 10.3 风格参数监管流量,包括 CIR、CBS、EIR、EBS、CF、CM、DropOnYellow、MarkAllFramesRed。
Clause 8.6.6.1: PSFP queuing
如果 PSFP 通过的 frame 带有非 null IPV,则用 IPV 代替 frame priority 来决定 traffic class。除此以外,802.1Q 原有 queuing 动作不变。
Clause 8.6.10: Stream gate control state machines
Qci 复用 Qbv 的 state machine 框架,但把操作对象换成 stream gate,并定义 ExecutePSFPOperation()、SetPSFPGateStates()、PSFPListPointer 等替代版本。
Clause 12.31: Managed objects for PSFP
这里是管理对象主干,定义 Stream Parameter Table、Stream Filter Instance Table、Stream Gate Instance Table、Flow Meter Instance Table。
Clause 17: MIB
这里定义 IEEE8021-PSFP-MIB,将 12.31 的管理对象映射到 SNMP 管理接口。
核心概念表
| 概念 | 直观理解 | 在 Qci 中的作用 |
|---|---|---|
| PSFP | 按流过滤与监管 | Qci 的总能力 |
| stream_handle | 被识别出的流句柄 | stream filter 的主要匹配输入 |
| priority specification | 优先级匹配条件 | 和 stream_handle 一起选 filter |
| stream filter | 有序过滤规则 | 决定帧匹配哪套 PSFP 动作 |
| stream gate | 流级开关 | 决定帧是否通过 |
| flow meter | 流量监管器 | 判断是否超出 profile |
| Maximum SDU size | 单流最大 SDU 限制 | 超长帧过滤 |
| IPV | internal priority value | 可覆盖 frame priority 决定 traffic class |
| IntervalOctetMax | 某时间间隔允许通过的最大 octets | stream gate control 的字节预算 |
| GateClosedDueToInvalidRx | closed gate 收到帧后的异常标记 | 用于检测非法接收时段 |
| GateClosedDueToOctetsExceeded | octet 预算超额标记 | 用于检测超出门控字节预算 |
| MarkAllFramesRed | meter 触发后的强制异常状态 | 可导致后续帧被丢弃 |
机制拆解
1. 用 stream identification 找到处理对象
PSFP 的第一步不是过滤,而是知道帧属于哪条 stream。Qci 依赖 802.1CB 的 Stream identification function,把 stream_handle 当作后续匹配和控制输入。
2. stream filter 是 ordered match
stream filter table 是 ordered list。每条 filter 包含 stream_handle specification、priority specification、stream gate instance、filter specification 和 counters。如果一帧匹配多个 filter,选择列表中最早的那个。
这个规则意味着 filter 顺序本身就是策略的一部分。wildcard filter 放在前面会吞掉后面的更具体规则。
3. stream gate 负责“时间或状态上是否允许通过”
stream gate 有 open / closed 两种状态。open 时允许帧通过,closed 时丢弃。它还可以在异常条件下锁住,例如 gate closed 时收到帧,或者某时间间隔内通过 octets 超出预算。
这让 PSFP 既能表达普通门控,也能表达“收到不该来的帧就进入故障态”的安全策略。
4. flow meter 负责“流量轮廓是否合规”
flow meter 使用 CIR/CBS/EIR/EBS 等参数对流量进行监管。它可以把帧标记为 drop eligible,也可以按配置丢弃 yellow/red 行为。
学习时要把 flow meter 理解为接收侧带宽合规性检查,而不是发送侧整形器。
5. IPV 把过滤结果接到排队
frame 通过 stream gate 后,如果关联了非 null IPV,那么后续 traffic class mapping 使用 IPV,而不是原始 priority。这样 PSFP 能把“这条流通过了哪扇门”影响到“它进入哪个 egress queue”。
6. stream gate control 复用 Qbv 状态机框架
Qci 的 Clause 8.6.10 直接把 Qbv Clause 8.6.9 的 state machines 作为基础,再替换 ExecuteOperation、SetGateStates、ListPointer、Admin/OperGateStates 等定义。这说明 Qci 和 Qbv 在门控时序上是同一类抽象,但作用点不同。
关键流程 / 数据路径 / 控制路径
数据路径
flowchart TD A["Received frame"] --> B["802.1CB stream identification"] B --> C["stream_handle + priority"] C --> D["ordered stream filter lookup"] D --> E["stream gate"] E --> F{"gate open?"} F -- "no" --> G["drop / counter / optional lock state"] F -- "yes" --> H["filter specifications"] H --> I["flow meter"] I --> J["IPV / priority decision"] J --> K["traffic class mapping"] K --> L["802.1Q queuing"]
控制路径
flowchart TD A["management config"] --> B["Stream Filter Instance Table"] A --> C["Stream Gate Instance Table"] A --> D["Flow Meter Instance Table"] C --> E["PSFP gate control list"] E --> F["Cycle Timer / List Execute / List Config"] F --> G["PSFPOperGateStates"] F --> H["OperIPV"] F --> I["IntervalOctetsLeft"]
章节级拆解
Clause 5 Conformance
这里说明支持 PSFP 的实现要支持 8.6.5.1、8.6.6.1、8.6.10、12.31 和 MIB 中对应对象。它把 PSFP 从“一个算法”提升为“实现可声明支持的能力集”。
Clause 8.6.5 Flow classification and metering
Qci 在这里把 connection_identifier 引入 flow classification and metering 的上下文。这里说明 PSFP 不是额外外挂,而是进入 802.1Q forwarding process 的 ingress / metering 逻辑。
Clause 8.6.5.1 Per-stream filtering and policing
这是 PSFP 机制总入口。它声明 PSFP 需要 802.1CB stream identification,且由三张表支撑:stream filter、stream gate、flow meter。
Clause 8.6.5.1.1 Stream filter instance table
这一节定义 filter 的组成:filter id、stream_handle spec、priority spec、stream gate id、filter specs、counters、oversize blocking 参数。
学习重点:filter 是 ordered list;匹配多个时选最早的;没有匹配时按不支持 PSFP 的情况继续处理,除非你显式放一个最终 wildcard drop filter。
Clause 8.6.5.1.2 Stream gate instance table
stream gate 不只是 open/closed。它还能提供 IPV、invalid receive detection、octets exceeded detection,以及可选 stream gate control list。
学习重点:stream gate 可以从一个简单门变成一个具备故障检测和时序控制的流级状态对象。
Clause 8.6.5.1.3 Flow meter instance table
flow meter 的参数来自 MEF 10.3 的带宽 profile 思路。Qci 使用一个简化功能算法。学习时关注 CIR/CBS/EIR/EBS/DropOnYellow/MarkAllFramesRed 的工程语义。
Clause 8.6.6.1 PSFP queuing
如果 frame 通过的 stream filter 关联的 IPV 非 null,则 IPV 替代原始 priority 决定 traffic class。除此之外,原有 queuing 不变。
学习重点:Qci 可以改变排队类别,但不会改变所有后续 802.1Q 行为。
Clause 8.6.10 Stream gate control state machines
Qci 在这里复用 Qbv 的三台状态机,并定义 PSFP 版本的操作和变量。ExecutePSFPOperation() 处理 SetGateAndIPV,同时设置 gate state、IPV、TimeInterval、IntervalOctetsLeft。
Clause 12.31 Managed objects
这是运维和实现最重要的结构化入口。PSFP 的所有核心对象都在这里表格化:支持数量、filter rows、gate rows、meter rows、control list、counters、fault state。
Clause 17 MIB
IEEE8021-PSFP-MIB 将这些对象映射到网管。学习机制时可以把它看成 12.31 的管理接口化版本。
关键定义的定位
- PSFP 总机制:Clause 8.6.5.1
stream_handle依赖:Clause 8.6.5.1,引向 IEEE 802.1CB Clause 6- Stream filter instance table:Clause 8.6.5.1.1、12.31.2
- Stream gate instance table:Clause 8.6.5.1.2、12.31.3
- Flow meter instance table:Clause 8.6.5.1.3、12.31.4
- PSFP queuing:Clause 8.6.6.1
- Stream gate control state machines:Clause 8.6.10
SetGateAndIPV:Table 8-7、Clause 8.6.10.1- IPV:Clause 8.6.5.1.2、8.6.6.1、12.31.3.3
- IEEE8021-PSFP-MIB:Clause 17.7.24
术语之间的依赖关系
flowchart TD A["802.1CB stream identification"] --> B["stream_handle"] B --> C["stream filter"] D["priority"] --> C C --> E["stream gate"] E --> F["filter specifications"] F --> G["flow meter"] E --> H["IPV"] H --> I["traffic class mapping"] E --> J["stream gate control list"] J --> K["PSFP state machines"]
与其他来源的关系
- 来源_IEEE_802.1CB_可靠性帧复制与消除_deep_dive 提供
stream_handle和 stream identification 背景。 - 来源_IEEE_802.1Q-2005_虚拟桥接局域网_deep_dive 提供 traffic class、queueing、forwarding process 背景。
- 来源_IEEE_802.1Qbv_增强调度流量_deep_dive 提供门控状态机和 control list 的近亲机制。
- 概念_802.1Q_Forwarding_Process 说明 PSFP 最终仍嵌入桥接转发流程。
容易混淆的点
Qci 不是 Qbv
Qbv 控制发送侧 queue 的 transmission gate。Qci 控制接收侧 stream 的 stream gate。两者都使用 gate 概念,但对象和位置不同。
stream filter 不是 flow meter
stream filter 负责匹配和选择动作;flow meter 负责检查流量 profile。一个是规则匹配,一个是速率/突发监管。
IPV 不改写帧上的 priority
IPV 用于内部 traffic class mapping。它不是简单把帧里的 PCP 改掉。原文也强调 IPV 只用于决定 traffic class,其它用途仍使用 received priority。
未匹配 stream 不一定丢弃
如果没有匹配任何 stream filter,默认按不支持 PSFP 的情况处理。要丢弃未匹配流,需要显式配置最终 wildcard filter 并指向关闭的 gate。
例子 / 场景
场景 1:只允许某个周期内到达的控制流通过
控制器预期某条 stream 只在固定窗口到达。stream gate 在窗口内 open,在窗口外 closed。如果窗口外收到帧,可启用 GateClosedDueToInvalidRx,让 gate 进入需要管理动作清除的异常状态。
场景 2:限制某条流的突发
stream filter 匹配某个 stream_handle,并关联 flow meter。meter 使用 CIR/CBS 限制长期速率和短期突发。超过 profile 的帧可以被丢弃或设置 drop_eligible。
场景 3:通过 IPV 改变后续排队
某流进入时携带的 priority 不适合后续内部排队。stream gate 可以设置 IPV,使通过 gate 的帧按内部优先级进入特定 traffic class。
场景 4:配置最终兜底丢弃
如果希望未匹配任何具体规则的流都被丢弃,可以在 stream filter table 末尾放一条 stream_handle 和 priority 都 wildcard 的规则,并把它指向一个永久 closed 的 stream gate。
阅读这篇标准时的推荐顺序
- 先读 Clause 8.6.5.1,建立三张表的总体图。
- 读 8.6.5.1.1,理解 stream filter 的 ordered matching。
- 读 8.6.5.1.2,理解 stream gate、IPV 和异常状态。
- 读 8.6.5.1.3,理解 flow meter 的监管参数。
- 读 8.6.6.1,理解 IPV 如何影响 queueing。
- 读 8.6.10,理解 Qci 如何复用 Qbv 的状态机框架。
- 最后读 12.31 和 17,理解管理对象和 MIB。
我还没完全理解的问题
- 工业网络中 PSFP 的 stream filter 顺序通常由集中控制器还是本地管理系统生成。
- Qci 的 flow meter 参数如何与 Qbv 的发送窗口和 Qav 的 shaper 参数联合规划。
GateClosedDueToInvalidRx在实际设备中通常触发告警、丢包、端口隔离还是仅计数。- 多跳网络中,PSFP 应部署在边缘入口、每跳入口,还是关键汇聚点。
已拆出的概念页
- 概念_802.1Qci_PSFP
- 概念_802.1Qci_stream_filter
- 概念_802.1Qci_stream_gate
- 概念_802.1Qci_flow_meter
- 概念_802.1Qci_stream_gate_control
- 概念_802.1Qci_IPV