如果你做过互联网后端开发,一定听过"微服务"这个词——把一个大单体应用拆成多个独立服务,各自部署、各自扩容,通过API互相调用。而如果你是通信工程师,可能觉得这套东西跟核心网八竿子打不着。
但5G核心网(5GC)干了一件颠覆性的事:它把整个核心网设计成了微服务架构。
这不是比喻,而是3GPP在标准中明确定义的设计范式——SBA(Service-Based Architecture,服务化架构)。每个网元不再是"设备",而是一个"服务";网元之间不再是专用信令接口,而是HTTP/2的RESTful API。
今天这篇文章,我们从"为什么"出发,搞清楚SBA的设计逻辑。
要理解5G为什么改成SBA,先得明白4G EPC的架构有什么问题。
4G核心网采用的是点对点(Point-to-Point)参考点架构。每个网元之间有一根"专线":
MME ←─S6a─→ HSS
MME ←─S11─→ S-GW
S-GW ←─S5─→ P-GW
P-GW ←─Gx─→ PCRF
MME ←─S1-MME─→ eNodeB
S-GW ←─S1-U─→ eNodeB
这就像公司里每个部门之间有一部专用电话——人事部和财务部之间的电话,跟财务部和销售部之间的电话,是完全不同的型号、不同的号码本、不同的拨号规则。
| 痛点 | 具体表现 |
|---|---|
| 协议碎片化 | S6a用Diameter,S11用GTPv2-C,Gx也用Diameter但字典不同,每个接口一套协议栈 |
| 紧耦合 | MME要同时支持跟HSS、S-GW、eNodeB的多种协议,改一个接口可能影响其他功能 |
| 扩展困难 | 想加一个新网元?得定义新参考点、新协议、新消息——标准制定周期按年计 |
更致命的是运维层面:每个网元是一个"大盒子",扩容只能整台扩。如果某地注册量暴增需要扩MME,但MME、S-GW、P-GW可能是同一台物理设备(合并部署),你没法只扩MME的容量。
graph TD
subgraph "4G EPC: 点对点架构"
MME4G[MME<br/>Diameter + GTPv2-C]
HSS4G[HSS<br/>Diameter]
SGW4G[S-GW<br/>GTPv2-C + GTP-U]
PGW4G[P-GW<br/>Diameter + GTP-U]
PCRF4G[PCRF<br/>Diameter]
MME4G <-->|"S6a<br/>Diameter"| HSS4G
MME4G <-->|"S11<br/>GTPv2-C"| SGW4G
SGW4G <-->|"S5<br/>GTPv2-C/GTP-U"| PGW4G
PGW4G <-->|"Gx<br/>Diameter"| PCRF4G
end
style MME4G fill:#f9f,stroke:#333
style PGW4G fill:#ff9,stroke:#333
style PCRF4G fill:#9ff,stroke:#333
核心矛盾:4G EPC是"通信人设计给通信人用的",协议复杂、门槛高、扩展慢。到了5G时代,要面对eMBB(大带宽)、URLLC(低时延)、mMTC(大连接)三种截然不同的场景,再用这种刚性架构根本撑不住。
4G的网元之间像打专线电话——你得知道对方的号码(IP地址)、说对方能听懂的语言(特定协议)。
5G SBA的思路是:像微信通讯录一样管理所有网元。
graph TD
subgraph "5GC SBA: 服务化架构"
NRF5G["NRF<br/>📍 服务注册与发现中心"]
AMF5G["AMF<br/>接入与移动性管理"]
SMF5G["SMF<br/>会话管理"]
UDM5G["UDM<br/>统一数据管理"]
PCF5G["PCF<br/>策略控制"]
AUSF5G["AUSF<br/>认证服务"]
UPF5G["UPF<br/>用户面功能"]
AMF5G -->|"注册/发现"| NRF5G
SMF5G -->|"注册/发现"| NRF5G
UDM5G -->|"注册/发现"| NRF5G
PCF5G -->|"注册/发现"| NRF5G
AUSF5G -->|"注册/发现"| NRF5G
AMF5G -.->|"HTTP/2<br/>Nsmf"| SMF5G
AMF5G -.->|"HTTP/2<br/>Nudm"| UDM5G
SMF5G -.->|"HTTP/2<br/>Npcf"| PCF5G
SMF5G ===>"N4<br/>GTP/SEPP"| UPF5G
end
style NRF5G fill:#f96,stroke:#333,stroke-width:3px
style AMF5G fill:#6cf,stroke:#333
style SMF5G fill:#6f6,stroke:#333
style UPF5G fill:#ff6,stroke:#333
| 设计原则 | 含义 | 4G对应 |
|---|---|---|
| 服务化接口(SBI) | 所有NF用统一的HTTP/2 + JSON通信 | 每个接口用不同协议(Diameter/GTP/CAP) |
| 服务注册与发现 | 通过NRF动态注册、查询NF | 静态配置或DNS路由 |
| 模块化NF | 每个NF是独立服务,可独立部署、扩缩容 | 网元是大型一体机 |
NRF(Network Repository Function)是SBA架构中最关键的新增网元。如果你熟悉微服务,它就是5G版的Eureka/Consul/Nacos。
sequenceDiagram
participant AMF as AMF (网络功能A)
participant NRF as NRF (注册中心)
participant SMF as SMF (网络功能B)
Note over AMF,NRF: 第一阶段:服务注册
AMF->>NRF: PUT /nnrf-nfm/v1/nf-instances/{id}<br/>注册NF Profile (类型/服务/切片/地址)
NRF-->>AMF: 201 Created (注册成功)
Note over SMF,NRF: SMF也完成注册
SMF->>NRF: PUT /nnrf-nfm/v1/nf-instances/{id}<br/>注册NF Profile
NRF-->>SMF: 201 Created
Note over AMF,NRF: 第二阶段:服务发现
AMF->>NRF: GET /nnrf-disc/v1/nf-instances<br/>?target-nf-type=SMF&sNssais=...
NRF-->>AMF: 200 OK (返回SMF列表)
Note over AMF,SMF: 第三阶段:直接服务调用
AMF->>SMF: POST /nsmf-pdusession/v1/sm-contexts<br/>创建PDU会话上下文
SMF-->>AMF: 201 Created (SmContextRef)
Note over AMF,NRF: 心跳保活
AMF->>NRF: PATCH /nnrf-nfm/v1/nf-instances/{id}<br/>(周期性心跳)
NRF-->>AMF: 204 No Content
每个NF向NRF注册时,会提交一份"简历"(NF Profile),关键字段包括:
| 字段 | 说明 | 示例 |
|---|---|---|
nfInstanceId |
NF的唯一标识(UUID) | 550e8400-e29b-41d4-a716-446655440000 |
nfType |
网络功能类型 | AMF, SMF, UPF, PCF, UDM |
serviceName[] |
提供的服务列表 | Nsmf_PDU_Session, Nsmf_Event_Exposure |
sNssaiList[] |
支持的网络切片 | SST:1, SD:010203 |
plmnList[] |
所属PLMN | MCC:460, MNC:00 |
ipv4Addresses[] |
服务端点地址 | 10.0.1.5 |
capacity |
容量权重(用于负载均衡) | 100 |
priority |
优先级 | 10 |
问题:假设某城市新开了一个SMF实例来应对流量高峰,传统做法需要修改AMF的配置文件,指向新的SMF地址。
SBA的做法:新SMF启动后自动向NRF注册,AMF下次查询NRF时自然就能发现它。零配置、零人工干预。
这就像新开了一家餐厅,不需要满大街贴广告——只要在美团上注册了,顾客搜索时自然就能找到。
4G EPC的控制面用了至少三种协议:
| 接口 | 协议 | 用途 |
|---|---|---|
| S6a (MME-HSS) | Diameter | 用户认证、签约数据 |
| S11 (MME-SGW) | GTPv2-C | 承载管理 |
| Gx (PCRF-PGW) | Diameter | 策略控制 |
| Rx (PCRF-AF) | Diameter | 应用层策略 |
5GC做了什么?全部统一成HTTP/2 + JSON。
$$ \text{4G: } \underbrace{\text{Diameter}}{\text{S6a}} + \underbrace{\text{GTPv2-C}}}} + \underbrace{\text{Diameter}{\text{Gx}} \implies \text{5G: } \underbrace{\text{HTTP/2 + JSON}} $$}
每个NF的服务接口以 N + 小写NF名 命名:
| NF | SBI接口名 | 关键服务操作 |
|---|---|---|
| AMF | Namf | Namf_Communication, Namf_EventExposure |
| SMF | Nsmf | Nsmf_PDUSession, Nsmf_EventExposure |
| UDM | Nudm | Nudm_UECM, Nudm_SDM, Nudm_Auth |
| PCF | Npcf | Npcf_SMPolicyControl, Npcf_AMPolicyControl |
| NRF | Nnrf | Nnrf_NFManagement, Nnrf_NFDiscovery |
| AUSF | Nausf | Nausf_UEAuthentication |
| NSSF | Nnssf | Nnssf_NSSelection |
以AMF调用UDM获取用户签约数据为例:
GET /nudm-sdm/v2/{supi}/sm-data?dnn=internet&sNssai={...} HTTP/2
Host: udm.example.com
Authorization: Bearer eyJhbGciOiJSUzI1NiIs...
Accept: application/json
UDM的响应:
{
"dnnConfigurations": {
"internet": {
"pduSessionTypes": {"defaultSessionType": "IPV4"},
"sscModes": {"defaultSscMode": "SSC_MODE_1"},
"sessionAmbr": {"uplink": "100Mbps", "downlink": "1Gbps"},
"5gQosProfile": {"5qi": 9, "arp": {"priorityLevel": 15}}
}
}
}
没错,这就是标准的RESTful API——跟你在互联网公司调后端接口一模一样。
| 维度 | 4G EPC | 5GC SBA |
|---|---|---|
| 架构范式 | 点对点参考点模型 | 服务化总线模型 |
| 接口协议 | Diameter/GTPv2-C/CAP等 | 统一HTTP/2 + JSON |
| 服务发现 | 静态配置/DNS | 动态NRF注册发现 |
| 耦合度 | 紧耦合(改接口牵动全局) | 松耦合(NF独立演进) |
| 扩缩容 | 整台设备扩容 | 按NF独立扩缩容 |
| 新功能引入 | 新接口+新协议+新标准 | 注册新服务到NRF即可 |
| 云原生适配 | 困难(VNF虚拟化) | 天然适配(CNF容器化) |
| 安全机制 | 各接口独立安全机制 | 统一OAuth2.0令牌 |
graph LR
subgraph "4G EPC 网元"
M4G[MME]
SG4G[S-GW]
PG4G[P-GW]
HSS4G[HSS]
PCR4G[PCRF]
end
subgraph "5GC 网络功能"
AM5G[AMF]
SM5G[SMF]
UP5G[UPF]
UD5G[UDM]
PC5G[PCF]
AU5G[AUSF]
NS5G[NSSF]
NE5G[NEF]
NR5G[NRF]
end
M4G ==>|"功能拆分"| AM5G
M4G ==>|"功能拆分"| SM5G
SG4G ==>|"合并演进"| UP5G
PG4G ==>|"合并演进"| UP5G
HSS4G ==>|"演进"| UD5G
PCR4G ==>|"演进"| PC5G
HSS4G -.->|"认证分离"| AU5G
style NR5G fill:#f96,stroke:#333,stroke-width:3px
style NS5G fill:#fc6,stroke:#333
style NE5G fill:#6cf,stroke:#333
注意几个关键变化:
网络切片是5G最重要的商业能力之一,而SBA是实现切片的技术基础。
当手机发起注册时,AMF需要确定这个用户属于哪个切片:
sequenceDiagram
participant UE as 手机(UE)
participant AMF as AMF
participant NSSF as NSSF
participant NRF as NRF
UE->>AMF: 注册请求<br/>(携带请求的S-NSSAI)
AMF->>NSSF: 查询切片选择<br/>POST /nnssf-nsselection/v1/slices
NSSF-->>AMF: 返回允许的切片信息<br/>(Allowed NSSAI + 目标NF列表)
AMF->>NRF: 发现目标切片内的SMF<br/>GET /nnrf-disc/v1/nf-instances<br/>?target-nf-type=SMF&snssai=...
NRF-->>AMF: 返回SMF实例列表
Note over AMF: 选择对应切片的SMF<br/>建立PDU会话
在4G架构下,MME到S-GW的S11接口是固定的,P-GW到PCRF的Gx接口也是固定的。如果你想给URLLC业务单独建一个"切片",你需要在MME里硬编码路由规则,告诉它"这类业务去那个P-GW"。每加一个切片就要改一次配置。
在SBA架构下:
$$ \text{切片容量} = \sum_{i=1}^{N} \text{NF}_i \times \text{S-NSSAI}_j $$
每个NF实例打上切片标签,NRF按标签分发——这就是SBA实现切片的底层逻辑。
在5GC运维中,你会经常抓HTTP/2的包来排查问题:
# 抓取AMF到SMF的SBI信令
tcpdump -i eth0 -s 0 -w sbi.pcap \
'tcp port 8080 and (((ip src 10.0.1.5) and (ip dst 10.0.2.10)) \
or ((ip src 10.0.2.10) and (ip dst 10.0.1.5)))'
抓到的就是标准的HTTP/2请求,可以直接用Wireshark解析,看到JSON body里的具体字段——这比解析Diameter的AVP或GTPv2-C的IE要直观得多。
| 场景 | 排查思路 |
|---|---|
| UE注册失败 | 检查AMF→UDM的Nudm_UECM_Registration是否成功 |
| PDU会话创建失败 | 检查AMF→SMF的Nsmf_PDUSession_CreateSMContext返回码 |
| 切片选择错误 | 检查AMF→NSSF的请求中S-NSSAI是否正确 |
| NF发现失败 | 检查NRF中目标NF是否已注册、心跳是否正常 |
| 策略下发异常 | 检查SMF→PCF的Npcf_SMPolicyControl响应 |
误解1:"SBA意味着所有接口都是HTTP/2"
事实:SBA只适用于控制面NF之间的SBI接口。用户面(N3/N9接口)仍然用GTP-U,AMF到基站(N2接口)用NGAP(类似S1-AP),SMF到UPF(N4接口)用PFCP(类似GTPv2-C的控制面演进)。
误解2:"NRF是单点故障"
事实:NRF本身可以集群部署,多个NRF实例共享数据库。而且NF查询NRF后会缓存结果,即使NRF短暂不可用,已缓存的NF信息仍然可以使用。
误解3:"HTTP/2比Diameter慢"
事实:HTTP/2支持多路复用(Multiplexing),在一个TCP连接上可以并行发送多个请求,而Diameter通常需要逐请求应答。在高并发场景下,HTTP/2的性能反而更好。
如果你有IT背景,这张表能帮你快速理解5GC SBA:
| IT微服务概念 | 5GC SBA对应 |
|---|---|
| Spring Cloud Eureka / Consul | NRF(服务注册与发现) |
| RESTful API (JSON over HTTP) | SBI(所有NF间通信) |
| API Gateway | SCP(Service Communication Proxy,通信代理) |
| OAuth2 / JWT Token | OAuth2.0(NF间通信授权) |
| Kubernetes Service Discovery | NRF + K8s Service |
| Config Server | UDR + UDM(统一数据存储) |
| Docker Container | CNF(Cloud-native NF,容器化网元) |
| CI/CD Pipeline | 5GC网元滚动升级 |
Q: SBA和传统参考点架构能共存吗? A: 可以。5GC定义了两种表示方式——SBA模型(用于控制面NF间通信)和参考点模型(用于描述端到端信令流,如N1/N2/N3/N4)。两者是同一架构的不同视角,不是互相替代的关系。
Q: NRF挂了会怎样? A: 短期内影响有限。已注册的NF信息会被请求者缓存(通常有效期为几分钟到几十分钟),只有新的NF发现请求会失败。运维上,NRF通常采用主备或多活部署,数据库后端共享,可靠性很高。
Q: 为什么5GC不用gRPC而用HTTP/2 REST? A: 3GPP在设计SBA时(2016-2018年),gRPC还不成熟。HTTP/2 + JSON + OpenAPI是当时IT行业最通用的API标准,生态成熟、工具链完善、调试方便。实际上HTTP/2已经具备了多路复用和头部压缩能力,性能不是瓶颈。
Q: SCP(Service Communication Proxy)是什么? A: SCP是SBA架构中的可选组件,相当于IT领域的API Gateway/Service Mesh。它可以代理NF间的SBI通信,实现负载均衡、流量控制、安全策略等功能。有了SCP,NF可以不直接查询NRF,而是把请求发给SCP,由SCP完成发现和路由——这叫"间接通信"模式。
Q: SBA对5GC的性能有没有负面影响? A: HTTP/2 + JSON的编解码开销确实比二进制协议(如Diameter)稍大。但现代服务器的CPU处理能力远超需求,瓶颈通常在I/O而非编解码。实际现网测试表明,SBA的性能完全能满足5GC的需求。而且HTTP/2的多路复用特性反而减少了连接建立开销。
本文由「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 等场景全覆盖。
