资讯动态

5G信令流程解析实战:从NAS、RRC到NGAP的日志分析与排障指南

发布时间:2026/10/14 20:51:13 来源:尧图企业网站定制
简介《5G信令流程解析信息介绍及学习技巧》面向5G通信初学者及相关从业者集中讲解信令流程中的关键概念与学习方法帮助读者理解用户终端、基站、核心网等通信实体及其交互机制。文档从背景知识出发阐述5G相对前代在速率、延迟和连接密度上的变化并区分控制信令与用户数据信令随后梳理接入、鉴权与安全、移动性管理、资源分配与调度及服务质量保障等主要环节。同时给出系统学习网络架构与协议体系、深入理解各流程原理、借助仿真软件观察信令过程、分析实际案例以及持续跟踪最新技术动态等建议便于构建完整认知框架。资源为单份docx文档压缩包仅约11KB内容结构清晰适合自学或培训参考。该资源已被402人浏览学习。1. 从抓包恐惧到信令定位5G信令流程解析到底在解什么刚转 5G 优化的那阵子我最怕的就是抓回来的日志里那几百条NAS、RRC、NGAP消息叠在一起。跑一趟路测日志文件动辄几百 MB打开全是十六进制根本看不出终端是死在第几步流程上。后来带我的某导师扔给我一句话别把信令当代码读把它当对话看。这句话算是把我从黑匣子里拽了出来。5G 信令流程解析说白了就是搞清楚终端和网络之间每一步握手在说什么、顺序对不对、谁回得慢、谁拒绝了谁然后顺着这条链去定位接入失败、切换掉线、时延过高这类问题。这篇文章我不会讲理论教科书而是按我自己做优化的路子来先把 5G 信令的骨架搭起来再拿注册流程当样本从头到尾解一遍然后给出一套能直接上手的日志分析命令和工具链最后把这几年前前后后踩过的坑翻出来。适合刚入行的网优、终端协议测试工程师以及做核心网信令分析但想补无线侧知识的同学。读完你至少能拿到一份可复现的解析路径而不是对着Wireshark或者后台信令追踪界面发呆。2. 先立住骨架5G 信令协议栈与必须记住的流程清单2.1 协议分层一条信令消息到底经过哪些“翻译官”5G 信令和 4G 最大的区别不是多了一个NGAP口而是从终端到核心网信令走的是两套完全独立的协议栈。接入网侧终端和基站之间走RRC无线资源控制承载在空口的SRB上传基站到核心网之间走NGAP承载在SCTP连接上。这两段由基站做桥接——基站把空口收到的RRC消息里的NAS信元原封不动地封装进NGAP消息里再发给核心网的接入管理功能。很多初学者卡在第一关就是没分清NAS和RRC属于不同分层。NAS非接入层消息是终端和核心网之间的对话内容它不关心自己是怎么在空口传的只关心业务层语义RRC接入层则负责无线资源的管理比如建立信令承载、配置测量、触发切换。抓包时RRC消息能直接在空口日志里看到NAS消息则被藏在RRC的某个信息元素里面需要解包才能看到完整内容。到了NGAP那一段核心网看到的又是另一层结构。理解这条链路对排障特别关键。比如终端上报了RRC Setup Complete里面带了NAS Registration Request但核心网迟迟不回Initial Context Setup Request问题多半不在空口而在接入网和核心网之间的配置或鉴权流程上。反过来RRC Reject带Wait Time那基本就是基站侧资源或准入策略的问题。分层意识决定排查方向这是我第一条经验。我用一个表把日常要接触的协议层整理出来方便对照协议层主要消息/接口在信令流程中扮演的角色常见分析工具入口NAS/5GMMRegistration Request、Authentication Response、Identity Response终端与核心网之间的移动性、鉴权、会话管理后台信令追踪、Wireshark 的 NAS 解析器RRCRRCSetupRequest、RRCSetupComplete、MeasurementReport空口连接建立、测量控制与上报路测软件、基站日志、终端日志NGAPInitialUEMessage、InitialContextSetupRequest、HandoverRequired基站与核心网之间的接口信令核心网侧抓包、NGAP over SCTPHTTP/2N2/N1/N8 等接口的自定义消息服务化架构下核心网内部交互信令跟踪时出现核心网信令追踪平台2.2 核心流程清单注册、切换、会话建立先记这三个5G 信令流程有一大串但从排障频率来看真正需要做到肌肉记忆的是三个流程注册流程、切换流程、PDU 会话建立流程。注册流程是终端入网的“准入证”几乎所有附着类故障都出在这里切换流程是移动性体验的命门掉话、卡顿多数和它相关PDU 会话建立流程决定用户能不能真正上网很多“有信号没数据”的问题就是卡在它上面。注册流程里我建议把注意力放在四个关键节点上RRC Setup是否成功、Initial UE Message是否携带了完整的注册请求、鉴权流程是否走完、核心网是否回了Registration Accept。如果走到Identity Request/Response那通常是终端标识问题比如SUCI加密方式配置不一致。切换流程则盯住源基站的Handover Required和目标基站的Handover Request Acknowledge——只要中间隔了一条Handover Preparation Failure问题基本出在目标侧的资源或者Xn/NG接口配置。PDU 会话建立相对独立失败多集中在核心网侧的PDU Session Establishment Reject原因值往往是Missing or unknown DNN或者Insufficient resources。前者查用户签约数据后者查 UPF 资源。不要把信令流程当线性清单背要按“失败发生在哪一层、对应用户什么现象”来组织记忆。3. 用注册流程当解剖样本NAS、RRC 到 NGAP 逐段解读3.1 一次完整注册流程的消息顺序与各层对应关系决定用注册流程做样本是因为它是每个终端开机后必然执行的流程日志最好抓、解析路径最标准。下面是我在模拟项目X中常用的一条抓包命令用来同时记录终端侧和基站侧日志# 终端侧日志抓取需要在终端的诊断模式下执行 # 抓取 LTE/NR 空口信令输出到 pcap 文件 diag_logger -c nr_rrc_log.cfg -t pcap -f /tmp/ue_log.pcap # 基站侧 SCTP 抓包NGAP 消息承载在 SCTP 上 # 需要确认本机网卡和核心网对端 IP sudo tcpdump -i eth0 sctp port 38412 -w ngap_trace.pcap # 如果没有 tcpdump 权限可以用 Wireshark 的 dumpcap # dumpcap -i eth0 -f sctp port 38412 -w ngap_trace.pcap上面命令里diag_logger是终端诊断工具的通用命令实际产品可能有差异但思路一样先把空口RRC层日志导成标准 pcap。tcpdump抓SCTP 38412是因为NGAP协议默认跑在这个端口上。如果你抓到的包没有38412而是别的端口那说明核心网侧改了SCTP端口配置需要去核对对接参数。拿到双端日志后消息顺序基本长这样RRCSetupRequest→RRCSetup→RRCSetupComplete携带 NAS Registration Request→InitialUEMessage封装 NAS→Authentication Request/Response→Security Mode Command/Complete→Registration Accept→RRC Reconfiguration配置 SRB2/DRB理解这段顺序是排障的前提。每个箭头都是一次完整的握手指令任何一步失败用户侧的表现都是“无法驻留”或“注册失败”。实际排障时我会把每条消息的到达时间差记下来超过 500ms 就得怀疑是链路问题还是核心网处理慢。3.2 NAS 与 RRC 层的核心信元哪些字段必须一眼认出把日志打开后不能从上往下无脑读要有目的地找几个关键信元。NAS层的Registration Request里有5GS registration type、SUCI、requested NSSAI这几个决定终端要干什么、用什么身份入网、想注册哪种切片。RRCSetupComplete里最关键的是selected PLMN-Identity和registered AMF前者能看出终端选错了运营商还是网络没广播后者能快速确认核心网有没有给终端分配 AMF。我自己看日志的习惯是固定搜索这八个十六进制特征值开头的字段7e 01NAS 注册请求消息体起始7e 02注册接受消息体起始7e 41鉴权请求7e 42鉴权响应7e 45安全模式命令7e 46安全模式完成27 xxDL NAS Transport通常用于传递核心网下发的配置2a xxRRC 重配置这些特征值在 Wireshark 里可以直接用frame contains 7e01过滤。看信令不用逐条翻译先按特征值锁定消息类型再展开看关键字段效率能翻好几倍。拿Registration Accept来说展开后主要看TAI list、allowed NSSAI、registration timer这三个参数前两个不对会直接导致终端无法建立业务第三个设置太短会让终端频繁注册对电池和信令负载都不友好。3.3 用 Python 脚本把 pcap 里的关键事件抽成时间线手动逐条翻日志太慢我一般会写个脚本把 pcap 里的 NAS 消息抽出来按时间排成一条可读的时间线。下面这个脚本基于scapy能解析SCTP里的NGAP消息并匹配NAS内容输出的结果就是一条信令时序。from scapy.all import * import re def extract_nas_info(packet): # 只处理 SCTP 协议的数据包 if not packet.haslayer(SCTP): return None # 获取原始负载 payload bytes(packet[SCTP].payload) # NGAP 消息的 PDUs 层不固定这里用正则匹配 NAS 消息头 # NAS 消息头常见特征值见前文 nas_patterns { Registration Request: b\x7e\x01, # 7e 01 Registration Accept: b\x7e\x02, # 7e 02 Authentication Request: b\x7e\x41, Authentication Response: b\x7e\x42, Security Mode Command: b\x7e\x45, } for msg_name, pattern in nas_patterns.items(): if pattern in payload: return { time: float(packet.time), msg_type: msg_name, raw_len: len(payload), } return None def build_timeline(pcap_file): packets rdpcap(pcap_file) events [] for pkt in packets: info extract_nas_info(pkt) if info: events.append(info) # 按时间排序输出时间线 events.sort(keylambda x: x[time]) for ev in events: print(f[{ev[time]:.3f}] {ev[msg_type]} (负载长度: {ev[raw_len]})) if __name__ __main__: build_timeline(ngap_trace.pcap)这段脚本的逻辑很简单遍历 pcap 里所有SCTP包在原始负载里用NAS消息头的特征字节匹配消息类型命中就记录时间和类型。raw_len字段可以帮你快速判断消息是不是带完整信元——如果注册请求只有几十字节多半是缺了requested NSSAI或UE usage setting这类缺字段的情况在定制终端里特别常见。参数方面要注意rdpcap会把整个 pcap 读入内存几百 MB 的大文件会卡死所以我实际跑的时候会改成PcapReader逐包读取或者用tcpdump先按SCTP port 38412过滤缩小范围。正则匹配虽然简单但NAS消息体里可能携带二进制内容偶尔会误匹配到PDU用户面的字节所以我在这里加了SCTP层过滤能挡掉大部分误报。4. 让信令开口说话日志过滤、解码配置与时间线对齐4.1 Wireshark 里 5G 信令分析的必备显示过滤器拿到 pcap 后第一件事不是看包而是配好显示过滤器。Wireshark 对NAS和NGAP的解析需要依赖协议首选项路径是Edit → Preferences → Protocols → NGAP把SCTP Port值改成38412。不改这个抓到的SCTP包只会被识别成普通数据流NGAP解析器根本不会触发。我用得最频繁的过滤器有这几种场景ngap只看NGAP消息快速定位基站到核心网的信令。ngap.procedureCode 5只看初始上下文建立流程procedureCode 5对应Initial Context Setup注册流程的承接就靠它。nas_5gs只看5G NAS消息但注意这里需要在 NAS 解析器里打开Try HEURISTIC选项否则部分封装在NGAP里的 NAS 包不会被识别。frame.time_delta 0.5过滤出相邻消息间隔超过 500ms 的包这招在找异常时延时特别管用。如果你用的是公司后台信令追踪系统没有 Wireshark那思路也一样把接口、过程类型、消息类型三个维度做成组合过滤条件。先宽后窄先看全貌再定位单条这是无论用什么工具都不变的分析路径。4.2 双端日志时间对齐基站日志和终端日志差 3 秒的教训做信令解析最容易翻车的就是时间对不齐。终端日志用的是终端本地时间基站日志用的是基站绝对时间核心网日志又是另一套时区。有次我拿到一版数据终端侧显示RRC Setup Request在 10:00:01 发出基站侧却显示 10:00:04 才收到排查半天以为是随机接入时延后来才发现是终端日志时区设置成 UTC8基站日志用的 UTC整整差 8 小时但显示时分秒一致时又很难一眼看出来。我现在处理双端日志的第一步永远是统一时间基准。做法是先在路测软件里导出一段 GPS 时间戳然后按ta定时提前量和RRC Setup Request的到达时间反推对齐偏移。更省事的办法是抓一个已知流程做锚点比如用RRCSetupRequest同时在两端日志里出现的时刻把偏移算出来再整段日志平移。这个偏移量不一定是整数秒因为终端开机时间和基站帧号不是严格同步的所以我会用毫秒级偏移反复校准。时间对齐是信令分析的地基地基歪了后面所有用时统计都是白算。判断问题到底在空口还是核心网全靠两端时间差来判断。空口侧 20ms 以内的响应都属于正常超过 100ms 就要重点排查。4.3 建立自己的排障窗口把信令、日志、指标三屏联动很多新人看信令只看信令本身这其实不够。信令只是记录了“发生了什么”但“影响多大、用户感觉如何”要靠指标和数据面去衡量。做了一两年后我习惯开三块屏第一块放信令时间线第二块放空口物理层指标RSRP、SINR、BLER第三块放核心网侧的用户面日志。三者联动才能解释“为什么信令流程正常但用户还是卡”。举个例子注册流程全部走完了Registration Accept也回了但用户视频还是打不开。这时候单独看信令是看不出问题的——你需要看 PDU 会话建立之后的DRB配置再对一下物理层的CQI上报如果CQI偏低但信令里分配的MCS偏高那问题大概率在下行调度的链路自适应配置上。信令负责告诉你“网络想怎么做”无线指标负责告诉你“实际能不能做到”两者缺一不可。我一般会用一个小脚本做联动统计把同一时间窗口内的信令事件和指标采样对齐看是否存在“信令正常但指标恶化”的窗口。这种窗口往往是瞬时干扰或者波束配置问题光靠信令分析是抓不到的。5. 解析翻车现场5G 信令流程里最容易踩的 5 个坑5.1 坑一盲目套用 4G 的 EMM 流程思想从 4G 转过来的同学最容易犯的第一个错就是把Attach流程的思维直接搬过来。5G 注册流程虽然长得像 Attach但语义完全不同5G 的Registration不只管附着还管移动性更新、周期性更新和紧急注册。也就是说终端可能已经完成注册只是因为移动出当前TA范围重新发一个Registration Request原因值是mobility registration updating。如果你还按“首次附着失败”去查方向就偏了。现象看到Registration Request就默认终端是离线刚开机实际上终端可能一直在线只是跨 TA 触发更新。原因没有看5GS registration type信元它是initial registration、mobility registration updating还是periodic registration updating决定排查方向。解决展开消息先看registration type再做下一步判断。5.2 坑二在 Wireshark 里搜不到 NAS 消息觉得是工具坏了某开发者第一次拿 SCTP 抓包文件找我说 Wireshark 里过滤nas_5gs一条都出不来。我看了眼文件SCTP 端口 36412而 Wireshark 默认的 NGAP 端口是 38412解析器根本没激活。现象过滤nas_5gs或ngap没有结果但原始数据里明显有信令内容。原因NGAP 解析器没识别出传输端口导致上层 NAS 没有挂载到正确的协议树。解决在Preferences → Protocols → NGAP → SCTP Port里加上实际端口或者干脆用frame contains 7e01直接搜 NAS 特征字节先确认包里有货再调解析配置。5.3 坑三看到 Authentication Reject 就怀疑核心网其实是终端侧网络切片问题有一次排查某个注册失败的问题信令停在Authentication Reject后台工程师第一反应是查核心网用户数据。结果查了一圈签约数据正常、鉴权向量正常最后发现是RFSP index和终端的NSSAI配置对不上导致核心网在下发Registration Accept前做切片准入检查时拒绝。现象信令流程始终走不到Registration Accept卡在鉴权环节表现为Authentication Reject或Downlink NAS Transport里的原因值异常。原因NSSAI网络切片选择辅助信息不在用户的签约切片范围内核心网直接拒绝后续流程。解决查requested NSSAI和签约的Subscribed NSSAI做交集如果为空要么终端修改切片配置要么核心网调整签约数据。5.4 坑四切换失败只看 Handover Required忽略目标小区的上下文准备切换类问题是最容易误判的。不少人看到源基站发了Handover Required但是Handover Request Acknowledge一直没回来就断定是链路问题。实际上Handover Preparation Failure里带的Cause才是关键最常见的是目标侧Insufficient UpLink Quality或者No Radio Resources Available。现象信令卡在切换准备阶段Handover Command迟迟不下发用户感知掉线。原因目标基站或目标 AMF 的准入策略拒绝了切换请求根本原因可能在Xn接口配置、目标小区负载或QoS Flow参数不匹配。解决展开Handover Preparation Failure里的Cause如果是Radio Network Layer的原因优先查目标小区资源如果是Transport Layer的原因查两站之间的链路配置。5.5 坑五忽视 Security Mode Command 之后的完整性保护失配Security Mode Command之后所有 RRC 和 NAS 消息都做完整性保护。如果配置不当会出现消息解不开、完整性校验失败然后用日志里根本看不到任何信令。现象Security Mode Complete发出去之后终端就没有后续消息了空口日志也看不到RRC Reconfiguration像是一头撞进了死胡同。原因安全上下文里的integrity protection algorithm不匹配或者COUNT重置导致校验失败。这种问题在自定义终端或者核心网升级时特别容易出现。解决在终端侧打NAS Security相关的调试日志确认KRAS和NAS COUNT初值同时让核心网侧打印安全上下文逐项比对算法标识符和密钥长度。6. 把学习技巧固化成肌肉记忆自建信令解析工作台的最后一公里我见过最快的成长路径不是看文档而是把最近一次失败的信令分析做成自己的模板。每次遇到新问题我会按四个步骤收尾第一步把这次失败的原因和对应信令特征写进一张表第二步把当时的 pcap 切出一个最小复现片段第三步用自己的解析脚本重新跑一遍确认输出的时间线能完整还原问题第四步把结论写成交接文档下次其他人遇到类似问题直接查表。这张表的前三行通常是固定结构问题现象、信令特征、判断结论。比如“注册失败”特征是收到Registration Reject、原因值#11 PLMN not allowed结论是终端选择的 PLMN 不在允许列表里“切换后无数据”特征是RRC Reconfiguration里没带DRB配置结论是目标侧 QoS 映射失败“有信号无法注册”的另一种表现是RRC Setup反复重发结论是随机接入竞争冲突或PRACH参数配置不当。最后传授一个我自己的习惯每看完一条异常信令强制自己写出它的上一跳和下一跳是什么。只要写不出来就说明还没吃透这条流程。这个习惯看似笨但能逼着你把流程串成链而不是孤立地记消息。想快速入门 5G 信令最忌讳的就是不抓真包、只看截图。我到现在还保留着把每次路测 pcap 归档的习惯三个月后再翻出来对比能明显看出网络行为的变化。信令分析这行很多时候翻车翻得多了反而心里更有底。每一次流程走到某个节点停了都是在告诉你前一步哪个参数埋了雷。希望这篇文章能帮你少走点我当年绕过的弯路。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑