简介:这份文档面向5G网络优化工程师、核心网测试人员及通信专业学习者,聚焦NR网络中终端注册与初始注册流程这一关键环节,帮助读者理解UE开机后如何在5GC的AMF完成注册、建立用户上下文并接受服务。内容系统梳理了开机初始注册、移动更新注册与周期性注册三类注册类型,并按无线接入、鉴权加密、注册请求、注册完成四大步骤拆解初始注册流程,同时给出NrnasOtaMsgInterface-MSG报文字段示例,涵盖协议版本、NAS消息大小、安全头类型、注册类型及SUPI等移动身份信息,便于对照实际信令抓包分析。资源包为1个docx文档,约224KB,结构紧凑、便于查阅。目前已有1135人学习下载,适合用于网络规划、故障排查与性能调优时快速查阅注册流程细节,也可作为5G核心网信令学习的参考材料。
1. 5G(NR)注册流程拆解:从开机到 AMF 授权的四步链路
手里这份《5G(NR)网络用户注册及初始注册流程.docx》不是那种泛泛讲概念的科普材料,它把 UE 开机后怎么一步步在 5GC 里完成注册、NAS 报文长什么样、每个字段什么含义都摊开写了。做过 5G 网络优化的人都知道,注册失败是路测里最让人头疼的问题之一——终端显示有信号但就是上不了网,后台信令一看卡在 Registration Request 或者 Authentication 环节。这份文档的价值在于,它把初始注册拆成无线接入、鉴权加密、注册请求、注册完成四个阶段,并且给了一段真实的 NrnasOtaMsgInterface-MSG 报文逐字段解析,从 extended-protocol-discriminator 到 SUCI 里的 MCC/MNC 编码都能对上。适合谁看?做 5G 网络规划、故障排查、性能调优的工程师,以及需要理解 NAS 层信令交互的协议栈开发人员。下面我按「这是什么 → 怎么用 → 坑在哪」的顺序,把这份文档里的关键内容和我自己踩过的坑一起捋一遍。
2. 注册类型与四步流程:先搞清楚 UE 为什么发起注册
2.1 三种注册类型对应的触发条件
5G(NR) 里的注册不是只有开机才做,UE 在不同场景下会发起不同类型的注册。文档里列了三种,我结合实际信令跟踪的经验展开说。
开机初始注册是最常见的。终端刚开机、从飞行模式恢复、或者从非 5G 网络切换到 5G 覆盖区,都会触发 Initial Registration。这时候 UE 和网络之间没有任何上下文,一切从零开始。信令上你能看到 registration-type-value 字段被置为 initial-registration(值 1),follow-on-request 标志位也可能被置起来,表示后续还有请求要发。
移动更新注册(Mobility Registration Update)发生在 UE 移动到一个新的 TAC 小区,而这个新 TAC 不在 UE 之前注册的 TA 列表里。注意,如果新 TAC 还在已注册的 TA 列表内,UE 不需要发起注册更新,这是很多人容易搞混的地方。只有当 UE 离开注册区域时,才会触发移动更新注册,目的是让 AMF 知道 UE 现在在哪个跟踪区,以便后续寻呼能找得到。
周期性注册(Periodic Registration)由周期注册定时器超时触发。这个定时器由网络通过 Registration Accept 消息下发给 UE,UE 在定时器到期后主动发起注册请求,相当于给网络报个平安。如果这个定时器设得太长,UE 长时间不更新,网络侧可能已经把 UE 的上下文释放了,导致下行数据到达时寻呼不到 UE;设得太短,又会增加信令负荷。常见做法是根据业务类型和终端功耗要求来权衡,一般在一个小时到几小时之间。
2.2 初始注册的四个阶段拆解
文档把初始注册流程分成四大步:无线接入(PART1)、鉴权加密(PART2)、注册请求(PART3)、注册完成(PART4)。这个划分和 3GPP 标准里的流程描述基本一致,但文档用更直白的语言把每一步做了什么讲清楚了。
PART1 无线接入阶段,UE 和 gNB 之间先建立 RRC 连接。这一步是 NAS 信令传输的基础——没有 RRC 连接,NAS 消息根本传不出去。UE 在 RRCSetupComplete 消息里会带上 NAS 层的 Registration Request,这是 NAS 消息第一次出现在空口信令里。
PART2 鉴权加密阶段,UE 和网络之间做安全相关的交互。AMF 会发起鉴权流程,验证 UE 的身份是否合法。这一步涉及 AKA(Authentication and Key Agreement)流程,UE 和 AMF 之间要交换鉴权向量。鉴权通过后,双方还会协商 NAS 层的加密和完整性保护算法。如果这一步失败,后面什么都做不了。
PART3 注册请求阶段,UE 向 gNB 发送类型为 InitialRegistration 的 Register Request,携带 SUPI、NSSAI、安全参数等信息。gNB 收到后,根据 UE 提供的 NSSAI 或者根据自身配置选择相应的 AMF,把 UE 的 NAS 信息通过 N2 接口传给 AMF,同时带上 gNB 自身的位置信息、Cell ID 等参数。这一步的关键是 AMF 的选择——选错了 AMF,UE 可能注册到一个不支持其切片需求的 AMF 上,导致注册被拒。
PART4 注册完成阶段,AMF 完成鉴权和授权后,向 UE 发送 Registration Accept,UE 回 Registration Complete,注册流程结束。此时 UE 在 5GC 里有了上下文,可以进行后续的连接管理和会话管理。
2.3 用 Wireshark 抓包验证注册流程
理论讲完了,怎么验证你理解的流程和实际信令对得上?最直接的办法是抓空口信令或者 N2 接口的信令。如果你有测试终端和测试 SIM 卡,可以用 QXDM 或者类似工具抓 NAS 信令;如果在核心网侧,可以在 N2 接口上抓包。
下面是一个用 tshark 过滤 5G NAS 注册消息的示例命令:
# 在 N2 接口上抓包,过滤 NGAP 协议中携带的 NAS 注册请求 tshark -i eth0 -f "sctp port 38412" -Y "ngap.procedureCode == 15" -V # 如果只想看 NAS 层的 Registration Request,可以用这个过滤条件 tshark -i eth0 -Y "nas_5gs.mm.message_type == 0x41" -V第一条命令抓的是 NGAP 协议里 procedureCode 为 15 的消息,对应 Initial Context Setup,里面会携带 NAS 层的 Registration Request。第二条命令直接过滤 NAS 5GS 消息类型为 0x41 的包,0x41 就是 Registration Request 的消息类型编码。参数说明:-i指定网卡,-f是 BPF 过滤条件,-Y是 Wireshark 显示过滤器,-V展开协议树。如果你在测试环境里抓不到包,先确认 N2 接口的 SCTP 端口是不是 38412,以及抓包点是否在 gNB 和 AMF 之间的链路上。
3. 初始注册报文逐字段解析:从十六进制到业务含义
3.1 NrnasOtaMsgInterface-MSG 报文结构
文档里给了一段真实的注册请求报文,我把它拆开逐字段讲。这段报文是 NrnasOtaMsgInterface-MSG 格式,从最外层的消息 ID 到最内层的 SUCI 编码都有。
第一层是消息头。08对应nRMM-OTA-MSG-REGISTRATION-REQUEST,消息 ID 是 2048。ucUpDown为 0x0,表示上行方向。ucVersion为 0x4,协议版本号 4。ulLengthASN为 0x23,即 35 字节,这是 ASN 层消息的总长度。
第二层是 NAS 消息容器。ulNasMsgSize为 0x17,即 23 字节,这是 NAS 消息本身的长度。extended-protocol-discriminator为 0x7e,即 126,这是 5GS NAS 消息的扩展协议鉴别器,用来区分 5GS 和 EPS 的 NAS 消息。sec-header-type为 0,表示安全头类型是 plain,即没有加密和完整性保护——这符合初始注册请求的特点,因为此时还没有建立安全上下文。
第三层是消息体。registrationRequest的起始字节是41,对应消息类型 0x41。nAS-key-set-identifier里的tSC为 0,表示 native security context;nAS-key-set-identifier-value为 7,即 key-set-identifier-value-nO-KEY,说明当前没有可用的密钥集。registration-type字段里,follow-on-request为 1,表示后续还有请求;registration-type-value为 1,即 initial-registration。
第四层是移动身份。nR-mobile-identity的type-of-identity为 1,表示 SUCI;odd-or-even-indic为 0,表示偶数位。SUCI 体里,supi-format为 0,即 SUPI-Format-IMSI;mcc-mnc为 0x64f070,解码出来是 MCC 460、MNC 15,这是中国移动的网络代码。routing-indicator为 0,protection-Scheme-ID为 0,表示 protection-Null-Scheme,即没有加密保护。home-Network-Pub-Key-ID为 0,scheme-Output为全零,说明 SUCI 没有用公钥加密。
3.2 用 Python 解析 NAS 注册请求报文
如果你拿到一段十六进制报文,想快速解析出关键字段,可以用 Python 写个小脚本。下面这个例子解析的是文档里给出的报文片段:
# 解析 5G NAS Registration Request 的关键字段 # 输入是文档中的十六进制报文片段 hex_msg = "084100047E000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 <p> <a href="https://download.csdn.net/download/TXNMG/87911554" style="color:#ec7500;font-size:14px;"> 本文还有配套的精品资源,点击获取 </a> <img alt="menu-r.4af5f7ec.gif" src="https://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif" style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;"> </p>