1、LLR 如何工作?
存在的问题:

集合操作导致的丢包:

硬件和布线导致包破坏:

UE 链路层减少丢包的网络栈:

L2-LLR如何工作的细节:

2、LLR 基础定位(Ultra Ethernet consortium)
LLR = Link Level Retry 链路层低时延重传 ,是 UEC 核心无损可靠性机制,工作在MAC 层之上、TCP/RoCE 等传输层之下 ,逐跳(hop-by-hop)帧级重传,替代 / 辅助 PFC 实现无损以太网,专门适配 AI/HPC 超低时延、高可靠需求。
核心优势:丢包只在相邻两台设备之间重传,不用端到端回退,大幅压低尾延迟;PFC 只解决拥塞丢包,LLR 同时处理线路误码、瞬时故障、少量拥塞丢包。

基础规则:
- 所有 LLR 使能帧分配唯一递增序列号 Seq(图中 1/2/3/4...)
- 发送端(LLR Sender):发出帧必须存入**Replay Buffer 重放缓冲区**,直到收到接收端 ACK 确认才能删除缓存
- 接收端(LLR Receiver):按 Seq 校验,连续正常收帧回ACK ;检测到 Seq 缺口(丢帧)立刻回NACK(否定确认)
- 双保护:NACK 主动重传 + 发送端超时兜底重传(防止 NACK 本身丢包)
3、逐帧拆解时序图完整流程

阶段 1:Sender 顺序发送 1~8 号帧
- Sender 依次发出帧 1、2、3、4、5、6、7、8,每帧打上 Seq,全部存入本地重放缓存;
- Receiver 侧接收情况:
- 帧 1 正常到达 → 立刻回复 ACK1(绿色 ACK)
- 帧 2 丢失(图中红色叉号),出现 Seq 缺口:收到 1 之后下一个收到 3,检测到 2 缺失
- 帧 3、4、5、6、7、8 陆续抵达 Receiver
阶段 2:Receiver 生成 NACK2(丢包检测触发)
- Receiver 发现 Seq2 缺失,立即生成 LLR_NACK2(红色 NACK 报文)发回 Sender;
- 这个 NACK 发出时刻 = LLR Discard Window 丢弃窗口的起点(图右侧注释定义)
- NACK2 走反向链路传回 Sender,耗时半个 RTT;
- 注意:NACK 在路上传输这段时间里,Sender 还在持续发新帧(9、10),同时 Replay Buffer 里还完整存着 1--8 所有未彻底确认的帧。
阶段 3:Sender 收到 NACK2,启动选择性重传
- Sender 收到 NACK2,立刻从重放缓存取出仅帧 2 ,单独重发(图里黄色线条就是重传帧 2、3、5、7...);
LLR 是Selective 重传,不会回退重传全部,只补发丢失帧,这是低时延关键; - 图里 Sender 侧标注
[2,3,4,5,6,7,8]就是当前 Replay Window 重放窗口: 右侧定义:LLR Replay Window 起点 = 第一个未被 ACK 确认的帧(这里就是帧 2);终点 = 收到 ACK 之前最后一个发出的可 LLR 重传帧
窗口内所有帧都必须留在缓存,不能释放内存。
阶段 4:重传帧抵达 Receiver,Discard Window 结束
- 重传帧 2(黄色)到达 Receiver,补齐 Seq 缺口; 右侧定义:LLR Discard Window 终点 = 收到携带预期 Seq 号的第一个重传帧(也就是收到重传帧 2 这一刻,Discard Window 关闭)
- Receiver 后续收到重传帧、新帧后,批量回复 ACK3、ACK5、ACK7、ACK9、ACK10:
- ACKX 含义:Seq≤X 的所有帧全部正确接收,Sender 可以安全删除 Replay Buffer 里≤X 的缓存帧
- 比如收到 ACK3 → 帧 2、3 都确认,缓存里 2、3 可释放,Replay Window 起点滑动到 4
阶段 5:窗口滑动、缓存回收、持续传输
- 每收到一个 ACK,Sender 的 Replay Window 左边界向右滑动,释放已确认帧的缓存;
- 帧 9、10 持续新发,不断追加到 Replay Window 右端;
- 全程新业务流量和重传流量并行发送,不会阻断发送管道。
4、两个核心窗口深度理解(对应图右侧注释)
- LLR Replay Window(重放窗口,发送端视角)
- 起始:第一个还没收到 ACK 确认的帧(本例帧 2)
- 结束:Sender 收到 ACK 报文那一刻,已经发出去的最后一个 LLR 可用帧
- 本质:窗口内所有帧必须保存在 Sender 缓存,随时待命重传;窗口大小≈链路 BDP(带宽 ×RTT),和你之前问的 PFC 缓存逻辑同源:
信号往返 RTT 时间内发送出去的数据,都要缓存兜底。
- LLR Discard Window(丢弃窗口,接收端视角)
- 起始:Receiver 生成 NACK 报文的瞬间(发现丢包立刻计时)
- 结束:Receiver 成功收到对应缺失序号的第一个重传帧
- 作用:窗口内 Receiver 不会向上层上报乱序 / 缺口,耐心等待重传帧补齐;窗口结束后 Seq 恢复连续,正常向上交付数据。
5、对比 PFC,理清 LLR 和 PFC 分工
| 机制 | 解决问题 | 工作方式 | 时延影响 |
|---|---|---|---|
| PFC | 下游缓存满导致的拥塞丢包 | Rx 发 PAUSE 让 Tx 整体停发整条优先级队列 | 停发会阻塞业务流,队列累积放大延迟 |
| LLR | 线路误码、瞬时故障、少量拥塞丢包 | 丢哪帧只重传哪帧,发送管道不中断 | 几乎不阻断新发流量,只有少量重传开销 |
UEC 推荐组合:PFC 做大拥塞防护,LLR 做微小丢包快速修复;极端场景可纯 LLR 弱化 PFC 依赖,减少 PFC 死锁风险。
一句话极简总结时序
- 发帧→存缓存→收方校验 Seq;
- 缺 Seq 立刻回 NACK;
- 发方收到 NACK 只补发丢的那一帧;
- 收方补齐 Seq 后回 ACK,发方释放已确认缓存、滑动重放窗口;
- Replay Window 管发送端缓存留存,Discard Window 管接收端等待重传的时间区间。
6、LLR CtlOS
6.1 LLR 整体总览(UEC Link Level Retry 链路级重传)
核心运行规则
- 序列号 Seq 机制:所有 LLR 业务帧分配全局递增 Seq 号,收发两端严格按 Seq 有序校验。
- 发送端(Sender)
- 发出的 LLR 帧存入Replay Window 重放缓存,收到 ACK 前绝不删除;
- 双保护重传触发:
① 收到LLR_NACK:立刻选择性重传缺失 Seq(快速主保护)
② 帧超时未收到任何反馈:定时器兜底重传(后备保护,防止 NACK/ACK 自身丢失卡死链路)
- 接收端(Receiver)
- 顺序收帧 → 回复
LLR_ACK(累积确认:ACK (X) = Seq 1~X 全部完好接收) - 检测 Seq 空洞(丢包)→ 立刻发送
LLR_NACK(丢失Seq),开启Discard Window 丢弃等待窗口,暂不上报乱序给上层,等待重传补齐;
- 选择性重传:无论 NACK / 超时,只补发丢失序号,不回退整个发送窗口,吞吐几乎无损耗。
- 窗口体系
- Replay Window(发送侧):起点 = 首个未 ACK 帧,终点 = ACK 到来前最后一个发送的 LLR 帧;窗口大小匹配链路 BDP(带宽 ×RTT)。
- Discard Window(接收侧):起点 = 生成 NACK 时刻,终点 = 收到对应重传 Seq 帧。
- 链路初始化流程
上电 / 链路 UP 时依靠LLR_INIT + LLR_INIT_ECHO协商初始序列号,同步两端 Seq 计数起点,完成握手后链路才允许传输业务 LLR 帧。
6.2 LLR CtIOS 详解(Control Ordered Sets 控制有序集)

CtIOS 是 UEC 里承载 LLR 控制信令的标准 64/66B 块编码格式,4 种专用 LLR 控制有序集,用来在链路上双向传递握手、确认、丢包通知指令。
- 四类 CtIOS 功能定义
| CtIOS 类型 | 发送方 | 核心作用 | 携带关键字段 |
|---|---|---|---|
| LLR_ACK | LLR 接收端 Rx | 累积确认:告知发送端≤ack_nack_seq 的所有帧全部接收正常,发送端可释放对应 Replay 缓存 | ack_nack_seq(完整 22bit 拆分:高 19bit + 低 3bit) |
| LLR_NACK | LLR 接收端 Rx | 否定确认:通知发送端ack_nack_seq 这个序号帧丢失,请求立刻重传该 Seq | ack_nack_seq(同 ACK 位域拆分格式) |
| LLR_INIT | 任意一端(发起方) | 链路初始化握手:下发本端期望的初始序列号 init_seq,同步链路 Seq 基线 | init_seq (22bit 拆分)、init_data 配置参数 |
| LLR_INIT_ECHO | 对端(应答方) | 回应 INIT 握手:告知发起方已接收并解析 INIT,本端就绪,可以收发 LLR 业务帧 | 回带协商后的 init_seq、init_data |
- 统一 64/66B CtIOS 块帧格式(表格拆解)
所有 LLR CtIOS 共用一套块封装结构,Sync、固定标记、块类型完全统一:
- Sync 同步位(bit0/1) :固定
10,标识这是 64/66B 控制块 - D0 块类型字段 :固定
0x4B区分 LLR 类控制集 - D1 子类型码(区分 4 种 CtIOS)
- LLR_ACK = 0x01
- LLR_NACK = 0x02
- LLR_INIT = 0x03
- LLR_INIT_ECHO = 0x04
- 核心序号分段存储(D2 + D4 7:4)
22bit 序列号被拆成两段存放:
- D2:高 19bit
ack_nack_seq<19:4>/init_seq<19:4> - D4 高 4 位:低 3bit
ack_nack_seq<3:0>/init_seq<3:0>
- 固定填充位 D3=0x6,D5/D6/D7 默认填 0
- INIT/INIT_ECHO 额外在 D5 携带
init_data<15:0>初始化配置参数 - ACK/NACK 无 init_data,D5/D6/D7 全部置 0 填充对齐块大小
-
CtIOS 传输关键特性
-
有序传输保障:Ordered Sets 保证控制信令和业务帧的时序对齐,不会出现控制帧超前 / 滞后业务帧导致的 Seq 错乱;
-
双向承载:ACK/NACK 由 Rx 发给 Tx(反向反馈通道);INIT/INIT_ECHO 双向均可发起握手;
-
轻量开销:CtIOS 是标准 64/66B 块封装,相比独立以太网控制帧,封装开销极小,适配 200G/400G/800G 超高带宽低时延场景;
-
兼容性隔离:D0=0x4B 作为 LLR 专属标识,和 UEC 其他 CtIOS(如 PFC、故障告警控制集)互不冲突。
6.3 LLR + CtIOS 完整联动流程极简串联
- 链路初始化阶段
设备 A 发LLR_INITCtIOS → 设备 B 收到后回复LLR_INIT_ECHOCtIOS → 两端对齐 init_seq,链路就绪。 - 正常传输无丢包
A 连续发业务 LLR 帧(Seq1/2/3...)→ B 逐帧接收,间隔回复LLR_ACK(X)CtIOS → A 收到 ACK 滑动 Replay 窗口、释放缓存。 - 发生单帧丢包(如 Seq2 丢失)
B 检测 Seq 空洞 → 立即发送LLR_NACK(2)CtIOS;
A 收到 NACK CtIOS → 从重放缓存取出 Seq2 选择性重传;
重传 Seq2 抵达 B 补齐空洞 → B 回复新的LLR_ACK(3)CtIOS 确认。 - 极端场景(NACK CtIOS 自身丢失)
B 发的 NACK 半路丢包,A 侧 Seq2 计时器超时 → A 主动重传 Seq2;重传帧到 B 后依然能补齐 Seq,后续正常 ACK CtIOS 收尾兜底。
最终一句话浓缩
- LLR:UEC 逐跳低时延选择性重传无损机制,靠 Replay/Discard 双窗口 + NACK / 超时双保护实现链路可靠;
- LLR CtIOS:承载 LLR 握手、ACK、NACK 四种控制信令的标准化 64/66B 有序控制块,是 LLR 收发两端交互指令的唯一载体。
7、LLR 协议层架构位置

- 层级插入位置
LLR(Link Layer Retry)部署在 LLC/MAC Client(上层) 和 MAC Control 子层(下层) 之间,属于链路层(Link)内部可选子模块。 - 完整协议栈从上到下:
高层业务层 → LLC/MAC 客户端 → LLR(可选) → MAC Control(可选)→ MAC 介质访问控制 → Physical 物理层 - 定位意义:
完全嵌套在标准以太网 MAC 体系内,不改动底层 MAC/PHY 基础框架,可按需开启 / 关闭 LLR 能力,兼容传统以太网流量。
8、LLR 序列号(Sequence Number)核心规则
- 按帧粒度区分流量
MAC 下发的以太网帧被分成两类:
- LLR-eligible(启用 LLR 重传保护):需要链路可靠重传的业务帧(如 RoCE、HPC、AI 算力流量)
- LLR-ineligible(不启用 LLR):普通标准以太网流量,不走 LLR 重传逻辑
- 20bit 序列号分配规则
仅LLR-eligible 帧 由 LLR 发送端分配一个20bit 唯一递增序列号 ;该 Seq 号直接嵌入在帧前导码(Preamble)的字节 1~3 中;
非 LLR 帧无此 Seq 字段,使用传统标准前导。
9、两种帧的前导码(Preamble)字节格式对比
标准以太网前导共 8 字节(Byte0~Byte7,末尾 0xD5 为 SFD 帧起始定界符)
- LLR-ineligible 普通帧(标准以太网前导)
- Byte0 ~ Byte6:全部固定 0x55(二进制
1010 1010) - Byte7:固定 SFD 0xD5(
1010 1011)
无任何序列号嵌入,完全兼容传统以太网。
- LLR-eligible 受保护帧(改造型前导)
- Byte0:依然标准 0x55(
1010 1010) - Byte1:高 4bit 固定标识
1110(0x7 前缀,用来标记这是 LLR 帧),低 4bit 为 20bit Seq 的最高 4 位 - Byte2 + Byte3:承载 20bit 序列号剩余 16 位
→ Byte1 低 4 + Byte2 (8bit) + Byte3 (8bit) = 完整 20bit LLR 序列号 - Byte4 ~ Byte6:恢复标准 0x55
- Byte7:标准 SFD 0xD5 不变
10、关键特性小结
- LLR 是可选子层,不强制部署,兼容传统以太流量;
- 靠前导码改造实现 Seq 号承载,无需修改以太网帧载荷头部,开销极低;
- 流量隔离:可混合传输受 LLR 保护的高可靠业务 + 无保护普通以太业务;
- 20bit 序号空间足够大,长链路、高速率场景下极少出现序号回绕问题。