4、NB-IoT协议栈概览:分层模型与主要功能
好,咱们进入正题。这一章我打算带你从整体上看看NB-IoT的协议栈长什么样。说白了,就是数据从你的芯片里发出去,到基站收到,中间到底经历了哪些“关卡”。
很多初学者一上来就扎进物理层,结果越看越懵。我个人习惯是,先看全局,再抠细节。就像盖房子,你得先知道有几层楼,每层是干嘛的,再去看钢筋水泥怎么铺。
4.1 协议栈的整体分层
NB-IoT的协议栈,跟LTE是一脉相承的。从上到下,一共六层:
- NAS层(非接入层)—— 跟核心网打交道
- RRC层(无线资源控制层)—— 管连接的
- PDCP层(分组数据汇聚协议层)—— 加密、压缩
- RLC层(无线链路控制层)—— 分段、重传
- MAC层(媒体接入控制层)—— 调度、复用
- 物理层—— 真正发信号的地方
嗯,这里要注意,NAS层和RRC层属于控制面,负责信令交互。PDCP、RLC、MAC、物理层属于用户面,负责数据收发。你想想看,打电话和发短信,走的是不同的路。
核心观点:每一层都只跟相邻层通信。上层把数据交给下层,下层处理完再往上送。这叫“对等层通信”,但实际干活的是相邻层。
4.2 物理层——最底层的硬功夫
物理层,说白了就是管“怎么把0和1变成无线电波发出去”。NB-IoT的物理层跟LTE比,做了大量简化。
我记得第一次调NB-IoT的射频参数时,发现它的带宽只有180kHz。一个LTE资源块的大小。这意味着什么?意味着它一次只能传很少的数据,但换来的是超强的覆盖能力。
物理层主要干这几件事:
- 调制解调: BPSK、QPSK,简单粗暴
- 资源映射: 把数据放到指定的时频资源上
- 同步: 小区搜索、时频同步
- 功率控制: 省电的关键
避坑指南: 我曾经在调试时发现设备死活搜不到网络,最后发现是物理层的同步信号没对上。NB-IoT的同步信号位置跟LTE不一样,别拿LTE的经验硬套。
4.3 MAC层——调度与随机接入
MAC层在物理层上面一层。它的核心工作是:谁什么时候能发数据。
NB-IoT的MAC层跟LTE最大的区别是:它不支持动态调度。什么意思?就是基站不会频繁地给你分配资源。你大部分时间都在用“半静态调度”或者“竞争随机接入”。
MAC层的主要功能:
- 随机接入: 设备第一次上网,得先“敲门”
- 调度: 基站告诉你什么时候发
- HARQ: 混合自动重传,错了就重发
- 复用: 多个逻辑信道的数据拼在一起发
你想想看,成千上万个NB-IoT设备同时要发数据,MAC层要是调度不好,就全撞车了。我见过一个项目,就是因为随机接入参数没配好,导致设备频繁冲突,功耗居高不下。
4.4 RLC层——分段与重传的保障
RLC层在MAC层上面。它的工作很纯粹:把上层的数据切成合适的大小,或者把收到的碎片拼回去。
为什么需要分段?因为物理层一次能传的数据量有限。NB-IoT的传输块大小(TBS)通常只有几百字节。你一个IP包可能1500字节,不分段根本塞不下。
RLC层有三种模式:
| 模式 | 特点 | 适用场景 |
|---|---|---|
| TM(透明模式) | 不做任何处理,直接透传 | 广播消息 |
| UM(非确认模式) | 分段但不重传 | VoLTE语音(NB-IoT很少用) |
| AM(确认模式) | 分段+重传,保证可靠 | 数据业务(大部分场景) |
注意: NB-IoT的RLC层缓冲区很小。我曾经遇到过设备因为RLC层缓存溢出导致丢包,后来发现是上层应用发数据太快了。解决方案是在应用层做流控。
4.5 PDCP层——加密与头压缩
PDCP层,名字很长,但活儿不多。主要两件事:加密和头压缩。
加密是为了安全。你的数据在空中飘着,谁都能收到。不加密的话,别人拿个频谱仪就能把你的数据解出来。NB-IoT用的加密算法跟LTE一样,是AES或SNOW 3G。
头压缩是为了省带宽。IP包的头有40字节(IPv6更大),但NB-IoT一次可能只能传100字节。头压缩能把40字节压缩到2-4字节。这个技术叫ROHC(鲁棒性头压缩)。
我个人习惯是,在调试阶段先把加密关掉,方便抓包分析。但量产时必须打开,这是底线。
4.6 RRC层——连接管理大师
RRC层是控制面的核心。它管着设备的状态和连接。
NB-IoT的RRC状态比LTE简单,只有两种:
- RRC_IDLE: 省电模式,设备大部分时间都在这个状态
- RRC_CONNECTED: 正在收发数据
没有LTE那种RRC_INACTIVE状态。所以NB-IoT设备每次发数据,都得从IDLE状态爬起来,建立连接,发完再睡回去。这个过程叫“状态迁移”,是功耗的大头。
RRC层还负责:
- 系统消息广播: 基站告诉设备网络参数
- 寻呼: 基站叫醒沉睡的设备
- 连接建立/释放: 握手和再见
经验之谈: 我曾经优化过一个水表项目,发现设备频繁进入CONNECTED状态,每次只发几十字节数据。后来调整了RRC释放定时器,让设备发完数据后多等一会儿,如果有新数据就不用重新建连了。功耗降了30%。
4.7 NAS层——跟核心网对话
NAS层是最高层,它不跟基站直接通信,而是跟核心网(EPC)对话。基站只是帮它传话。
NAS层主要做三件事:
- 附着: 设备注册到网络,拿到IP地址
- 鉴权: 证明你是合法用户
- 会话管理: 建立数据通道(EPS承载)
你想想看,设备第一次开机,先发一条NAS消息给核心网:“我要上网”。核心网检查你的SIM卡,分配IP,然后说“好了,你可以上了”。这个过程就是附着。
NAS层的消息是加密的,所以你在空口抓包时,看到NAS PDU是一堆乱码。别慌,那是正常的。
4.8 各层之间的协作
说了这么多层,它们到底怎么配合?我给你画个数据流:
- 应用层产生数据(比如水表读数)
- 数据经过IP封装,交给NAS层
- NAS层建立EPS承载,交给PDCP层
- PDCP层加密+头压缩,交给RLC层
- RLC层分段(如果需要),交给MAC层
- MAC层加上调度信息,交给物理层
- 物理层调制成无线电波,发出去
接收端反过来:物理层收到信号,解调,逐层往上送,直到应用层拿到原始数据。
一句话总结: 每一层都只关心自己的事,不越级。这就是分层模型的好处——各司其职,出了问题也好排查。
好了,这一章我们搭好了协议栈的骨架。下一章,我会带你深入物理层,看看NB-IoT到底是怎么在180kHz带宽里玩出花样的。