第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重传,丢了就丢了
我的经验:有一次调试RRC连接建立流程,发现UE一直收不到RRCSetup消息。查了半天,原来是TM模式下数据太大,超过了传输块大小。TM模式不会帮你分段,所以上层发下来的数据必须自己控制好大小。

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
核心机制:AM模式通过Polling机制触发对端发送状态报告。发送方可以设置poll bit,接收方收到后回复哪些PDU已经收到、哪些丢了。我建议你在实现时注意poll的触发频率——太频繁浪费空口资源,太稀疏又会导致重传延迟过大。
避坑指南:我曾经在AM模式下遇到过一个死锁问题。发送方一直在重传某个PDU,但接收方其实已经收到了,只是状态报告丢了。结果双方都在等对方——发送方等ACK,接收方等新数据。解决方案是引入「禁止重传定时器」,重传次数达到上限后直接触发重建。

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)
我的建议:实现完整性保护时,注意MAC-I的计算范围。它覆盖PDCP头和数据部分,但不包括PDCP SN本身。另外,接收方验证失败后应该直接丢弃该PDU并上报给上层,不要尝试重传——因为完整性失败说明数据已经被破坏,重传也没用。

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模式) 需要反馈,解压器可以请求重传上下文 点对点语音、视频
关键点:RoHC最怕的是上下文不同步。如果压缩器认为上下文是状态A,解压器认为是状态B,那解出来的数据就是错的。我建议你在实现时加入「上下文刷新」机制——每隔一段时间或一定包数后,强制发送一次完整头,确保双方状态一致。
避坑指南:我曾经遇到过一个问题——RoHC在切换场景下频繁失败。原因是切换后目标基站没有继承源基站的RoHC上下文,导致解压失败。解决方案是在切换准备阶段把上下文信息通过Xn接口传递过去。嗯,这个坑让我加了好几天的班。

4.4 小结

RLC和PDCP这两层,一个管数据的分段和可靠传输,一个管数据的安全和压缩。它们配合起来,才能让上层的数据在空口上高效、安全地传输。

我个人习惯在设计协议栈时,把RLC和PDCP的接口定义得尽量简洁——RLC只关心PDU的收发,PDCP只关心加密和压缩。这样模块化之后,调试和优化都方便很多。

下一章我们会聊聊MAC层的调度和HARQ,那又是一个很有意思的话题。