第2章:协议栈总体架构:3GPP协议栈分层模型、控制面与用户面协议栈、NAS与AS层功能划分
各位同学,大家好。上一章我们聊了NB-IoT的来龙去脉,这一章咱们得把协议栈的骨架搭起来。说白了,就是搞清楚NB-IoT这个通信系统到底是怎么一层层叠起来的。
我刚开始接触NB-IoT协议栈时,看着3GPP那几千页的规范文档,说实话,头都大了。但后来我发现,只要抓住几个核心概念,整个框架就清晰了。今天我们就来拆解这三个关键点:分层模型、控制面与用户面、NAS与AS的划分。
2.1 3GPP协议栈分层模型
NB-IoT的协议栈,本质上是一套通信规则。它把复杂的通信过程拆成了几个层次。每一层只管自己的事,层与层之间通过标准接口通信。
嗯,这里要注意,NB-IoT的协议栈和传统LTE很像,但做了大量裁剪。毕竟NB-IoT的目标是低成本、低功耗、低速率的物联网场景。
我习惯把协议栈分成三层来看:
- 物理层(L1):负责最底层的信号收发。比如调制解调、信道编码、射频处理。NB-IoT的物理层带宽只有180kHz,和LTE的一个资源块一样宽。
- 数据链路层(L2):包含MAC、RLC、PDCP三个子层。MAC管调度和重传,RLC管分段和重组,PDCP管加密和完整性保护。
- 网络层(L3):主要是RRC层和NAS层。RRC负责连接管理、系统消息广播,NAS负责会话管理和移动性管理。
你想想看,这种分层设计有什么好处?每一层都可以独立演进。比如物理层升级了调制方式,上层完全不用改。我在项目中就遇到过这种情况——芯片厂商换了射频方案,但上层协议栈代码几乎没动。
核心要点:NB-IoT协议栈的分层模型,本质上是把复杂问题简单化。每一层只暴露标准接口,内部实现可以千差万别。
2.2 控制面与用户面协议栈
这是很多初学者容易搞混的地方。控制面和用户面,其实是两条并行的数据通路。
控制面(Control Plane):负责信令交互。比如设备注册、连接建立、资源分配。这些消息不承载用户数据,但决定了通信能不能正常进行。
用户面(User Plane):负责真正的数据传输。比如传感器上报的温度值、水表读数。这些数据才是用户关心的。
我给大家画个简单的对比:
| 对比项 | 控制面 | 用户面 |
|---|---|---|
| 主要功能 | 信令传输 | 数据传输 |
| 协议栈路径 | NAS → RRC → PDCP → RLC → MAC → PHY | IP/Non-IP → PDCP → RLC → MAC → PHY |
| 典型消息 | Attach Request, TAU Request | CoAP数据包, MQTT消息 |
| 可靠性要求 | 极高(丢一条信令可能断连) | 较高(可重传) |
我记得有一次调试设备,发现设备总是注册不上网络。抓包一看,控制面的RRC连接建立成功了,但NAS层的Attach消息一直没发出去。这就是典型的控制面问题。后来发现是PDCP层的加密配置错了。
实战技巧:排查NB-IoT通信问题时,先判断是控制面还是用户面问题。控制面问题通常表现为设备无法入网,用户面问题表现为能入网但发不了数据。
2.3 NAS与AS层功能划分
这个划分是NB-IoT协议栈里最核心的概念之一。NAS和AS,说白了就是「管核心网的」和「管接入网的」。
NAS(Non-Access Stratum,非接入层):
- 负责终端和核心网之间的信令交互
- 包括会话管理(SM)和移动性管理(MM)
- 典型消息:Attach、TAU、Detach、PDN连接请求
- NAS消息对无线接入网是透明的——基站只管转发,不解析内容
AS(Access Stratum,接入层):
- 负责终端和基站之间的通信
- 包括RRC、PDCP、RLC、MAC、PHY
- 典型功能:小区搜索、随机接入、RRC连接管理、数据传输
- AS层需要处理无线环境的变化,比如信号强度、干扰、重传
为什么会这样划分?我个人的理解是:核心网和接入网是两套独立的系统。核心网关心的是「你是谁」「你能干什么」,接入网关心的是「信号好不好」「怎么传」。把这两者分开,核心网升级时不用动基站,基站升级时不用动核心网。
避坑指南:我曾经在移植协议栈时,把NAS层的定时器配置错了。结果设备在信号不好的地方频繁发起TAU,导致功耗飙升。记住,NAS层的参数(比如T3412、T3402)直接影响设备的待机功耗,一定要根据实际场景调整。
2.4 协议栈各层之间的交互
层与层之间怎么通信?通过SAP(Service Access Point,服务接入点)。每个SAP定义了一组原语(Primitive),比如请求、指示、响应、确认。
举个例子,RRC层要发一条系统消息给物理层:
- RRC层调用MAC层的服务原语
- MAC层再调用PHY层的服务原语
- PHY层把数据编码后发出去
反过来,物理层收到数据后,逐层向上传递,直到RRC层解析出系统消息。
这种设计的好处是:每一层只需要知道怎么调用下层接口,不需要关心下层怎么实现。我在做协议栈移植时,经常只需要改PHY层和MAC层的驱动代码,上层基本不用动。
总结一下:
- 分层模型让协议栈可维护、可扩展
- 控制面管信令,用户面管数据,两条路并行
- NAS管核心网交互,AS管无线接入,各司其职
下一章,我们会深入RRC层,看看NB-IoT的连接管理到底是怎么做的。到时候我会分享一个实际项目中RRC状态机调优的案例,很有意思。
好了,这一章就到这里。记住,理解协议栈的总体架构,是后续所有移植和优化工作的基础。如果你在项目中遇到协议栈相关的问题,欢迎随时交流。