第4章:RLC层与PDCP层——RLC三种模式与PDCP安全机制
各位好,今天我们来聊聊协议栈里两个非常关键的层——RLC和PDCP。说实话,这两个层在5G NR和4G LTE里都扮演着承上启下的角色。RLC负责把数据切成合适大小的块,PDCP则负责给数据上锁加密。我当年刚接触协议栈时,总觉得这两层功能有点重叠,后来踩过坑才明白——它们分工其实非常清晰。
4.1 RLC层的三种模式:TM、UM、AM
RLC层有三种工作模式,说白了就是三种不同的数据传递方式。你想想看,不同的业务对数据的要求不一样——语音可以丢几帧,但文件传输一个字节都不能错。RLC就是为这个而生的。
4.1.1 透明模式(TM)
TM模式最简单。它不做任何分段、不做任何重传。数据进来什么样,出去就什么样。我习惯叫它「裸传模式」。
- 特点:不添加RLC头,不进行分段重组
- 用途:主要给控制面信令用,比如RRC消息的初始传输
- 注意:没有ARQ重传,丢了就丢了
4.1.2 非确认模式(UM)
UM模式比TM多了一个分段重组功能,但依然没有重传机制。它适合那些对实时性要求高、可以容忍少量丢包的业务。
- 特点:支持分段/重组,添加RLC头(包含SN序号)
- 用途:VoIP语音、实时游戏、流媒体
- SN长度:6bit或12bit,看配置
为什么会用UM?你想想看,语音通话时如果丢了一帧,你宁愿直接跳过,也不希望等它重传导致整个通话卡顿。这就是UM存在的意义。
4.1.3 确认模式(AM)
AM模式是RLC的「完全体」。它既有分段重组,又有ARQ自动重传。数据必须确认收到,否则就一直重传。
- 特点:支持分段/重组、ARQ重传、状态报告
- 用途:文件下载、网页浏览、TCP业务
- SN长度:12bit
4.2 PDCP层的加密与完整性保护
PDCP层主要负责两件事:加密和完整性保护。说白了就是给数据上锁和贴封条。加密保证别人看不懂,完整性保护保证别人改不了。
4.2.1 加密机制
PDCP使用SNOW 3G、AES或ZUC算法对数据进行加密。加密的密钥由上层(RRC)配置,PDCP层只负责执行。
| 算法 | 密钥长度 | 特点 |
|---|---|---|
| SNOW 3G | 128bit | 3G时代的老将,成熟稳定 |
| AES(CTR模式) | 128/256bit | 通用性强,硬件加速友好 |
| ZUC | 128bit | 中国标准,国密算法 |
加密的输入参数包括:COUNT(基于PDCP SN)、BEARER(承载ID)、DIRECTION(上下行方向)。我习惯把加密看作一个「伪随机数生成器+异或」的过程——用密钥和参数生成密钥流,然后跟明文异或得到密文。
4.2.2 完整性保护
完整性保护用于控制面信令和某些数据面承载。它通过MAC-I(消息认证码)来验证数据是否被篡改。
- 控制面:所有SRB(信令无线承载)都必须做完整性保护
- 数据面:DRB(数据无线承载)可选,一般用于URLLC等高可靠场景
- 算法:与加密算法相同(SNOW 3G/AES/ZUC)
4.3 头压缩(RoHC)
RoHC(Robust Header Compression)是PDCP层的一个「黑科技」。它能把40字节的IP头压缩到1-3字节。你想想看,VoIP语音包本身才30-40字节,如果带着完整的IP头传输,效率太低了。
4.3.1 压缩原理
RoHC的核心思想是:IP头里的很多字段在同一个流中是固定的(比如源IP、目的IP),或者变化有规律(比如IP ID递增)。压缩器只发送变化的部分,不变的部分由解压器自己补全。
- 静态字段:IP地址、端口号——只在建立时传一次
- 动态字段:IP ID、RTP序列号——用差分编码传输
- 上下文:压缩器和解压器各自维护一个上下文,记录当前状态
4.3.2 工作模式
RoHC有几种工作模式,我重点说两个常用的:
| 模式 | 特点 | 适用场景 |
|---|---|---|
| 单向模式(U模式) | 压缩器主动发送,不需要反馈 | 广播、组播 |
| 双向可靠模式(R模式) | 需要反馈,解压器可以请求重传上下文 | 点对点语音、视频 |
4.4 小结
RLC和PDCP这两层,一个管数据的分段和可靠传输,一个管数据的安全和压缩。它们配合起来,才能让上层的数据在空口上高效、安全地传输。
我个人习惯在设计协议栈时,把RLC和PDCP的接口定义得尽量简洁——RLC只关心PDU的收发,PDCP只关心加密和压缩。这样模块化之后,调试和优化都方便很多。
下一章我们会聊聊MAC层的调度和HARQ,那又是一个很有意思的话题。