首页 › tech › 把核心网装进笔记本

把核心网装进笔记本:用开源5GC复现现网疑难杂症

概述:现网故障排查最大的瓶颈往往不是“不会修”,而是“复现不了”——日志分散、不能在生产网做实验、问题转瞬即逝。本文讲一套被全球高校实验室和运营商研发部门验证过的打法:用开源5GC(Open5GS)加模拟终端(UERANSIM),在一台笔记本上搭出最小可行的5G核心网试验环境,把注册失败、PDU会话建立失败、寻呼异常这类疑难杂症在实验室里稳定复现,再用抓包对照3GPP规范逐条定位。文章给出工具选型、三个脱敏案例的完整复盘、一套五步复现方法论,以及这套打法的能力边界与红线。

目录

一、现网疑难杂症,最怕“复现不了”

干了十八年核心网,我带过的年轻工程师问得最多的一句话是:“这个故障,我怎么才能再看它一次?”

现网排障有三难。第一难,端到端信令拿不齐。一个注册失败,要看UE发的NAS、基站透传的NGAP、AMF和UDM之间的服务化调用、SMF和UPF之间的N4,网元各自记日志,时间戳不齐、粒度不一,拼出完整时序要靠运气。第二难,不能在生产网上做实验。“要不我们把参数改一下试试?”这句话在任何有变更管理制度的运营商都是找死——生产网不是试验田。第三难,问题转瞬即逝。偶发、跟负载相关、跟特定终端批次相关,等你远程会议室拉齐五个厂家代表,问题已经三天没再出现。

所以我们这一行真正的分水岭,不是谁背规范背得熟,而是谁能把问题“关进笼子里”——在受控环境下让它稳定重现。重现了,根因就跑不掉。

传统做法是申请实验室资源:借测试终端、排厂商测试环境、走内部流程,周期按周计。而最近几年,开源5G核心网栈的成熟,把这件事的门槛拉到了“人手一张试验网”的程度。本文的解读主轴就是这套开源栈:Open5GS——目前社区最活跃的开源5GC项目之一,C语言实现,一套软件把AMF、SMF、UPF、UDM、AUSF、PCF、NRF、NSSF、SCP这些NF全部给齐,还能同时拉起EPC做4G/5G互操作;配合UERANSIM——纯软件实现的UE和gNB模拟器,走标准的NGAP和NAS消息对接核心网。这套组合的官方文档都在Open5GS官网和UERANSIM仓库里公开,部署一整套的文档级成本,已经低于很多商用网元的开局手册。

下面三个案例,取自我在现网遇到过的真实故障类型,为脱敏做了抽象和泛化,数值细节已简化,但不影响方法论本身。

二、笔记本上的最小可行5GC试验网

先说环境长什么样。一台装Linux的笔记本(虚机也行),Open5GS的各个NF以进程或容器跑在本机回环地址上;UERANSIM的gNB进程把SCTP连接指向本机38412端口对接AMF;模拟UE发起注册,成功后操作系统里会多出一块TUN虚拟网卡——你的“手机”就长在笔记本上,用户面数据从TUN口经gNB、走GTP-U隧道进UPF出去。

整个拓扑如下:

flowchart LR
    subgraph LAB["一台笔记本上的试验网"]
        UE["模拟终端 UERANSIM UE"]
        GNB["模拟基站 UERANSIM gNB"]
        subgraph CORE["Open5GS 核心网"]
            AMF["AMF"]
            SMF["SMF"]
            UPF["UPF"]
            UDM["UDM 与 AUSF"]
            NRF["NRF 等其余NF"]
        end
        CAP["tcpdump 抓包点"]
    end
    UE -->|"N1 NAS 消息经 gNB 转发"| GNB
    GNB -->|"N2 NGAP SCTP 38412"| AMF
    AMF -->|"N11 会话创建"| SMF
    SMF -->|"N4 PFCP UDP 8805"| UPF
    GNB -->|"N3 GTP-U 用户面"| UPF
    CAP -.->|"镜像各接口"| GNB

这张图最值钱的地方在右下角那个抓包点:所有接口都在一台机器上,一个tcpdump全收。N1藏在N2里、N4走UDP 8805、N2走SCTP 38412、N3走GTP-U,Wireshark全部原生解码——NAS 5GS、NGAP、PFCP的 dissectors 都是现成的,点开一条注册请求,IE层级和3GPP TS 24.501的正文一一对应。在现网你花三天才能拼出来的信令时序,在这里是一份pcap文件。

工具选型汇总如下(均为开源项目,版本迭代快,以各官方仓库当前发布为准):

工具 角色 实现形态 在本文中的用途
Open5GS 5GC全套NF C语言,进程/容器 被测核心网,配置即代码
UERANSIM 模拟UE与gNB C++,纯软件 批量模拟终端、定向触发信令
free5GC 另一套开源5GC Go语言 交叉验证:行为差异是配置问题还是协议理解问题
srsRAN Project 软件基站 C++,配SDR出真空口 补无线层与真终端场景
Wireshark / tshark 协议解码 图形/命令行 抓包对照3GPP规范逐条比对
iperf3 / ping 用户面验证 命令行 确认PDU会话真的通,而不只是信令成功

free5GC值得单独说一句:它是Go实现的另一套完整5GC。当你在Open5GS上看到一个“奇怪”行为时,把同样配置在free5GC上跑一遍,能立刻区分这是某项目的配置问题,还是你对规范条款的理解有偏差——两套独立实现是最低成本的“对照实验”。

三、案例一:注册失败,原因值29的捉迷藏

现象。某省公司反馈:一批新入网的物联网终端集中注册失败,AMF侧信令跟踪显示Registration Reject,5GMM原因值29——"UE identity cannot be derived by the network"(网络无法导出UE标识,见3GPP TS 24.501)。特征很怪:老批次终端全部正常,新批次全军覆没;终端换到别的省市,有时又能注册上。

现网排查的困境。老工程师的第一反应是查鉴权,但鉴权五元组下发看着正常;卡在更早的环节——SUCI解保护。这里把原理展开讲,因为它是5G时代新引入的坑:5G里UE不再明文上报IMSI,而是用归属网络公钥把SUPI加密成SUCI(ECIES机制,定义在3GPP TS 33.501附录C,Profile A用Curve25519曲线,Profile B用P-256)。USIM个人化时写入哪套公钥,必须和UDM侧保管的私钥配对。配错了,UDM解不出SUPI,鉴权流程压根起不来,AMF只能回原因值29。

新批次终端来自新卡商,两个省市用的USIM个人化数据又来自不同批次——这个组合,把嫌疑指向了“密钥套件错位”。但在现网,你怎么证明?

实验室复现。回试验网,十分钟的事:Open5GS的UDM配置里保留Profile A的私钥参数,UERANSIM的UE配置改成Profile B再发起注册——Registration Reject,原因值29,稳定复现,百发百中。改回一致,注册秒过。抓包里能清楚看到SUCI相关的加密套件标识字段,两个profile选的是不同曲线。完整时序如下:

sequenceDiagram
    participant U as 模拟终端
    participant G as 模拟基站
    participant A as AMF
    participant D as UDM
    U->>G: Registration Request 携带SUCI
    G->>A: NGAP Initial UE Message
    A->>D: 取鉴权数据并请求解SUCI
    D-->>A: 密钥套件不匹配 解不出SUPI
    A-->>G: 下行NAS透传
    G-->>U: Registration Reject 原因值29
    Note over U: 启动T3346退避 择机重试

最后一句也值得讲给新人听:UE收到29号拒绝后会按规范启动T3346退避定时器,等一段时间再重试——所以这类故障在现网的表现是“间歇性、成批次”,正因为有退避,它不会把你核心网打死,但也因此容易被当成“偶发”放过。

结论与处置。“疑似新批次USIM个人化密钥与UDM侧不匹配”从猜测变成了可复现的验证结论。现网处置:核对卡商的个人化配置单与UDM侧密钥参数,确认曲线与密钥配对关系;错批次的卡重新个人化。整个过程没有动生产网一根手指。

四、案例二:PDU会话建不起来,N4上的静默丢失

现象。另一个地区:注册全部正常,但部分区域PDU会话建立失败,SMF侧日志报PFCP会话建立响应等待超时。夜间问题更频繁,白天反而少见——这个“作息规律”起初把排查方向带偏到了节能开关上。

思路。注册成功说明N2(UE-AMF)没问题,问题大概率在SMF到UPF的N4上。N4跑的是PFCP协议(TS 29.244),UDP 8805端口,靠心跳维持关联活性、靠序列号把请求和响应配对。UDP是无连接的——中间传输路径上任何静默丢弃,SMF这边就只能看到“响应没回来”,而“响应没回来”有一万种原因。

实验室复现。这正是试验网的主场。在笔记本上用网络模拟工具对8805端口注入受控丢包:丢5%,PDU会话建立失败率肉眼可见地抬头;丢包率拉高,SMF直接报超时。还能做一个现网做不了的实验:调整心跳和超时相关参数,观察失败行为的变化——需要说明的是,PFCP的心跳机制与序列号配对是标准强制的,但超时阈值和重试策略,标准允许多种实现,具体行为以各厂家官方文档为准。试验网给你的是“丢包率和失败率的对应关系”这条曲线,而不是某个商用网元的私有参数。

真凶。带着实验曲线回到现网,调传输侧日志:夜间防火墙例行刷新会话表项,PFCP这条“长到不像话”的UDP流的老表项被清掉,后续部分报文被静默丢弃——夜间频发的原因找到了。整改是把N4网段加入防火墙白名单并调整老化策略。变更评审会上,那条“丢包率-失败率”实验曲线比任何一页PPT都有说服力。

顺手说一个同场景的小复现:把DNN配错再发起会话,核心网秒回PDU Session Establishment Reject,原因值27(missing or unknown DNN,TS 24.501)——新人花五分钟在试验网上把常见失败原因值亲手“演”一遍,比背两周表格记得牢。

五、案例三:被叫不通,寻呼到底去哪了

现象。某次TAC(跟踪区码)重整割接后,局部区域被叫失败率和下行数据唤不醒的比例抬头。主叫侧听回铃音前的等待明显变长然后失败;被叫UE在待机状态,什么都不知道。

原理。UE空闲态下,网络找不到它的“小区级位置”,只有注册区级别的位置。下行来话或来数据时,AMF通过NGAP的Paging消息把寻呼下发到相关跟踪区的基站(消息里带5G-S-TMSI和寻呼DRX参数),基站按UE的DRX周期(标准取值为320/640/1280/2560毫秒,TS 38.304)在对齐的无线帧上发寻呼。这条链路上任何一环不一致——TAC规划错、两侧DRX理解不一致、TMSI相关数据异常——结果都是“呼叫不到人”。

实验室能做多少?坦白说,这一类是试验网的“能力边界样本”。把AMF侧的默认寻呼DRX配置改一个值,抓NGAP Paging消息看里面携带的DRX字段和目标跟踪区列表——协议层的验证完全可行;但要说明,纯软件模拟的RAN对空闲态寻呼 reception 的支持是简化的(以UERANSIM项目文档为准),无线层之下“UE到底有没有在正确的寻呼时机醒来”这件事,要用srsRAN加SDR出真空口、或者干脆借真终端补位。试验网负责把“信令层面寻呼发给了谁、发了什么”钉死,无线层问题另案处理。

现网映射。本案例最终在现网抓NGAP分析:寻呼消息下发的目标跟踪区列表里,混入了UE注册区之外的TAC——TAC重整时新旧规划表在部分网元上没有对齐。回滚该批次规划后指标恢复。这类“配置漂移”问题的价值在于:试验网让你事先就能演练TAC变更的完整信令影响,而不是拿现网用户当试验品。

六、方法论:把“猜”变成“验”

三个案例讲完,把套路收拢成五步。这是我带团队的标准动作,贴在内部wiki首页:

  1. 取指纹:从现网故障中提取“信令指纹”——现象的时间分布、失败原因值分布、终端/卡批次聚集度、触发条件。指纹越具体,复现环境越省力。
  2. 最小化:试验网从零开始,只加指纹要求的最小组件。案例一只需要UE-AMF-UDM三件套,别上来就搭全家桶。
  3. 二分变量:一次只动一个参数,先静态配置(密钥、DNN、TAC、路由),后动态行为(丢包、时延、负载)。复现不出来时,用两套开源实现交叉定位是“配置问题”还是“理解问题”。
  4. 抓包对规范:每个结论必须落到pcap里的一条具体消息、一个具体字段,再翻到3GPP规范的具体条款。TS 24.501管NAS、TS 29.244管PFCP、TS 38.413管NGAP——引用条款号是排障报告的硬通货。
  5. 现网小范围验证:实验室结论必须在现网灰度验证后才算闭环。试验网证明的是“机制成立”,现网证明的是“机制就是真凶”。

常见现象的速查对照表:

现网现象 实验室复现手法 看哪条消息/字段 规范依据
新批终端集中注册失败,原因值29 密钥套件与UDM侧错配 SUCI加密套件标识、Reject原因值 TS 24.501、TS 33.501附录C
PDU会话建立超时,夜间频发 对8805端口注入受控丢包 PFCP请求/响应序列号、心跳 TS 29.244
被叫不通、下行唤不醒 DRX/TAC配置不一致 NGAP Paging中的5G-S-TMSI与DRX TS 38.413、TS 38.304
会话建立秒拒,原因值27 故意配错DNN PDU Session Establishment Reject TS 24.501

这套流程还有个容易被低估的副产品:回归测试。把注册、会话建立、去注册、异常场景写成脚本,每次升级Open5GS版本或调整配置前跑一遍冒烟——试验网从“救火工具”升级成“变更保险”。

七、边界与红线:试验网能证明什么

最后泼一盆冷水,这套打法有三条边界必须刻在脑子里。

第一,模拟UE不是真终端。UERANSIM的NAS栈和商用终端芯片的协议栈是两套代码,某些异常分支的处理、重试细节可能不同。协议层结论可迁移,终端行为层面的结论要打问号,最终以真终端为准。同理,模拟gNB不承担真实的调度和RRC细节。

第二,规模结论无效。单机模拟几百个UE的内存和CPU曲线,跟现网百万级并发的行为不是一回事。试验网证伪“机制”,不证伪“容量”。容量问题要靠专业性能测试环境和现网话统。

第三,别把试验网参数抄进现网。开源项目的默认值是为“跑通”设计的,不是为“扛住双十一”设计的。同样一条规范条款,开源实现和商用网元可能做了不同的实现选择——3GPP标准允许多种实现,具体行为以各厂家官方文档为准。

再加一条红线:试验网严禁使用生产密钥、真实用户数据和真实卡片数据。试验网连过办公网就要当它已经上互联网——核心网元的安全水位,试验和生产必须一视同仁。

八、结语:排障文化从经验走向验证

二十年前我入行时,排障老师傅的兵器是七号信令议和一台打印出来的MTP/SCCP规范,徒弟最大的本事是“盯表”。今天,一台笔记本、两套开源软件、一个Wireshark,年轻人就能把5GC里绝大多数信令疑难关进笼子里。工具变了,但这件事的本质没变:排障的最高境界不是修复速度,而是复现能力。能复现的问题,永远只是工程题;不能复现的问题,才会变成玄学。

如果你的团队还没有一张“人人可开、坏了就重建”的试验网,不妨从这个周末开始——文档都在Open5GS和UERANSIM的官方页面上,第一份注册成功pcap出现的那一刻,你对NAS流程的理解会跨过一个台阶。

参考来源

  1. Open5GS 官方文档与站点 — 本文解读主轴之一:开源5GC全套NF的部署、配置官方文档
  2. Open5GS GitHub 仓库 — 项目源码与版本发布
  3. UERANSIM GitHub 仓库 — 开源5G UE/gNB模拟器,本文试验网的终端与基站侧
  4. free5GC 官网 — Go语言实现的开源5GC,用于交叉验证
  5. 3GPP TS 24.501 规范页 — 5GS NAS协议,注册/会话拒绝原因值与T3346定义
  6. 3GPP TS 23.501 规范页 — 5G系统架构总纲

(注:文中案例为现网真实故障类型的脱敏抽象,数值与细节已做泛化处理;各开源项目版本与数据以官方仓库当前状态为准。)


本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入