
简介这份文档面向5G网络优化工程师、通信专业学生及备考认证的技术人员系统梳理了5G NR独立组网SA模式下终端UE从开机到成功附着网络的完整信令流程。资源包内含1个docx文件大小约127KB以图文与消息序列表形式呈现便于对照空口OTA交互逐条理解。内容覆盖同步阶段SSBPSS/SSS/MIB接收、PDCCH与CORESET 0及DCI 1_0解析、SIB1获取、PRACH随机接入前导发送、Msg2随机接入响应、Msg3的RRC Setup Request、Msg4的RRC Setup、NAS层Registration Request、身份验证与安全模式协商直至RRC Reconfiguration携带Registration Accept完成注册并涉及HARQ ACK/NACK反馈机制。读者可借此掌握SA接入各环节的消息方向与作用为现网连接问题定位和信令排查提供清晰参考。目前已有428人学习下载。1. 5G(NR)-SA网络中终端附着到底在做什么从开机到业务跑通的那几秒手机开机、插卡、信号格从无到有这个过程在5G(NR)-SA网络里叫终端附着。很多人以为“注册成功”就等于能上网了其实中间隔着PLMN选择、小区搜索、RRC连接建立、NAS注册、PDU会话建立这一长串动作。SA组网和NSA最大的区别在于SA的控制面信令和用户面数据全部跑在NR上没有LTE锚点所以终端附着流程必须一次走通任何一步卡住都会表现为“有信号但没网”或者“信号满格却打不开网页”。这篇文章面向的是需要做5G终端入网调试、核心网联调、或者5G实训室环境搭建的工程师。我会把SA附着拆成可操作的步骤给出常见参数、抓包观察点和踩坑记录。你不需要有现网权限用开源5G协议栈加一台USRP或者一台支持SA的测试终端就能在实验室里把这条链路跑通。读完你应该能判断附着失败到底卡在RRC、NAS还是PDU会话这一层以及每一层该看什么计数器、改什么参数。2. 从PLMN选择到RRC连接SA附着的信令起点2.1 终端开机后先找谁PLMN选择与小区搜索的优先级逻辑终端开机后的第一件事不是随便找个基站就往上连而是先读SIM卡里的EF_PLMNwAcT和EF_HPLMNwAcT文件拿到归属PLMN列表和优先级。SA网络下终端会按优先级扫描NR频段每个频段上搜索SSB同步信号块解出PCI和MIB再读SIB1拿到PLMN列表和TAC。如果SIB1里的PLMN和SIM卡里的归属PLMN匹配终端才会尝试驻留。这里有个容易翻车的点很多实训室用OAI或者srsRAN搭的SA基站SIB1里只广播了一个测试PLMN比如00101而测试卡写的是46000终端扫到小区但直接判定“禁止驻留”表现就是信号格有但一直注册不上。排查时先确认SIB1的PLMN和卡里是否一致再看TAC是否在核心网AMF的配置范围内。小区搜索阶段的关键参数是SSB的频点和子载波间隔。n78频段常用SCS30kHzSSB的GSCN号必须和基站配置一致。如果终端扫不到SSB先查频点有没有配错再看基站侧SSB功率是否被衰减到终端灵敏度以下。2.2 RRC连接建立SRB1怎么搭起来失败时看什么终端决定驻留后下一步是发起RRCSetupRequest。这条消息通过SRB0发送携带的初始UE标识可能是随机值或5G-S-TMSI。基站回RRCSetup里面包含SRB1的无线资源配置包括PDCCH/PDSCH/PUSCH的公共配置。终端收到后应用这些配置回RRCSetupComplete同时把NAS层的Registration Request捎带上去。这一步最常见的失败是RRCSetupRequest发了但收不到RRCSetup。原因通常有三类一是PRACH根序列或前导格式配错基站根本没解出前导二是TA时间提前量没对齐终端发的信号落在基站接收窗口外三是PDCCH的聚合等级和搜索空间配置不匹配终端解不到调度信息。用OAI做实验时可以在gnb侧看rach_indication的计数如果一直为0说明前导没解出来重点查PRACH配置。如果rach_indication有计数但RRCSetup没发出去看nr_rach_indication之后的调度日志确认CCE分配是否成功。# OAI gNB侧查看RACH和RRC建立相关日志 # 启动gNB时打开详细日志 sudo ./nr-softmodem -O gnb.conf --log_config.phy_log_level debug \ --log_config.mac_log_level debug 21 | grep -E rach_indication|RRCSetup|CCE # 终端侧OAI nr-uesoftmodem查看RRC状态 sudo ./nr-uesoftmodem -O ue.conf --log_config.rrc_log_level debug 21 | \ grep -E RRCSetupRequest|RRCSetupComplete|SRB1上面命令里--log_config.phy_log_level debug打开物理层详细日志grep过滤出RACH指示和RRC建立消息。如果看到rach_indication但后面没有RRCSetup说明MAC层调度有问题检查gnb.conf里pdcch相关配置的aggregation_level和search_space。终端侧如果只看到RRCSetupRequest没有RRCSetupComplete重点看SRB1的logicalChannelConfig里priority和prioritisedBitRate是否配反了。2.3 NAS注册Registration Request里带了什么AMF怎么回RRCSetupComplete里捎带的NAS Registration Request是SA附着的核心。这条消息包含5G-GUTI或SUCI、注册类型初始注册/移动性注册更新、UE能力、请求的NSSAI网络切片选择辅助信息。AMF收到后如果UE用的是SUCI会先走鉴权流程AMF发Authentication Request终端回Authentication Response然后AMF发Security Mode Command终端回Security Mode Complete。鉴权通过后AMF发Registration Accept里面包含分配的5G-GUTI、TAI列表、允许的NSSAI。这一步的坑集中在切片配置上。如果终端请求的S-NSSAI在AMF的配置里不存在AMF会回Registration Reject原因值可能是“Requested NSSAI not available”。表现就是RRC连接正常但NAS注册被拒。排查时先看AMF日志里allowed NSSAI和requested NSSAI的对比再确认核心网侧SMF和UPF是否支持这个切片。另一个常见问题是鉴权算法不匹配。测试卡通常用Milena或OPc如果AMF侧配置的算法和卡里不一致Authentication Request发出去后终端算出的RES和AMF期望的XRES对不上AMF回Authentication Reject。用Wireshark抓NAS包时看Authentication Request里的RAND和AUTN再对比终端侧算出的RES基本能定位。3. PDU会话建立与用户面打通从注册成功到能ping通3.1 PDU Session EstablishmentSMF和UPF怎么配合NAS注册成功后终端还不能上网必须发起PDU Session Establishment Request。这条消息通过RRC上行信息传输捎带上去经过AMF转发给SMF。SMF选好UPF后通过N4接口下发PFCP Session Establishment Request里面包含PDR和FAR规则。UPF回响应后SMF把PDU Session Establishment Accept通过AMF发给终端里面包含分配的UE IP地址、QoS规则和会话AMBR。这一步的关键参数是DNN数据网络名称和SSC模式。DNN通常配成“internet”或运营商自定义的名称如果终端请求的DNN和SMF配置不匹配SMF会回Reject。SSC模式1表示PDU会话锚点不变模式2表示可以先建后断模式3表示先断后建。实验室环境一般用SSC模式1避免切换时IP地址变化导致业务中断。用OAI核心网时SMF的配置文件里dnn列表要和终端请求的一致。UPF侧看pfcp日志确认PDR里的sourceInterface是AccessFAR里的forwardingParameters指向正确的networkInstance。如果PDU会话建立成功但ping不通先查UPF的uesimtun0接口有没有分配到IP再看UPF到DN的upfgtp或ogstun路由是否配通。# OAI核心网侧查看PDU会话建立和UPF规则 # 在SMF容器里看日志 docker logs oai-smf 21 | grep -E PDU Session|N4|PFCP # 在UPF容器里看PFCP会话和接口 docker exec -it oai-upf bash # 查看PFCP会话状态 pfcp_client -i 0 2/dev/null || cat /proc/net/pfcp_sessions # 查看UE IP分配和路由 ip addr show uesimtun0 ip route show | grep uesimtun0上面命令先看SMF日志里PDU会话建立的消息流确认N4接口的PFCP交互是否完成。然后在UPF侧检查uesimtun0接口是否拿到IP以及路由表里有没有指向uesimtun0的默认路由。如果uesimtun0没有IP说明SMF分配的UE IP没有正确下发到UPF检查SMF配置里ue_ip_pool和UPF的subnet是否在同一网段。3.2 用户面数据怎么走GTP-U隧道和QoS流映射PDU会话建立后用户面数据通过GTP-U隧道在gNB和UPF之间传输。gNB侧把UE的DRB数据无线承载映射到GTP-U的TEIDUPF侧根据PFCP规则把下行包封装成GTP-U发给gNB。QoS流通过QFI标识gNB根据SDAP层配置把QFI映射到DRB。这里容易踩的坑是TEID不匹配。gNB侧发的GTP-U包里的TEID和UPF期望的不一致UPF直接丢包表现就是终端能注册、能建立PDU会话但ping不通任何地址。排查时在gNB侧抓gtp-u包看TEID字段再对比UPF侧PFCP会话里localF-TEID和remoteF-TEID的配置。OAI的gNB配置里gtp_u部分的local_s1u_port和peer_port要和UPF的gtpu配置对应。另一个问题是MTU。GTP-U封装会增加外层IP和UDP头如果gNB或UPF的接口MTU没调大大包会被分片或丢弃。实验室环境建议把uesimtun0和gtp接口的MTU设成1500以上或者直接在UPF侧把ogstun的MTU调到1600。3.3 用ping和iperf验证附着是否真正跑通注册成功和PDU会话建立成功只是信令面通了用户面能不能跑业务还得用ping和iperf验证。最直接的方法是在终端侧ping UPF的uesimtun0地址或者外部DN的地址。如果ping通但延迟很高看GTP-U路径上有没有额外的NAT或防火墙。# 终端侧OAI nr-uesoftmodem验证用户面 # 查看分配的IP ip addr show uesimtun0 # ping UPF侧地址 ping -I uesimtun0 -c 10 10.0.0.1 # 用iperf3测吞吐 iperf3 -c 10.0.0.1 -B 10.0.0.2 -t 10 -i 1ping -I uesimtun0指定从UE的隧道接口发包-c 10发10个包。如果丢包严重先看gNB侧gtp-u的统计确认有没有tx_errors或rx_dropped。iperf3的-B参数绑定UE的IP-t 10测10秒-i 1每秒输出一次。如果吞吐远低于预期检查gNB的bandwidth配置和UPF的max_throughput限制。4. 避坑与排查SA附着失败的5个血泪现场4.1 现象终端显示5G图标但无法注册AMF日志无任何消息原因终端驻留的小区PLMN和SIM卡归属PLMN不匹配或者TAC不在AMF的tai_list里。终端在RRC层就拒绝了驻留根本没发NAS消息。解决先看终端侧RRC日志里有没有RRCSetupRequest。如果没有查SIB1的PLMN和TAC。用OAI时gnb.conf里plmn_list的mcc和mnc要和测试卡一致tac要在AMF的tai配置范围内。4.2 现象RRCSetupRequest发了但收不到RRCSetuprach_indication计数为0原因PRACH配置不匹配。常见的是prach_ConfigurationIndex和zeroCorrelationZoneConfig配错或者SSB和PRACH的频域位置偏移不对。解决对比gNB和终端侧的PRACH配置重点看prach_ConfigurationIndex、msg1_FDM、zeroCorrelationZoneConfig。OAI的ue.conf里prach_ConfigurationIndex要和gnb.conf一致。如果用的是USRP还要确认freq_offset没有把PRACH推到接收带外。4.3 现象NAS注册被拒原因值“Requested NSSAI not available”原因终端请求的S-NSSAI在AMF的allowed_nssai列表里不存在或者SMF不支持这个切片。解决在AMF配置里加上对应的S-NSSAI确保amf.conf的plmn_support里slice列表包含终端请求的sd和sst。如果核心网用OAI检查smf.conf的snssai配置是否和AMF一致。4.4 现象PDU会话建立成功但ping不通UPF侧uesimtun0无IP原因SMF分配的UE IP没有通过PFCP下发到UPF或者UPF的uesimtun0接口没起来。解决先看SMF日志里PDU Session Establishment Accept里的ue_ip字段再进UPF容器看uesimtun0是否存在。如果不存在检查UPF启动脚本里ip tuntap add命令有没有执行或者pfcp会话里PDR的sourceInterface是否配成了Access。4.5 现象ping通但iperf吞吐只有几Mbps远低于理论峰值原因GTP-U路径上MTU不匹配导致分片或者gNB的bandwidth配置只有20MHz但终端按100MHz调度。解决把UPF的ogstun和gNB的gtp接口MTU调到1600以上。检查gnb.conf里bandwidth和subcarrier_spacingn78频段100MHz对应SCS30kHz如果配成20MHz峰值速率自然上不去。用iperf3 -u测UDP吞吐排除TCP拥塞控制的影响。5. 进阶用抓包和计数器把附着流程拆到每一层5.1 在gNB侧抓GTP-U和RRC包定位是信令还是用户面问题OAI的gNB支持把GTP-U包导出到pcap文件用Wireshark打开后过滤gtp协议看TEID和QFI字段。RRC包可以通过nr-softmodem的--log_config.pcap选项导出过滤nr-rrc看RRCSetup和RRCSetupComplete的交互。# gNB侧抓GTP-U包 sudo tcpdump -i any -w gtp_u.pcap udp port 2152 # 终端侧抓RRC和NAS包OAI支持pcap导出 sudo ./nr-uesoftmodem -O ue.conf --log_config.pcap ue.pcap # 用tshark过滤RRCSetup tshark -r ue.pcap -Y nr-rrc.RRCSetup -Vtcpdump抓udp port 2152是GTP-U的标准端口-w写入文件。终端侧--log_config.pcap导出所有空口包tshark -Y过滤RRCSetup消息-V展开详细字段。如果RRCSetup里radioBearerConfig的drb-ToAddModList为空说明SRB1建立了但DRB没配PDU会话肯定建不起来。5.2 用AMF和SMF的计数器判断注册和会话建立的成功率OAI的AMF和SMF通过prometheus暴露计数器比如amf_registration_success、smf_pdu_session_established。用curl拉取指标对比成功和失败的计数能快速判断是注册阶段还是会话阶段的问题。# 拉取AMF指标 curl -s http://amf:9090/metrics | grep -E amf_registration|amf_auth # 拉取SMF指标 curl -s http://smf:9090/metrics | grep -E smf_pdu_session|smf_n4如果amf_registration_success为0但amf_auth_failure很高重点查鉴权算法和卡数据。如果smf_pdu_session_established为0但smf_n4_failure高查SMF和UPF之间的PFCP连接确认N4接口的local_ip和remote_ip是否可达。5.3 一个具体技巧用nr-uesoftmodem的--sim参数快速换卡测试OAI的终端支持通过--sim参数指定SIM卡数据不用改配置文件就能切换测试卡。把不同运营商的PLMN、Ki、OPc写进不同的sim.conf启动时用--sim sim_46000.conf加载能快速验证PLMN和鉴权配置。# 用指定SIM卡配置启动终端 sudo ./nr-uesoftmodem -O ue.conf --sim sim_46000.conf \ --log_config.rrc_log_level debug 21 | tee ue_attach.log # 检查附着关键节点 grep -E RRCSetupComplete|Registration Accept|PDU Session Establishment Accept ue_attach.log--sim参数加载的sim.conf里包含mcc、mnc、ki、opc、plmn等字段。tee把日志同时输出到文件和终端grep过滤三个关键节点。如果RRCSetupComplete有但Registration Accept没有问题在NAS鉴权如果Registration Accept有但PDU Session Establishment Accept没有问题在SMF或UPF。我自己的习惯是每次改完核心网配置先跑一遍这个命令把三个关键节点的日志抓出来对比。有一次调切片配置AMF日志里allowed_nssai明明加了新切片但终端一直注册失败最后发现是smf.conf里snssai的sd字段写成了十六进制但AMF里写的是十进制两边对不上。这种问题看日志一眼就能定位比盲猜快得多。希望帮到你。本文还有配套的精品资源点击获取