想象你是一个快递站的站长,每天要处理三种截然不同的包裹:
5G网络中的RLC(Radio Link Control,无线链路控制)层面对的正是这样的场景。它位于PDCP层和MAC层之间,是Layer 2的"中间管理层"。来自上层的数据包种类繁多——有系统广播、有语音、有视频、有文件下载——RLC必须为每种业务选择最合适的传输策略。
这就是RLC三种传输模式诞生的根本原因:不是一种模式不够好,而是没有一种模式能同时满足所有业务的需求。
先看全貌,理解RLC层在整个协议栈中的位置和职责:
graph TB
subgraph "用户面协议栈"
APP["应用层<br/>(微信/视频/文件下载)"]
PDCP["PDCP层<br/>加密 · 头压缩 · 排序"]
RLC["RLC层<br/>分段/重组 · ARQ重传"]
MAC["MAC层<br/>复用 · HARQ · 调度"]
PHY["物理层<br/>调制 · 编码 · 发射"]
end
APP --> PDCP
PDCP -->|"RLC SDU"| RLC
RLC -->|"RLC PDU"| MAC
MAC -->|"传输块 TB"| PHY
style RLC fill:#FF6B6B,color:#fff,stroke:#333
style PDCP fill:#4ECDC4,color:#fff,stroke:#333
style MAC fill:#45B7D1,color:#fff,stroke:#333
style PHY fill:#96CEB4,color:#fff,stroke:#333
RLC层从PDCP层接收的数据单元叫 RLC SDU(Service Data Unit),经过处理后向下发送给MAC层的数据单元叫 RLC PDU(Protocol Data Unit)。这个"S到P"的转换过程,就是RLC层工作的核心。
在深入三种模式之前,必须先理解一个根本问题:为什么需要分段?
MAC层每次调度给手机的资源大小是不固定的——这取决于当前信道质量、小区负载、调度策略等。假设PDCP层下来一个1500字节的IP包,但MAC层这次只给了800字节的空间,怎么办?
RLC层的解决方案是:把大包切成小片,分多次发送。 这就是分段(Segmentation)。接收端的RLC层再把这些片段重新拼装回去,这就是重组(Reassembly)。
| 场景 | PDCP下来的SDU大小 | MAC给的空间 | RLC怎么做 |
|---|---|---|---|
| 刚好够 | 800字节 | 800字节 | 不分段,直接传 |
| 不够 | 1500字节 | 800字节 | 分成两段:800+700 |
| 差很多 | 3000字节 | 500字节 | 分成六段 |
| 空间有剩 | 300字节 | 800字节 | 拼接多个小SDU |
这个分段/重组能力,是RLC最基础的功能。而三种模式的核心区别,就在于除了分段/重组之外,还提供哪些额外服务。
透明模式下,RLC层什么也不做。上层来的数据原封不动地传给MAC层,不加任何协议头,不做任何处理。
类比:就像你往信箱里塞传单,传单上不需要写收件人地址(因为是广播),也不需要挂号回执(丢了就丢了)。
| 特性 | 是否支持 |
|---|---|
| RLC头部开销 | 无(零开销) |
| 分段/重组 | 不支持 |
| ARQ重传 | 不支持 |
| 重复检测 | 不支持 |
| 按序递交 | 不支持 |
TM模式只用于两种逻辑信道:
这两种消息有一个共同特点:面向全体终端,追求最小开销,允许丢失。 系统信息会周期性重复广播,丢了就等下一轮;寻呼消息也会重发,不需要RLC层操心。
UM模式给数据包加上了RLC头部(包含序列号SN和分段信息),支持分段/重组和按序递交,但不提供重传机制。包发出去了就不管了,收到就收到,丢了就丢了。
类比:就像送外卖——你把订单编号写在袋子上(序列号),汤和菜分开装(分段),送到之后不要求客户签收确认(不重传)。因为外卖的核心诉求是快,而不是100%确认送达。
sequenceDiagram
participant PDCP as PDCP层
participant RLC_Tx as RLC发送端<br/>(UM模式)
participant RLC_Rx as RLC接收端<br/>(UM模式)
participant MAC as MAC层
PDCP->>RLC_Tx: RLC SDU #1 (1500字节)
PDCP->>RLC_Tx: RLC SDU #2 (300字节)
Note over RLC_Tx: MAC指示本次可发800字节
RLC_Tx->>RLC_Tx: 将SDU #1分段<br/>片段A(800字节) + 片段B(700字节)
RLC_Tx->>RLC_Tx: 添加RLC头部<br/>SI=01(首段) SN=0
RLC_Tx->>MAC: RLC PDU (头部 + 片段A)
Note over RLC_Tx: 下一次调度
RLC_Tx->>RLC_Tx: 拼接:片段B(700字节) + SDU #2(300字节)
RLC_Tx->>RLC_Tx: 添加RLC头部<br/>SI=11(中段+完整SDU)
RLC_Tx->>MAC: RLC PDU (头部 + 片段B + SDU #2)
MAC->>RLC_Rx: 收到PDU
RLC_Rx->>RLC_Rx: 解析头部,提取SN和SI
RLC_Rx->>RLC_Rx: 根据SN和SI重组SDU
RLC_Rx->>PDCP: 递交完整的RLC SDU
UM模式下的RLC头部非常精简,主要包含:
| 字段 | 长度 | 作用 |
|---|---|---|
| SI(分段信息) | 2 bit | 标识当前PDU是完整SDU还是分段(首段/中段/末段) |
| SN(序列号) | 6 bit或12 bit | 标识PDU的序号,用于排序和重组 |
| SO(分段偏移) | 可选 | 标识分段在原始SDU中的字节偏移位置 |
SI字段的含义:
| SI值 | 含义 |
|---|---|
| 00 | 完整SDU,没有分段 |
| 01 | SDU的第一个分段 |
| 10 | SDU的最后一个分段 |
| 11 | SDU的中间分段 |
UM模式主要用于时延敏感、可容忍少量丢包的业务:
假设一个语音包的传输+处理延迟是10ms,如果RLC层重传一次,就要额外加上一个RTT(往返时间,约8ms),总延迟变成18ms。如果连续丢包触发多次重传,延迟可能飙到50ms以上——这对语音通话来说是灾难性的,用户会感觉到明显的卡顿和回声。
相比之下,丢一两个语音包(约20ms的音频),人耳几乎察觉不到,或者可以用简单的插值算法补偿。所以UM模式选择"丢了就丢了"的策略,换取更低的延迟。
AM模式是RLC层功能最丰富的模式。它不仅支持分段/重组,还提供了ARQ(自动重传请求)机制,确保数据100%可靠地、按顺序地送达。
类比:就像寄合同——每一页都编好页码(序列号),收件人收到后逐页检查,发现缺页就立即通知你补发(STATUS PDU),直到所有页码齐全、顺序正确才签收确认。
sequenceDiagram
participant PDCP as PDCP层
participant RLC_Tx as RLC发送端<br/>(AM模式)
participant RLC_Rx as RLC接收端<br/>(AM模式)
Note over RLC_Tx: 发送窗口管理
PDCP->>RLC_Tx: SDU 0, 1, 2, 3, 4
RLC_Tx->>RLC_Rx: PDU SN=0 ✅
RLC_Tx->>RLC_Rx: PDU SN=1 ❌ (丢失)
RLC_Tx->>RLC_Rx: PDU SN=2 ✅
RLC_Tx->>RLC_Rx: PDU SN=3 ✅
Note over RLC_Rx: 检测到SN=1缺失<br/>VR(R)=1<br/>VR(H)=4
RLC_Rx->>RLC_Tx: STATUS PDU<br/>ACK: SN=0<br/>NACK: SN=1
Note over RLC_Tx: 收到NACK,重传SN=1
RLC_Tx->>RLC_Rx: PDU SN=1 (重传) ✅
Note over RLC_Rx: 所有SN已按序收到<br/>VR(R)更新到5
RLC_Rx->>PDCP: 按序递交SDU 0,1,2,3,4
AM模式使用12位或18位的序列号。18位序列号范围达到262144,可以满足5G高速数据业务的需求。发送端和接收端各维护一组状态变量:
| 变量 | 位置 | 含义 | 通俗理解 |
|---|---|---|---|
| VT(A) | 发送端 | 最早未被确认的SN | "最老的那封还没收到回执的信" |
| VT(S) | 发送端 | 下一个待发送的SN | "下一封信的编号" |
| VR(R) | 接收端 | 期望接收的下一个按序SN | "我在等几号信" |
| VR(H) | 接收端 | 已接收的最高SN+1 | "目前为止最远的信到了几号" |
| VR(MS) | 接收端 | 状态报告的最大SN | "我最多能汇报到几号" |
发送窗口的大小等于 VT(S) - VT(A),表示"已经发出但还没确认"的PDU数量。只有收到确认后,窗口才能向前滑动,继续发送新的数据。
发送端不能一直傻等,它需要主动询问接收端"收到了吗?"。这个询问机制叫Poll(轮询)。
Poll触发的条件有多种:
| 触发条件 | 含义 |
|---|---|
| 发送了一定数量的PDU | 每发N个PDU,poll一次 |
| 发送了一定字节数的数据 | 每发M字节,poll一次 |
| 发送缓冲区变空 | 数据都发完了,趁机问一声 |
| 重传缓冲区满了 | 存不下更多未确认的PDU了 |
发送端在PDU头部设置 P bit(Poll比特)= 1,接收端看到P=1就知道"对方在问我收没收到",于是立即回复一个STATUS PDU。
STATUS PDU是AM模式的核心控制消息,它告诉发送端:
$$\text{STATUS PDU} = \text{CPT} + \text{ACK_SN} + \sum_{i}(\text{NACK_SN}_i + \text{SO}_i)$$
其中ACK_SN表示"这个SN之前的都已经收到了",NACK_SN_i表示"第i个缺失的SN",SO(Segment Offset)表示缺失片段在原始SDU中的偏移位置。
AM模式有一个精妙的设计:重传时可以重新分段。
假设原始PDU是800字节,但重传时MAC层只给了500字节的空间。AM模式允许RLC层把原始PDU再切成两段:500+300,分两次重传。接收端通过SO(Segment Offset)字段来拼装这些片段。
这个设计解决了一个实际问题:重传时的调度资源可能比初传时更少(因为信道变差了),如果不能重新分段,重传就无法进行。
参数 maxRetxThreshold 控制最大重传次数,可选值为1、2、3、4、6、8、16、32。
如果某个PDU重传超过这个次数仍然失败,RLC层会向上层报告RLF(Radio Link Failure),触发RRC重建或连接释放。这是一个"保底机制"——如果连重传32次都收不到,说明信道已经烂到没法用了,不如重新建连接。
| 特性 | TM透明模式 | UM非确认模式 | AM确认模式 |
|---|---|---|---|
| RLC头部 | 无 | 有(精简) | 有(完整) |
| 分段/重组 | 不支持 | 支持 | 支持 |
| SDU拼接 | 不支持 | 支持 | 支持 |
| 重复检测 | 不支持 | 不支持 | 支持 |
| 按序递交 | 不支持 | 支持(可配置) | 支持 |
| ARQ重传 | 不支持 | 不支持 | 支持 |
| Poll机制 | 不适用 | 不适用 | 支持 |
| STATUS PDU | 不适用 | 不适用 | 支持 |
| 重新分段 | 不适用 | 不适用 | 支持 |
| 头部开销 | 0字节 | 2~3字节 | 2~3字节+控制PDU |
| 可靠性 | 最低 | 中等 | 最高 |
| 延迟 | 最低 | 低 | 较高(重传引入额外延迟) |
| 典型业务 | SIB广播/寻呼 | VoNR语音/视频 | 文件下载/网页浏览/信令 |
| 逻辑信道 | BCCH, PCCH | DTCH(语音/视频) | DCCH, DTCH(数据) |
| SN长度 | 无 | 6bit或12bit | 12bit或18bit |
很多初学者的疑问是:MAC层已经有HARQ重传了,为什么RLC层还要搞ARQ重传?这不是多此一举吗?
这是一个非常好的问题。答案是:这是"纵深防御"的设计思想,两层重传各有分工、互相补充。
graph TD
subgraph "第一道防线:HARQ(MAC层)"
H1["快速反馈<br/>1个时隙内"]
H2["软合并<br/>Chase/IR"]
H3["最多重传4次"]
H4["捕获随机错误<br/>成功率>99%"]
end
subgraph "第二道防线:RLC ARQ"
R1["STATUS PDU反馈<br/>几个毫秒级"]
R2["精确重传<br/>只补缺失片段"]
R3["最多重传32次"]
R4["捕获残余错误<br/>成功率≈100%"]
end
H1 --> H2 --> H3 --> H4
H4 -->|"残余错误<br/>约1%概率"| R1
R1 --> R2 --> R3 --> R4
style H1 fill:#FF6B6B,color:#fff
style H4 fill:#FF6B6B,color:#fff
style R1 fill:#4ECDC4,color:#fff
style R4 fill:#4ECDC4,color:#fff
| 对比维度 | HARQ(MAC层) | RLC ARQ(RLC层) |
|---|---|---|
| 工作层级 | 物理层/MAC层 | RLC层(逻辑信道) |
| 反馈速度 | 极快(1个时隙~0.5ms) | 较慢(几个ms) |
| 重传粒度 | 整个传输块(TB) | RLC PDU或PDU片段 |
| 最大重传次数 | 通常4次 | 可配(1~32次) |
| 软合并 | 支持(提升成功率) | 不支持 |
| 反馈误判风险 | 有(ACK/NACK可能被错解) | 低(STATUS PDU有CRC保护) |
| 处理的误差类型 | 随机信道衰落、瞬时干扰 | HARQ残余错误、反馈误判 |
核心逻辑:HARQ处理99%以上的传输错误(快速、高效),剩下不到1%的"漏网之鱼"交给RLC ARQ来兜底。两层配合,实现了接近100%的可靠传输。
打个比方:HARQ就像快递公司的"当日达"服务,当天没送到就立刻补发;RLC ARQ就像"签收确认"服务,如果连续几天都没签收,就启动更高级别的追查流程。两者缺一不可。
当你用Wireshark或QXDM抓取5G信令时,会看到RLC层的统计数据。如果发现某个DRB的RLC重传率异常高,说明物理层信道质量持续较差,HARQ已经无法有效纠错。这时需要排查:
VoNR使用UM模式的RLC bearer。如果用户投诉语音质量差,但RLC层统计显示丢包率不高(<1%),那问题可能出在:
如果RLC丢包率>3%,则需要优先排查无线侧问题。
数据业务使用AM模式。如果发现下载速度慢,检查RLC层统计:
| 陷阱 | 正确理解 |
|---|---|
| "RLC重传率高就是无线问题" | 不一定,可能是AM模式下Poll配置过于激进 |
| "UM模式没有重传,所以UM业务的丢包都不可恢复" | MAC层HARQ仍然在为UM模式提供快速重传 |
| "TM模式的广播消息绝对不会丢" | TM只是RLC层不管,物理层仍然可能丢失,系统靠周期性重发来弥补 |
| "AM模式的延迟一定比UM高" | 在信道良好时,AM几乎不触发重传,延迟与UM相当 |
RLC三种模式的设计,体现了通信系统设计中一个核心原则:没有免费的午餐——可靠性、实时性和开销,三者不可兼得。
$$\text{优化目标} = \alpha \cdot \text{可靠性} + \beta \cdot \text{实时性} + \gamma \cdot \text{开销最小化}$$
5G网络承载的业务千差万别——从要求毫秒级延迟的URLLC,到要求99.999%可靠性的文件传输,再到需要覆盖所有终端的系统广播。单一模式无法同时满足这些需求,所以3GPP设计了三种模式,让每种业务都能找到最适合自己的传输策略。
这背后折射出的设计智慧是:好的系统设计不是追求"一个方案解决所有问题",而是提供"一组工具,让每种场景都能找到最优解"。
Q: TM模式没有任何处理能力,那它存在的意义是什么?为什么不让BCCH直接从PDCP到MAC?
A: TM模式的"什么都不做"本身就是一种选择。保留RLC层(即使只是透传)的好处是:(1) 协议栈架构统一,所有逻辑信道都经过RLC层,MAC层不需要区分有无RLC的场景;(2) 未来如果需要对广播消息做处理(比如NR MBS场景),可以在RLC层扩展,不用改架构。
Q: UM模式和AM模式都能做分段/重组,那如果我的业务既要求低延迟又要求可靠呢?
A: 5G的设计是让HARQ在MAC层提供快速重传(对所有模式都生效),RLC ARQ只用于AM模式作为第二道防线。如果你的业务是URLLC类型(既低延迟又高可靠),5G的方案是:(1) 使用AM模式但优化重传参数(减小t-PollRetransmit等定时器);(2) 配合MAC层的高优先级调度和更激进的MCS选择来减少错误发生概率。
Q: AM模式下,如果发送端一直收不到STATUS PDU怎么办?
A: 有多重保护机制:(1) Poll定时器(t-PollRetransmit)超时后会再次发送Poll;(2) 如果重传次数超过maxRetxThreshold,会触发RLF,RRC层尝试重建连接;(3) PDCP层也有自己的重传和丢弃定时器,作为最后一道保险。
Q: 为什么5G NR的AM模式SN长度从LTE的10/12位扩展到了12/18位?
A: 因为5G的数据速率远超4G。以10Gbps速率为例,每个RLC PDU平均1500字节,每秒需要发送约80万个PDU。12位SN只能表示4096个编号,不到1ms就循环一次,可能导致序号混淆。18位SN可以表示262144个编号,提供了足够的窗口空间来应对高速数据流。
Q: RLC AM的重传和TCP的重传会不会冲突?
A: 不会冲突,但可能造成不必要的延迟叠加。这就是所谓的"RLC AM + TCP"双重重传问题。好在5G网络中RLC ARQ的RTT远小于TCP的RTT,大多数情况下RLC ARQ会在TCP超时之前就完成重传,TCP根本感知不到丢包。这也是为什么移动网络中通常建议使用RLC AM(而不是UM+TCP重传)来传输TCP业务——RLC层的重传比TCP重传快得多。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
