深度来源笔记:IEEE 802.1CB 可靠性帧复制与消除
来源信息
- 标题:IEEE Standard for Local and metropolitan area networks - Frame Replication and Elimination for Reliability
- 标准号:IEEE Std 802.1CB-2017
- 发布时间:2017-10-27
- 原始文件:
raw/802.1CB.md - 学习定位:TSN 可靠性机制核心标准
- 关联概念:概念_FRER与复合流、概念_VLAN感知桥与转发数据库
这篇资料解决什么问题
802.1CB 试图解决一个很工程化的问题:在工业控制、车载网络、音视频、自动化等时间敏感场景里,某些数据流不能接受“链路断了以后等网络重新收敛”。FRER 的策略不是等故障发生后再修复路径,而是提前复制关键流,让多个副本沿不同路径传输,在接收侧或中间恢复点只保留一个有效副本。
这份标准的中心思想可以压缩成一句话:给每个关键帧加上可识别的序列信息,把它变成多个成员流冗余发送,再在合并点根据序列号消除重复。
不过 802.1CB 的边界也很重要。它不做路径计算,不保证路径无拥塞,不保证重排成原始顺序,也不单独完成 TSN 的全部确定性目标。它更像一层可靠性功能,需要和 802.1Q 的桥接、流识别、资源预约、队列控制一起工作。
阅读前需要知道什么
802.1Q 桥接背景
FRER 不是一个脱离二层桥接网络的新协议。它会嵌入 802.1Q 的 Forwarding Process,并且依赖 VLAN、端口、转发、流标识等已有机制。因此读 802.1CB 时,要不断把它放回 概念_VLAN感知桥与转发数据库 的背景里。
TSN Stream 背景
标准里的 Stream 不是“随便一条 TCP 连接”那种泛称。它通常有 Talker、Listener、最大包大小、固定或受约束的发送间隔,也可能有带宽和延迟资源规划。FRER 对这样的 Stream 做复制与恢复。
可靠性和确定性不是同一件事
FRER 提高送达概率,但它可能引入重复、乱序、额外带宽和缓存压力。要达到“无拥塞损失”和“有限时延”,还需要其它 TSN 机制配合。
原文结构地图
Clause 1:Overview
这一章最重要,建议先读。它包含 Scope、Rationale、Specification model 和 Introduction。Scope 说明标准定义桥和端系统中的识别、复制、去重流程,但不负责多路径创建。Rationale 解释为什么需要 FRER:动态恢复太慢时,预先冗余更可靠。Introduction 引出 Talker、Listener、Reservation、Compound Stream、Member Stream 的模型。
Clause 3/4:Definitions 与 Acronyms
这里给出几个必须掌握的词:Compound Stream、Member Stream、FRER、R-TAG。读后文时最容易混淆的是 Stream 的不同层次:一个应用意义上的流、802.1Q 中被预约的流、FRER 中的复合流和成员流,语境不同。
Clause 5:Conformance
这一章从设备角色角度拆 FRER:Stream identification component、Talker end system、Listener end system、Relay system、FRER C-component。它的价值不是背条款,而是看懂“FRER 功能可以部署在哪里”。
Clause 6:Stream identification
FRER 要先知道某个帧属于哪个流,才谈得上复制和恢复。这里定义 stream_handle 和 sequence_number 等服务参数,也介绍不同识别方式,例如 Source MAC and VLAN、Active Destination MAC and VLAN、IP Stream identification。
Clause 7:FRER 核心机制
这是标准主体。它定义 Compound Stream、Member Stream、Sequence generation、Sequence recovery、Base recovery、Individual recovery、Sequence encode/decode、R-TAG、HSR/PRP 互操作等。学习这章时,建议按“生成序列号 → 复制 → 传输 → 合并 → 去重”这条线读。
Clause 8:FRER in Bridges
这一章解释 FRER 如何放进 802.1Q 桥。重点是:FRER 功能可以出现在桥的输入侧、输出侧或转发路径周围,但外部可见行为要符合标准模型。这里还解释了 FRER 与 VLAN tag 的关系。
Clause 9/10:管理对象和计数器
这两章偏实现和运维。它们定义如何配置 FRER,如何表示 Stream identification、sequence generation、sequence recovery、autoconfiguration,以及如何统计错误、重复、恢复等行为。
Annex C:系统示例
这是理解 FRER 最友好的部分。它把抽象机制放进具体拓扑:端到端 FRER、relay proxy、梯形冗余、多播、协议互通、带宽预约和个体恢复。对学习者来说,Annex C 往往比条款正文更有解释力。
核心概念表
| 概念 | 正式语境 | 学习时的直觉 |
|---|---|---|
| Talker | 发起 Stream 的端系统 | 关键数据的源头 |
| Listener | 消费 Stream 的端系统 | 需要收到数据的一端 |
| Stream | 被识别、预约或处理的一类流 | FRER 操作的对象 |
| Compound Stream | 由多个 Member Streams 组成的 FRER 流 | 一个逻辑流的冗余整体 |
| Member Stream | Compound Stream 中的一条成员流 | 一个副本走的一条路径 |
| Sequence number | 标识帧顺序的数字 | 判断“这个包见过没”的依据 |
| Sequence generation | 生成序列号的功能 | 给每个要复制的帧贴编号 |
| Sequence recovery | 合并成员流并去重的功能 | 只保留第一个有效副本 |
| Individual recovery | 针对单个 Member Stream 的恢复功能 | 拦截坏路径上的重复旧帧 |
| R-TAG | Redundancy tag | 把序列号放进以太帧的一种标签 |
| Stream identification | 流识别功能 | 判断帧属于哪个 FRER 处理实例 |
机制拆解
1. 流识别:先把帧归属搞清楚
FRER 的第一步不是复制,而是识别。一个桥或端系统必须知道输入帧属于哪个 Stream,才能决定它是否要被序列化、复制、恢复或普通转发。标准通过 stream_handle 把识别结果传给后续功能。
Stream identification 可以基于不同字段。Source MAC and VLAN 适合按源和 VLAN 组织流;Active Destination MAC and VLAN 可以在输出侧改变目标 MAC/VLAN,让成员流在桥接网络里走不同路径;IP Stream identification 则适合在代理场景里识别上层流。
2. 序列生成:让副本之间可比较
复制后的帧如果没有共同编号,接收侧就无法判断两个副本是不是同一个原始帧。Sequence generation function 的作用就是为每个帧生成序列号。序列号通常在 Talker 或靠近 Talker 的代理 relay 上生成。
序列号不一定在整个系统全局唯一。它通常只需要在对应 Stream 和对应恢复窗口中有意义。标准还讨论了 per-Stream sequencing 和 per-source sequencing 的区别,这对实现和配置都很重要。
3. 复制与成员流:把一个逻辑流变成多个路径流
FRER 把原始 Stream 组织成 Compound Stream。Compound Stream 包含一个或多个 Member Streams,每个 Member Stream 可以沿不同路径传播。复制可以发生在 Talker,也可以发生在 relay。标准甚至允许 relay 代理不支持 FRER 的终端,把普通流转成 FRER 复合流。
这里要小心一个点:Member Stream 的路径选择不是 802.1CB 本身完成的。路径可能来自 VLAN 规划、显式配置、其它冗余机制、链路聚合或专门的 TSN 配置。
4. 序列编码:让序列号进入帧
内部服务参数需要通过某种方式放进实际帧中,才能跨设备传输。R-TAG 是 802.1CB 中非常重要的一种方式,它给帧携带 redundancy tag 和 sequence number。标准还讨论了 HSR sequence tag、PRP sequence trailer 等互操作形式。
如果某些终端不理解这些额外标签,就需要在靠近终端的 relay 上插入或移除标签。Annex C.8 特别提醒:标签没有正确移除时,不支持对应解码功能的终端可能无法解析帧。
5. 合并和去重:恢复单一有效流
当多个 Member Streams 在某个节点汇合时,Sequence recovery function 根据 sequence number 判断哪些帧已经见过。第一个有效副本被交付,后续重复副本被丢弃。
标准里有两个恢复算法方向:VectorRecoveryAlgorithm 和 MatchRecoveryAlgorithm。它们都服务于“识别重复并决定是否交付”,但适用流类型和状态维护方式不同。学习阶段可以先抓住共同目标:恢复函数维护一个历史窗口,用于判断新来的序列号是否已经被接收。
6. 个体恢复:提前隔离坏成员流
Individual recovery function 容易被忽视。它不是合并多个 Member Streams 的主恢复点,而是针对单个 Member Stream 做重复过滤。它的典型用途是防止某条路径上的故障节点不断重复发送旧帧,让这些旧帧污染后续 Sequence recovery。
换句话说,Sequence recovery 是“合并处去重”,Individual recovery 是“单条成员路径上先清理异常重复”。
关键流程 / 数据路径 / 控制路径
发送侧数据路径
- 输入帧被 Stream identification 识别。
- 系统为该 Stream 选择一个 FRER 处理实例。
- Sequence generation 生成序列号。
- Sequence encode/decode 把序列号编码到帧里,例如使用 R-TAG。
- Stream splitting 或桥接多播机制复制帧。
- 不同副本被标识为不同 Member Streams 并送往不同端口或路径。
中间 relay 数据路径
relay 可以有多种角色:
- 纯转发:只转发 Member Streams,不做恢复。
- 代理发送侧:为不支持 FRER 的终端生成序列号并复制。
- 中间恢复点:在网络中间合并一部分 Member Streams,丢掉重复后再继续转发。
- 协议互通点:在 R-TAG、HSR、PRP 或其它封装之间转换。
接收侧数据路径
- 多个 Member Streams 到达同一恢复点。
- Stream identification 把它们归入同一个恢复实例。
- Sequence encode/decode 取出序列号。
- Sequence recovery 检查历史窗口。
- 未见过的帧被交付,重复帧被丢弃。
- 上层看到的是尽量恢复后的单一流。
控制与管理路径
Clause 9/10 的管理对象用于配置:
- 哪些流需要被识别。
- 哪些端口执行 sequence generation 或 sequence recovery。
- 使用哪种序列编码方式。
- 恢复历史窗口长度、超时、计数器等参数。
- autoconfiguration 如何根据收到的帧自动建立部分配置。
章节级拆解
Clause 1.1 Scope
本标准定义桥和端系统中的 FRER 程序、管理对象和协议。它强调三类能力:识别要复制的包、冗余传输、识别并消除重复包。它也明确排除多路径创建。
学习重点:范围边界。读完这一节要知道 FRER 不是路由协议,也不是完整 TSN 系统,只是可靠性功能块。
Clause 1.2 Rationale
动机是提高给定数据包送达概率。标准提到,在固定拓扑、且路径被保护免于拥塞丢失时,FRER 能显著降低因设备故障导致的丢包概率。
学习重点:FRER 的效果依赖前提。路径要独立,资源要被正确配置,复制才有价值。
Clause 1.6 Introduction
这里建立 Talker、Listener、Stream、Reservation、Compound Stream、Member Stream 的总体模型。它说明在动态恢复不可接受时,可以把一个 Stream 拆成多个 Member Streams,复制后再合并。
学习重点:这是理解全标准的概念入口。
Clause 5 Conformance
Conformance 不是只给厂商测试用。它也告诉学习者 FRER 功能可能部署在哪些设备中:
- Talker 负责产生 Compound Streams。
- Listener 负责消费 Compound Streams。
- Relay systems 可以转发或丢弃 Compound Stream 的包。
- Stream identification component 可以只识别流,不处理序列号。
学习重点:FRER 不一定端到端都由终端完成,中间桥也可以承担代理或恢复职责。
Clause 6 Stream identification
FRER 需要 stream_handle 和 sequence_number 这样的内部服务参数。标准定义了多种识别方式,包括基于 MAC/VLAN 和基于 IP 的识别。FRER 与 802.1Q 的联系在这里非常明显,因为 VLAN 和桥接转发字段会参与流识别。
学习重点:没有流识别,FRER 的复制和恢复都没有对象。
Clause 7 FRER functions
这是核心章。建议分成四层读:
- 目标层:提高送达概率,但不保证重排。
- 结构层:Compound Stream 和 Member Streams。
- 功能层:sequence generation、sequence recovery、individual recovery、encode/decode、splitting。
- 算法层:VectorRecoveryAlgorithm、MatchRecoveryAlgorithm、历史窗口和超时。
学习重点:FRER 的本质是“有状态的去重系统”,复制只是前半段,恢复窗口和序列状态才决定后半段是否正确。
Clause 8 FRER in Bridges
这章把 FRER 放进 802.1Q 桥。标准说明 FRER 功能可以嵌入 Forwarding Process 周围,且可以用桥接多播机制完成复制。它还讨论了带 VLAN tag 和 R-TAG 的帧格式关系。
学习重点:FRER 不是绕开桥接,而是利用桥接。很多复制、输出端口选择和 VLAN 变换仍依赖 802.1Q。
Clause 10 Management
这一章提供配置表和计数器。对学习者来说,不必第一遍记住每个对象名,但要理解管理对象对应的工程问题:配置哪个流、在哪个端口恢复、用什么封装、窗口多大、错误怎么计数。
学习重点:FRER 是可配置的功能集合,不是单一自动行为。
Annex C Examples
Annex C 是把理论落地的关键。它解释:
- End-to-end FRER:两端系统完成复制和恢复。
- Various stack positions:relay 可以替普通终端代理 FRER。
- Ladder redundancy:用上下路径和横向连接抵抗链路故障。
- Multicast trees:多 Listener 场景下的冗余路径。
- Protocol interworking:不同封装方式之间的转换。
- FRER and reserved bandwidth:复制和路径时延差会带来额外缓存需求。
- Individual recovery:坏成员流重复旧帧时,提前丢弃有价值。
学习重点:Annex C 说明了 FRER 的灵活性,也暴露了它的复杂性。
关键定义的定位
- Scope:
raw/802.1CB.md中 Clause 1.1 附近。 - Rationale:Clause 1.2。
- Compound Stream:Definitions 中的 Compound Stream 条目。
- Member Stream:Definitions 中的 Member Stream 条目。
- R-TAG:Acronyms 与 Clause 7.8 附近。
- Sequence generation:Clause 7.4.1。
- Sequence recovery:Clause 7.4.2 与 7.4.3。
- FRER in Bridges:Clause 8。
- Practical examples:Annex C。
术语之间的依赖关系
flowchart TD A["Stream identification"] --> B["stream_handle"] B --> C["Sequence generation"] C --> D["sequence_number"] D --> E["Sequence encode/decode"] E --> F["Member Streams"] F --> G["Sequence recovery"] G --> H["Duplicate elimination"] H --> I["Reconstituted Stream"]
这个依赖图可以帮助阅读:先识别流,再生成序列号,再复制成成员流,最后用序列号恢复。
与其它来源的关系
- 与 概念_VLAN感知桥与转发数据库:802.1CB 使用 802.1Q 桥接模型、VLAN、端口和转发过程作为承载环境。
- 与 概念_信用整形与SR类:802.1Qav 解决流如何平滑发送,802.1CB 解决流如何在故障下提高送达概率。
- 与 总览_802.1桥接基础到TSN能力扩展:802.1CB 属于 TSN 可靠性能力,不是时间同步、调度或整形机制。
易混点
FRER 不是路径控制
标准不创建多路径。路径可能来自 VLAN 配置、显式路径、链路聚合、DRNI、HSR/PRP 互操作或其它网络规划。
去重不等于排序
FRER 可以丢弃重复副本,但不同路径长度不同会导致乱序。标准明确把恢复原始顺序放在范围之外。
成员流也可能需要资源
如果每条 Member Stream 都占用网络资源,那么带宽预约和缓存设计要按复制后的流量考虑。Annex C.9 专门说明路径时延差可能导致恢复点出现短时间双倍负载。
R-TAG 不是唯一封装
R-TAG 是 802.1CB 的重要标签,但标准还讨论了 HSR/PRP 等序列编码互操作。实现时要关注封装转换和标签移除。
Relay 可以很主动
中间桥不一定只是转发。它可以代理不支持 FRER 的终端,执行序列生成、复制、恢复、封装转换等功能。
例子 / 场景推演
场景 1:端到端 FRER
Talker 支持 FRER。它为每个帧生成序列号,复制成两条 Member Streams。网络中间只负责把两条路径转发到 Listener。Listener 用 sequence recovery 合并两条成员流。如果两条都到,只交付一份;如果一条断了,另一条仍能提供数据。
适合场景:端系统能力强,网络中间配置相对简单。
场景 2:Relay 代理普通终端
终端 A 不支持 FRER,但靠近 A 的 relay B 支持。B 识别 A 发出的普通流,为其生成序列号并复制成多个 Member Streams。后续 relay 或 Listener 再恢复。
适合场景:终端不能改造,但网络设备支持 TSN 功能。
场景 3:中间恢复点
多个 Member Streams 可以在网络中间先合并一次,消除重复后再继续传播。这可以减少后半段网络负载,也可以构建多级可靠性结构。
风险:恢复点本身变成关键配置点,需要正确设置恢复窗口和输出行为。
场景 4:短路径恢复后的突发
如果两条路径时延差很大,短路径失败后又恢复,恢复点可能短时间收到来自短路径的新包和长路径积压包。Sequence recovery 会去重,但输出速率和缓存压力仍然要处理。这个问题超出 FRER 本身,需要预约、整形或缓存策略配合。
读这篇标准时的推荐顺序
- 先读 Clause 1.1、1.2、1.6,建立范围和直觉。
- 再读 Definitions 里的 Compound Stream、Member Stream、R-TAG。
- 读 Clause 6,弄清 Stream identification。
- 读 Clause 7.1、7.3、7.4,掌握 FRER 功能和序列恢复。
- 读 Clause 8,理解它如何进入 802.1Q 桥。
- 读 Annex C,补具体场景。
- 最后再回头看 Clause 9/10 的管理对象。
我还没完全理解的问题
- VectorRecoveryAlgorithm 和 MatchRecoveryAlgorithm 在工程产品中的默认选择依据是什么。
- FRER 与 802.1Q 预约机制一起使用时,每个 Member Stream 的带宽、缓存和延迟预算如何系统计算。
- Relay proxy 部署中,哪些封装转换最容易造成互操作问题。
- Autoconfiguration 在只使用 R-TAG 的网络里能简化到什么程度。
- 在存在多级恢复点时,如何判断哪个节点应该执行 Individual recovery,哪个节点应该执行 Sequence recovery。
已拆出的概念页
- 概念_Sequence_recovery
- 概念_Individual_recovery
- 概念_R-TAG
- 概念_Member_Stream与Compound_Stream
- 概念_FRER与802.1Q桥接转发
- 概念_FRER与带宽预约
- 概念_FRER_relay_proxy