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 各层之间的协作

说了这么多层,它们到底怎么配合?我给你画个数据流:

  1. 应用层产生数据(比如水表读数)
  2. 数据经过IP封装,交给NAS层
  3. NAS层建立EPS承载,交给PDCP层
  4. PDCP层加密+头压缩,交给RLC层
  5. RLC层分段(如果需要),交给MAC层
  6. MAC层加上调度信息,交给物理层
  7. 物理层调制成无线电波,发出去

接收端反过来:物理层收到信号,解调,逐层往上送,直到应用层拿到原始数据。

一句话总结: 每一层都只关心自己的事,不越级。这就是分层模型的好处——各司其职,出了问题也好排查。

好了,这一章我们搭好了协议栈的骨架。下一章,我会带你深入物理层,看看NB-IoT到底是怎么在180kHz带宽里玩出花样的。