在5G核心网(5GC)服务化架构里,AMF是终端的"接入锚点",UPF是用户面锚点,而SMF(Session Management Function)则是承上启下的会话管理者。每一次PDU会话建立,AMF都必须在毫秒级内回答一个看似简单、实则牵动整网的问题:这个会话该交给哪个SMF来管?
这个问题之所以复杂,是因为SMF选择不是一次单点判决,而是一条多级过滤决策链(multi-stage filtering pipeline)。它要同时满足切片隔离(S-NSSAI)、数据网络可达性(DNN)、用户订阅授权(UDM订阅数据)、就近接入(DNAI/位置)、容灾与负载均衡(SMF Set / FQDN)以及漫游约束(LBO vs Home Routed)六大维度。任何一环失配,都会导致会话建立失败或绕行非预期路径。
本文严格依据 3GPP TS 23.501 §6.3.2(SMF Selection)、§6.3.3(UPF Selection)、TS 23.502 §4.3.2.2(UE-initiated PDU Session Establishment)、TS 29.510(NRF)、TS 29.502(Nsmf)、TS 29.503(Nudm),把这条决策链拆成"订阅校验 → 切片/DNN匹配 → NF发现 → 候选选定"四个阶段,并配合信令时序图、IE结构图与状态机说明设计意图、抓包识别要点与厂商差异。
AMF在收到UE的PDU Session Establishment Request之后,SMF选择按以下四级展开:
| 决策级 | 决策主体 | 依据 | 失败结果 |
|---|---|---|---|
| L1 切片确定 | AMF(必要时查NSSF) | Allowed S-NSSAI / Requested NSSAI | 切片不可用,注册或会话拒绝 |
| L2 订阅授权 | UDM | SmfSelectionSubscriptionData | DNN/S-NSSAI组合未订阅→拒绝 |
| L3 NF发现 | NRF(或DNS) | NFProfile中的sNssaiList/dnnList | 无候选SMF→404 |
| L4 实例选定 | AMF | SMF Set FQDN、负载、拓扑、DNAI | 负载不均/容灾失效 |
下面用流程图把这条链可视化:
flowchart TD
A["UE: PDU会话建立请求<br/>S-NSSAI(可选) + DNN(可选)"] --> B{"AMF: 已有Allowed S-NSSAI?"}
B -- 否 --> C["NSSF: Nnssf_NSSelection<br/>推导Allowed S-NSSAI"]
B -- 是 --> D["确定目标S-NSSAI"]
C --> D
D --> E["UDM: 取SmfSelectionSubscriptionData"]
E --> F{"该S-NSSAI+DNN被订阅?"}
F -- 否 --> G["拒绝:DNN not supported / LBO不允许"]
F -- 是 --> H{"UE未带DNN?"}
H -- 是 --> I["取Default DNN"]
H -- 否 --> J["使用请求DNN"]
I --> K["NRF: Nnrf_NFDiscovery<br/>target=SMF, S-NSSAI, DNN"]
J --> K
K --> L{"响应含SMF Set FQDN?"}
L -- 是 --> M["DNS解析FQDN→多IP负载均衡"]
L -- 否 --> N["NRF直接返回SMF实例列表"]
M --> O["选定SMF实例"]
N --> O
O --> P["Nsmf_PDUSession_CreateSMContext"]
style G fill:#f8d7da
style O fill:#d4edda
SMF选择并非独立信令,它"寄生"在PDU会话建立流程(TS 23.502 §4.3.2.2)的前若干步。下图给出从UE发起到N4会话建立的完整时序,其中阴影标注的步骤即为SMF选择的四级动作:
sequenceDiagram
participant UE
participant AN as (R)AN
participant AMF
participant NSSF
participant UDM
participant NRF
participant SMF
participant PCF
participant UPF
UE->>AN: RRC: NAS PDU Session Establishment Request (N1 SM)
AN->>AMF: N2透传 + N1 SM容器
rect rgb(255, 248, 220)
Note over AMF: L1 切片确定
AMF->>NSSF: Nnssf_NSSelectionGet (Requested NSSAI)
NSSF-->>AMF: Allowed NSSAI + NSI ID
Note over AMF: L2 订阅授权
AMF->>UDM: Nudm_SDM_Get<br/>(SmfSelectionSubscriptionData)
UDM-->>AMF: 订阅S-NSSAI/DNN, Default DNN, LBO授权
Note over AMF: L3 NF发现
AMF->>NRF: Nnrf_NFDiscovery<br/>(target-nf-type=SMF, S-NSSAI, DNN)
NRF-->>AMF: NFProfile(sNssaiList/dnnList) 或 nfSetFqdn
Note over AMF: L4 实例选定
end
AMF->>SMF: Nsmf_PDUSession_CreateSMContext<br/>(SUPI, DNN, S-NSSAI, N1, RequestType=initial)
SMF->>UDM: Nudm_SDM_Get (SM Subscription, DNN, S-NSSAI)
UDM-->>SMF: DNN配置, SSC, session-AMBR, 5QI, DNAI列表
SMF->>PCF: Npcf_SMPolicyControl_Create (SM Policy)
Note over SMF: SMF据此执行UPF选择(§6.3.3)
SMF->>UPF: N4 Session Establishment (PFCP)
UPF-->>SMF: N4成功 + F-TEID(N3/N9)
SMF-->>AMF: CreateSMContext Response<br/>(N1 Accept + N2 Session Resource Setup)
AMF->>AN: N2 PDU Session Resource Setup Request
AN->>UPF: 建立N3隧道(GTP-U)
AN->>UE: RRC Reconfiguration + N1 Accept
需要强调的是:SMF选择是AMF的职责(控制面选控制面),UPF选择则是SMF的职责(控制面选用户面)。两者虽然都涉及DNAI,但决策主体不同——这是初学者最容易混淆的点。
PDU Session Establishment Request这条消息(TS 24.501 §8.3.1)承载在N1 SM容器里,是整条决策链的"原料"。AMF据此判断S-NSSAI和DNN是否齐全。
| IE | 含义 | 对SMF选择的影响 |
|---|---|---|
| PDU Session ID | 会话标识(0-255) | 不影响选择,但用于AMF本地映射 |
| Request type | initial request / existing PDU session / modification |
仅initial request触发SMF选择 |
| PDU Session Type | IPv4/IPv6/Ethernet/Unstructured | 必须与候选SMF能力匹配 |
| SSC mode | 1/2/3(可选) | SSC mode 2允许后续更换SMF/锚点 |
| DNN | 数据网络名(可选) | 缺失时L1/L2用Default DNN补齐 |
| S-NSSAI | 切片(可选,受UE配置/Allowed约束) | 缺失时由AMF按注册态Allowed NSSAI或NSSF推导 |
设计意图:让UE尽量"少说话"——当UE未带DNN/S-NSSAI时,网络侧用注册时已协商的Allowed NSSAI和Default DNN补齐,降低空口信令开销,这也是为什么"什么都不填也能上网"。
Nudm_SDM_Get (SmfSelectionSubscriptionData)AMF向UDM请求资源URI /subscription-data/{supi}/smf-selection-subscription-data(TS 29.503)。返回结构里最关键的三个字段:
subscribedSnssaiList:用户订阅的所有S-NSSAI,每个S-NSSAI下挂若干DNN;dnnConfiguration:每个DNN的isDefaultDnn标志、PDU会话类型、SSC模式、5QI、session-AMBR;lboRoamingAllowed:是否允许本地疏导漫游(影响VPLMN内选SMF)。若请求的S-NSSAI + DNN组合在订阅数据中找不到匹配项,AMF直接以#27 DNN not supported或#72 Non-3GPP access ...等SM cause拒绝,根本不会走到NRF。这是排错时第一个要确认的环节。
Nnrf_NFDiscovery这是整个机制最体现服务化架构价值的一步。AMF构造查询条件(TS 29.510 §10.3):
GET /nnrf-disc/v1/nf-instances?target-nf-type=SMF&requester-nf-type=AMF
&request-nssai={"sst":1,"sd":"010203"}
&dnn=internet
&preferred-fqdn=true
NRF按NF Profile中SMF注册时声明的sNssaiList与dnnList做交集匹配,返回候选列表。返回的NFProfile中可能出现两种形态:
ipv4Addresses/fqdn;nfSetFqdn(指向整个SMF Set的FQDN),把"选哪一个实例"的决策下放给DNS。Nsmf_PDUSession_CreateSMContext选定SMF后,AMF向该SMF发POST(TS 29.502 §5.1),创建SM Context。其SmContextCreateData携带的关键IE:
| IE | 作用 |
|---|---|
supi / pei |
用户/设备永久标识 |
pduSessionId |
会话标识 |
dnn / snssai |
已确定的网络与切片 |
pduSessionType / sscMode |
会话类型与连续性模式 |
n1SmMsg |
透传UE原始N1 SM容器 |
servingNfId / servingNetwork |
AMF身份与PLMN |
anType |
3GPP / non-3GPP接入 |
ueLocation |
用于UPF选择与DNAI匹配 |
SMF收到后,自己再向UDM取一次会话管理订阅数据(/sm-data,与AMF取的smf-selection是两套不同的data set),拿到完整的QoS、计费、DNAI列表,然后才执行UPF选择并建N4会话。
下面这张类图刻画了SMF选择涉及的核心数据结构间的依赖关系,便于理解"订阅数据 → 发现数据 → 上下文数据"的流转:
classDiagram
class SmfSelectionSubData {
+subscribedSnssaiList: S-NSSAI[]
+dnnConfiguration: Map~DNN,DnnConfig~
+lboRoamingAllowed: bool
}
class DnnConfig {
+isDefaultDnn: bool
+pduSessionTypes
+sscModes
+sessionAmbr
}
class NFProfile {
+nfType: SMF
+nfSetId / nfSetFqdn
+sNssaiList: Snssai[]
+dnnList: string[]
+plmnList
+capacity / load
}
class SmContextCreateData {
+supi / pduSessionId
+dnn / snssai
+n1SmMsg
+servingNetwork
}
class SmContextCreateRsp {
+n1SmMsg: Accept
+n2SmInfo: PduSessionRsrcSetup
}
SmfSelectionSubData "1" *-- "many" DnnConfig : 内嵌
NFProfile --> SmfSelectionSubData : AMF据此选SMF
NFProfile "候选" ..> SmContextCreateData : 选定后生成
SmContextCreateData ..> SmContextCreateRsp : SMF响应
Release 16起,3GPP引入NF Set概念(TS 23.501 §5.22),一组SMF实例可共享状态(通过UDSF),任意成员都能接管同一会话,实现无状态弹性(stateless resilience)。SMF Set带来的两种发现方式对比:
| 维度 | NRF实例发现 | FQDN/DNS集合发现 |
|---|---|---|
| 返回内容 | 单个SMF实例IP/FQDN | nfSetFqdn(整组域名) |
| 实例选择主体 | NRF / AMF本地算法 | DNS负载均衡器(轮询/加权/geo) |
| 适用规模 | 小规模、静态拓扑 | 大规模云化部署 |
| 容灾粒度 | 单实例级 | Set级,成员可动态增删 |
| 扩展性 | 每次扩容需更新NRF | 仅改DNS记录,NRF无需变更 |
| 标准依据 | TS 29.510 §10.3 | TS 29.510 §6.2 nfSetFqdn |
设计意图:把"实例级选择"从控制面下沉到DNS基础设施,避免NRF成为单点与性能瓶颈,也让运维能像管传统Web服务一样水平扩展SMF——这正是云原生核心网(如华为CloudCore、爱立信dual mode、中兴Common Core)所推崇的模式。
从AMF视角,单个PDU会话的SMF选择可抽象为如下状态机:
stateDiagram-v2
[*] --> 待校验 : 收到PDU会话建立请求
待校验 --> 切片确定 : 取/校验Allowed S-NSSAI
切片确定 --> 订阅授权 : 查SmfSelectionSubData
订阅授权 --> 发现阶段 : DNN/S-NSSAI被订阅
订阅授权 --> 拒绝 : 无订阅/LBO不允许
发现阶段 --> 已选定SMF : NRF/DNS返回候选
发现阶段 --> 拒绝 : 无候选SMF(404)
已选定SMF --> 已建SM上下文 : CreateSMContext成功
已选定SMF --> 发现阶段 : SMF不可用→重选
已建SM上下文 --> 会话激活 : N4/N2完成
会话激活 --> [*]
拒绝 --> [*]
注意已选定SMF → 发现阶段的回边:当选定的SMF故障或拒绝(如5xx、超时),AMF应回到NRF候选列表重选(TS 23.502 §4.3.2.2 step 9b)。在SMF Set场景下,AMF甚至可在Set内无感切换。
SMF选择在漫游下分裂为两个子问题(TS 23.501 §6.3.2.2、§4.2):
lboRoamingAllowed=true,时延低但需HPLMN信任。| 对比项 | LBO | Home Routed |
|---|---|---|
| SMF数量 | 1(V-SMF) | 2(V-SMF + H-SMF) |
| 用户面锚点 | 访问地UPF | 归属地UPF |
| 选定主体 | 访问AMF | AMF选V-SMF,V-SMF选H-SMF |
| 归属控制 | 弱(依赖漫游协议) | 强 |
| 计费位置 | 访问地 | 归属地 |
| 典型问题 | 归属策略下发慢 | N9跨PLMN时延大 |
SMF选择全程是HTTP/2 over SBI(非传统SCTP/Diameter),用Wireshark过滤:
http2.header.value contains "nnrf-disc" 且 target-nf-type=SMF,看请求里的request-nssai与dnn,以及响应里是nfSetFqdn还是实例列表;http2.uri.path contains "smf-selection-subscription-data",看返回的subscribedSnssaiList是否包含UE请求的组合;http2.uri.path contains "/sm-contexts"(POST),即Nsmf_PDUSession_CreateSMContext,看AMF最终打向哪个SMF URI。smf-selection-subscription-data,确认DNN与isDefaultDnn配置;nfprofile注册信息;dig <nfSetFqdn>验证,确认DNS LB返回多IP;lboRoamingAllowed=false或漫游协议未签 → 强制走Home Routed或开通LBO授权;Q1:UE没带DNN,AMF怎么选SMF?
A:AMF用UDM订阅数据中该S-NSSAI下的isDefaultDnn=true的DNN补齐,再据此发现SMF。Default DNN机制(TS 23.501 §5.6.4)让"什么都不填也能上网"成为可能。
Q2:NRF发现和FQDN/DNS发现,到底用哪个?
A:二者不互斥,由preferred-fqdn参数与NRF返回形态决定。小规模静态网络用NRF实例发现即可;云化大规模部署推荐FQDN发现,把实例选择下沉给DNS LB,扩容只改DNS。
Q3:SMF Set选完后和单SMF实例有什么不同? A:Set内SMF共享会话状态(UDSF),任一成员宕机,Set内其他成员可无缝接管(TS 23.501 §5.22),实现控制面无状态弹性;单实例则需SMF重选,会话需重建。
Q4:漫游时SMF选择为何更复杂?
A:引入归属/访问两个PLMN的归属地控制诉求,需在LBO(访问地一跳)与Home Routed(V-SMF+H-SMF两跳)间权衡时延与控制权,由lboRoamingAllowed与漫游协议决定。
Q5:SMF选择和SSC模式(Session and Service Continuity)有什么关系? A:SSC mode 1要求同一SMF/UPF锚点不变(不允许会话存活期内换SMF);SSC mode 2允许网络释放并重建会话时更换SMF/锚点;SSC mode 3允许在保持UE IP的同时插入新SMF/PSA。因此SMF选择策略需与会话的SSC模式联动(TS 23.501 §5.6.9)。
本文由「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 等场景全覆盖。
