3、LTE空口协议栈:PHY/MAC/RLC/PDCP/RRC层功能、NAS信令流程
各位好,我是老周。今天咱们聊聊LTE空口协议栈。这东西说白了,就是手机和基站之间通信的那套规矩。我做了十几年通信,见过太多人把这五层协议搞混。其实没那么复杂,咱们一层层拆开看。
你想想看,手机要上网,数据得从应用层一路往下走,经过封装、分段、加密,最后变成无线信号发出去。基站收到后再反过来一层层解包。这个过程中,每一层都有自己的活要干。
3.1 协议栈总体架构
LTE空口协议栈分三层两面:用户面和控制面。用户面管数据,控制面管信令。我习惯把控制面比作"交警",用户面比作"货车"——交警指挥交通,货车拉货。
核心要点:控制面的RRC和NAS负责建立、维护、释放连接;用户面的PDCP、RLC、MAC、PHY负责数据传输。两者共享底层,但处理逻辑不同。
下面这张图是我自己画的,把协议栈的层次关系讲清楚了:
3.2 各层功能详解
3.2.1 PHY(物理层)
物理层是协议栈的最底层,直接跟无线信号打交道。它的活包括:调制解调、编码解码、MIMO处理、资源映射等等。说白了,就是把0和1变成电磁波发出去,再把收到的电磁波变回0和1。
我记得有一次调试一个终端,发现吞吐量死活上不去。查了半天,结果是物理层的资源分配参数配错了。嗯,这种坑踩过一次就记住了。
实战技巧:PHY层的关键参数包括:带宽(1.4/3/5/10/15/20MHz)、CP长度(普通/扩展)、传输模式(TM1-TM9)。调试时优先检查这些。
3.2.2 MAC(媒体接入控制)
MAC层在PHY上面。它的核心工作是调度——决定谁在什么时候用哪个资源块。我习惯把MAC层比作"交通调度员",它手里拿着资源块这张"通行证",谁有数据要发就给谁。
MAC层还负责:
- 混合自动重传请求(HARQ):快速重传,减少延迟
- 调度与优先级处理:保证QoS
- 随机接入过程:终端初始接入
- 逻辑信道到传输信道的映射
注意:MAC层的HARQ有8个进程并行工作。我曾经遇到过因为HARQ进程数配置错误导致重传率飙升的问题,排查了整整两天。后来发现是协议栈实现里把进程号搞混了。
3.2.3 RLC(无线链路控制)
RLC层在MAC上面。它有三种模式:
| 模式 | 全称 | 特点 | 适用场景 |
|---|---|---|---|
| TM | 透明模式 | 不添加任何头,直接透传 | 广播消息、寻呼 |
| UM | 非确认模式 | 分段/重组,不重传 | VoIP、实时业务 |
| AM | 确认模式 | 分段/重组,自动重传 | 数据业务、文件传输 |
我个人的经验是:AM模式最常用,但要注意重传超时参数的设置。设得太短会导致不必要的重传,设得太长又会增加延迟。一般建议RLC重传超时设在100-200ms之间。
3.2.4 PDCP(分组数据汇聚协议)
PDCP层在RLC上面。它的主要工作包括:
- IP头压缩:用ROHC算法,把40字节的IP头压缩到2-3字节
- 加密与完整性保护:保证数据安全
- 按序递交:保证上层收到的数据包顺序正确
- 重复包检测:避免上层收到重复数据
说到头压缩,我遇到过一个问题:ROHC上下文同步失败,导致压缩后的数据解不出来。后来发现是切换时上下文没传过去。解决办法是在切换前把压缩状态保存好,切换后再恢复。
3.2.5 RRC(无线资源控制)
RRC层是控制面的核心。它负责:
- 系统信息广播:MIB、SIB1-SIB13
- 连接管理:建立、维护、释放RRC连接
- 移动性管理:测量配置、切换决策
- 安全控制:密钥管理、算法协商
- 无线承载管理:SRB、DRB的建立与配置
关键状态机:RRC有三种状态——RRC_IDLE(空闲)、RRC_CONNECTED(连接)、RRC_INACTIVE(非激活)。终端在IDLE态下省电,在CONNECTED态下传数据。INACTIVE是R15引入的新状态,介于两者之间。
3.3 NAS信令流程
NAS(非接入层)在RRC上面,它不直接跟空口打交道,而是通过RRC承载信令。NAS负责核心网和终端之间的交互,包括:
- 附着/去附着
- TAU(跟踪区更新)
- 业务请求
- PDN连接建立/释放
- 鉴权与安全模式控制
下面是一个典型的附着流程,我把它画成了流程图:
这个流程看起来简单,但实际调试中坑不少。我遇到过最典型的问题是:Attach Request发出去后,MME没响应。查了半天,发现是终端上报的IMEI格式不对,MME直接丢弃了。嗯,这种细节问题最容易让人抓狂。
3.4 各层之间的数据流
数据从上层往下走,每层都会加头。我习惯用"俄罗斯套娃"来比喻这个过程:
- 应用层数据 → IP包
- PDCP层加PDCP头(加密、压缩)
- RLC层加RLC头(分段、序列号)
- MAC层加MAC头(逻辑信道ID、HARQ信息)
- PHY层加CRC、编码、调制后发送
调试技巧:抓空口日志时,重点关注每层的头信息。比如MAC头的LCID字段能告诉你这个数据属于哪个逻辑信道;RLC头的SN字段能帮你判断是否有丢包或乱序。
3.5 常见问题与避坑指南
做LTE协议栈开发这些年,我总结了几条经验:
- RRC连接建立失败:先检查小区选择参数,再看随机接入过程是否正常。我曾经遇到过因为PRACH配置错误导致终端始终无法接入的问题。
- PDCP解密失败:检查密钥是否同步。切换时最容易出现这个问题,因为源基站和目标基站的密钥可能不一致。
- RLC重传超时:调整t-PollRetransmit和t-Reordering参数。默认值不一定适合所有场景,需要根据实际网络状况微调。
- MAC调度效率低:检查CQI上报是否准确。CQI不准会导致MCS选择错误,影响吞吐量。
重要提醒:协议栈各层的参数是相互影响的。比如你调整了MAC层的调度周期,可能会影响RLC层的重传行为。改参数时一定要做回归测试,别只盯着某一层看。
好了,这一章的内容就到这里。协议栈这东西,光看理论是不够的,一定要动手抓日志、分析流程。下次遇到问题,记得从底层往上层一层层排查,别一上来就怀疑应用层。