1. NAS协议栈概述:5G核心网架构、NAS协议在协议栈中的位置、NAS消息类型与分类、NAS层与RRC层/AMF的交互关系
各位同学,大家好。我是你们的老朋友,一个在通信协议栈里摸爬滚打了十几年的工程师。今天咱们正式开始《协议栈NAS层开发与核心网对接实战》的第一章。
说实话,NAS层(Non-Access Stratum,非接入层)是5G核心网和终端之间最直接的“对话通道”。很多刚入行的朋友,一上来就被各种SBI接口、N1/N2接口搞晕了。我个人习惯是,先别急着看细节,先把NAS层在整个系统里的位置搞清楚。说白了,你连它站在哪儿、跟谁说话都不知道,后面怎么调代码?
1.1 5G核心网架构速览
先看一张图,这是我手绘的5G核心网简化架构。别嫌丑,重点看NAS层的位置。
这张图里,我特意把NAS层用红色虚线框标出来了。你看,UE和AMF之间有一条直接的逻辑通道,这就是NAS层。基站gNB只是透传,不解析NAS消息内容。嗯,这里要注意:gNB只负责把NAS消息封装在RRC消息或NGAP消息里转发,它看不懂里面是什么。
1.2 NAS协议在协议栈中的位置
咱们把协议栈从上到下捋一遍。我个人习惯用“三明治”来理解:
- 最上层:5G核心网的控制面功能(AMF、SMF等),它们通过NAS消息和UE沟通。
- 中间层:NAS层本身,它负责会话管理、移动性管理、鉴权等核心功能。
- 最下层:接入层(AS),包括RRC层、PDCP层、RLC层、MAC层和物理层。
说白了,NAS层就是“大脑”,负责决策;RRC层是“手脚”,负责执行。我在项目中遇到过不少同事,把NAS和RRC的职责搞混了。比如,UE注册流程中,NAS层决定“我要注册”,然后通过RRC层把注册请求发出去。RRC层只负责“怎么发”,不负责“发什么”。
关键点:NAS消息在空口上是被封装在RRC消息里的。具体来说,UE把NAS PDU(Protocol Data Unit)塞进RRC消息的dedicatedInfoNAS字段中,然后发给gNB。gNB再把它封装进NGAP的UplinkNASTransport消息,发给AMF。
1.3 NAS消息类型与分类
NAS消息分两大类,这是3GPP TS 24.501里定义的。我刚开始学的时候,觉得分类特别多,后来发现其实就两大块:
| 消息类型 | 协议鉴别符 | 主要功能 | 常见消息举例 |
|---|---|---|---|
| 移动性管理 (5GMM) | 0x7E | 注册、去注册、TAU、鉴权、身份识别 | REGISTRATION REQUEST, AUTHENTICATION REQUEST |
| 会话管理 (5GSM) | 0x2E | PDU会话建立、修改、释放 | PDU SESSION ESTABLISHMENT REQUEST |
你想想看,为什么要把移动性和会话管理分开?
我在项目里踩过一个坑:UE在空闲态时,如果收到一条SM消息,但MM状态还没建立,那这条SM消息就会被丢弃。因为SM消息必须建立在MM上下文之上。所以,协议栈开发时,一定要先处理MM状态机,再处理SM状态机。顺序搞反了,信令流程就乱了。
避坑指南:我曾经在调试一个PDU会话建立失败的问题时,发现UE一直收不到AMF的响应。抓包一看,原来是NAS消息里的协议鉴别符写错了。5GMM消息的协议鉴别符是0x7E,5GSM是0x2E。写反了,AMF直接丢弃。这种低级错误,排查起来最费时间。
1.4 NAS层与RRC层/AMF的交互关系
NAS层不直接和RRC层通信,而是通过一个叫“NAS层与AS层之间的服务原语”的接口。说白了,就是NAS层告诉RRC层:“我要发一条消息,你帮我传出去。”RRC层收到后,再告诉NAS层:“消息已经发出去了,或者收到了回复。”
具体交互流程是这样的:
- UE侧:NAS层构造NAS PDU → 调用原语发给RRC层 → RRC层封装进RRC消息 → 通过空口发给gNB。
- 网络侧:gNB收到RRC消息 → 提取NAS PDU → 封装进NGAP消息 → 发给AMF。
- AMF侧:AMF解析NAS PDU → 处理 → 构造响应NAS PDU → 原路返回。
这里有个细节,我特别想强调:NAS消息在空口上是加密的。RRC层只负责透传,它看不到NAS消息的内容。加密和解密都在NAS层完成。嗯,这也是为什么NAS层被称为“非接入层”——它不依赖接入技术,不管你是4G还是5G,NAS层的逻辑基本一致。
注意事项:在开发NAS层代码时,一定要处理好NAS消息的序列化和反序列化。3GPP TS 24.501里对NAS消息的编码格式有严格规定。我见过有人把IE(信息元素)的顺序搞反了,结果AMF解析出来的内容全是错的。记住:NAS消息是TLV(Type-Length-Value)格式,顺序不能乱。
1.5 本章小结
好了,第一章的内容就到这里。咱们回顾一下:
- NAS层是UE和AMF之间的逻辑通道,gNB只透传。
- NAS消息分5GMM和5GSM两大类,分别处理移动性和会话管理。
- NAS层通过服务原语与RRC层交互,消息在空口上加密传输。
下一章,咱们会深入NAS消息的编码格式,手把手教你如何构造和解析一个NAS PDU。到时候我会拿出我当年调试时用的“土办法”,保证你一听就懂。