聚焦 3GPP TS 23.501 §5.15、TS 23.502 §4.2.2.2、TS 29.531 中的网络切片选择(Network Slice Selection)机制——从 UE 携带 Requested NSSAI 发起注册,到 AMF 调用 Nnssf_NSSelection 服务计算 Allowed NSSAI,再到 AMF 重选与 NSI 实例映射的全链路信令拆解。
5G 网络切片的本质是:在同一张物理核心网与无线接入网之上,虚拟出多个逻辑网络,每个逻辑网络(Network Slice Instance, NSI)对应一种业务特征——eMBB、URLLC、mMTC,乃至运营商自定义的垂直行业专网。但"切片"能否真正落地,并不取决于运维侧拉起了多少个 SMF/UPF 实例,而取决于控制面在 UE 接入的瞬间能否为它选择到正确的那一张切片。
这道选择关卡,就是 Network Slice Selection(网络切片选择)。它发生在 UE 初始注册阶段,由 AMF 主导、NSSF(Network Slice Selection Function,网络切片选择功能)提供决策辅助。整个机制的产出物只有一个——Allowed NSSAI(允许的 NSSAI)。UE 后续所有的 PDU 会话建立、QoS 流、策略执行,都以 Allowed NSSAI 为前提。如果这一步选错或选漏,下游会出现大量"看起来是会话层失败、实则是切片未授权"的疑难杂症。
本文将从 S-NSSAI 的比特结构讲起,逐步拆解 NSSF 两大 SBI 服务、注册期完整信令时序、AMF 重选机制,并给出抓包识别与排错实战。
理解切片选择,必须先理解它的"语言"——S-NSSAI。一个 S-NSSAI 是一张网络切片的全局标识符,其结构定义在 TS 23.501 §5.15.2,由两个字段构成:
graph LR
subgraph SNSSAI["S-NSSAI (32 bit)"]
SST["SST<br/>Slice/Service Type<br/>8 bit"]
SD["SD (可选)<br/>Slice Differentiator<br/>24 bit"]
end
SST -- "标准化值<br/>1=eMBB 2=URLLC 3=mMTC" --> VAL1["0~127: 标准化<br/>128~255: 运营商自定义"]
SD -- "同一SST下进一步区分<br/>如不同企业专网" --> VAL2["24位可表示<br/>~1600万种差异"]
style SST fill:#cfe8ff,stroke:#1976d2
style SD fill:#d7ffd9,stroke:#388e3c
1 = eMBB,2 = URLLC,3 = mMTC,这些是标准化值(范围 0–127)。128–255 留给运营商自定义。NSSAI 则是 S-NSSAI 的集合,一次注册中一个 NSSAI 最多包含 8 个 S-NSSAI。围绕 UE 的生命周期,3GPP 定义了 5 种 NSSAI 形态,它们之间的流转关系是排错的核心:
stateDiagram-v2
[*] --> Subscribed: UDM/UDR 开户配置
Subscribed --> Configured: AMF下发Configured NSSAI<br/>(Registration Accept)
Configured --> Requested: UE本地组合<br/>(取Configured的子集)
Requested --> Allowed: NSSF计算<br/>(订阅∩请求∩TA可用)
Allowed --> Rejected: TA/PLMN不支持<br/>或未订阅
Requested --> Rejected: 未订阅的S-NSSAI
Rejected --> [*]: 退避或重新协商
note right of Allowed
唯一可用于
建立PDU会话的集合
end note
| NSSAI 类型 | 存储位置 | 含义 | 谁来决定 |
|---|---|---|---|
| Subscribed S-NSSAI | UDM/UDR | 用户在 HPLMN 开户时签约的切片 | 运营商 BSS/OSS |
| Configured NSSAI | UE + AMF | 当前服务 PLMN 可用的切片配置 | AMF(HPLMN 或 VPLMN) |
| Requested NSSAI | UE | UE 本次注册主动请求的切片 | UE(Configured 的子集) |
| Allowed NSSAI | UE + AMF | 经授权、当前 TA 可实际使用的切片 | NSSF 计算、AMF 下发 |
| Rejected NSSAI | UE | 本次被拒绝、待退避的切片 | AMF/NSSF |
设计意图:为什么搞出 5 种 NSSAI?因为切片选择横跨签约域(Subscribed)、网络部署域(Configured)、用户意愿域(Requested)、地理可用域(TA) 四个维度。这 5 种 NSSAI 是把这四个维度两两求交的结果表达,使得"用户想用 + 网络允许 + 此地可达"三者同时满足的切片才会进入 Allowed NSSAI。这是 5G 把"按需切片"做到可控、可追溯的关键工程抽象。
NSSF 在架构上定义于 TS 23.501 §6.2.6,其 SBI 接口定义于 TS 29.531。它通过 HTTP/2 的服务化接口向 AMF(漫游场景下也向 VPLMN 的 NSSF、SMF、NWDAF)提供两类服务:
被 AMF 在注册、PDU 会话建立、UE 配置更新时调用,查询该 UE 应使用的切片及配套信息。这是本文的主角。其 RESTful 端点为:
GET /nnssf-nsselection/v2/network-slice-information
被 AMF 用来向 NSSF 上报自己在各跟踪区(TA)所支持的 S-NSSAI,并可订阅可用性变更通知。当某 AMF 集合的切片能力发生变化时,NSSF 反向通知相关 AMF。这对应 TS 23.502 §4.2.3 "Network Slice-specific authorization and update"。
NSSF 返回的核心数据结构是 AuthorizedNetworkSliceInfo(授权网络切片信息),其中封装了切片选择的全部决策结果:
graph TD
ANSI["AuthorizedNetworkSliceInfo<br/>(NSSF 200 OK 响应体)"]
ANSI --> A1["allowedNssai<br/>允许的NSSAI(本TA)"]
ANSI --> A2["configuredNssai<br/>(含HPLMN映射)"]
ANSI --> A3["targetAmfSet<br/>目标AMF集合ID"]
ANSI --> A4["candidateAmfList<br/>候选AMF实例"]
ANSI --> A5["nsiInformationList<br/>NSI实例+关联NRF"]
ANSI --> A6["mappedHomeNssai<br/>漫游VPLMN↔HPLMN映射"]
ANSI --> A7["rejectedNssaiInTa<br/>本TA被拒的S-NSSAI"]
style ANSI fill:#fff3cd,stroke:#f57c00
设计意图:NSSF 不是一个单纯"查表返回 yes/no"的网元。它的响应同时回答了三个问题——(1) 这个 UE 能用哪些切片(allowedNssai)、(2) 这些切片由谁服务(targetAmfSet / nsiInformationList → SMF/UPF 池)、(3) 漫游下如何与归属网络对齐(mappedHomeNssai)。把这三者打包在一次 GET 响应里,是为了让 AMF 一次决策即可完成切片授权 + 网元定址 + 漫游映射,避免控制面多次往返。
下面是 UE 初始注册时,默认 AMF 无法服务请求切片而触发 NSSF 决策与 AMF 重选的完整时序。这是切片选择最复杂、也最考验实现的场景:
sequenceDiagram
autonumber
participant UE
participant gNB as (R)AN/gNB
participant IAMF as 初始AMF<br/>(默认)
participant UDM
participant NSSF
participant NRF
participant TAMF as 目标AMF<br/>(切片专用)
UE->>gNB: RRC SetupComplete<br/>携带 NAS Reg Request(含 Requested NSSAI)
gNB->>IAMF: N2 Initial UE Message<br/>(含 NAS、TAI、Requested NSSAI)
Note over IAMF: 初始AMF发现自己<br/>不支持Requested中的某些S-NSSAI
IAMF->>UDM: Nudm_SDM_Get<br/>取 Subscribed S-NSSAI
UDM-->>IAMF: 返回签约切片列表
IAMF->>NSSF: GET /nnssf-nsselection/v2/<br/>network-slice-information<br/>(slice-info-for-registration, tai)
Note over NSSF: 计算: Subscribed ∩ Requested ∩ TA可用<br/>确定 Allowed NSSAI、AMF Set、NSI
NSSF-->>IAMF: 200 OK AuthorizedNetworkSliceInfo<br/>(targetAmfSet, nsiInformationList)
Note over IAMF: 基于targetAmfSet<br/>判断需AMF重选
IAMF->>NRF: Nnrf_NFDiscovery<br/>(按AMF Set发现目标AMF)
NRF-->>IAMF: 返回TAMF实例信息
rect rgb(245, 245, 245)
Note over IAMF,gNB: AMF重选 (RAN转发方式)
IAMF->>gNB: NGAP RerouteNAS Request<br/>(含原始NAS、Routing ID指向AMF Set)
gNB->>TAMF: N2 Initial UE Message<br/>(转发Registration Request)
end
TAMF->>TAMF: 按Allowed NSSAI继续注册流程<br/>(鉴权、安全、SMC)
TAMF-->>gNB: N2 + NAS Registration Accept<br/>(含 Allowed NSSAI)
gNB-->>UE: Registration Accept(Allowed NSSAI)
① Registration Request(NAS,TS 24.501)
UE 在 NAS 层 Registration request 消息的 5GS registration type 之后,携带 Requested NSSAI(若 UE 已有 Configured NSSAI)。若 UE 首次接入、无 Configured NSSAI,则可能携带 Default Configured NSSAI Indication。IE 关键点:
Requested NSSAI 是 UE 主动想用的切片,必须是 Configured NSSAI 的子集,否则网络会忽略越界的 S-NSSAI。Mapped Home NSSAI 与 Pending NSSAI 字段。② N2 Initial UE Message(NGAP,TS 38.413)
gNB 透传 NAS 消息给 AMF,同时携带 User Location Information (TAI) 与 TAI List for Warning。TAI 是后续 NSSF 判断"此 TA 是否支持该切片"的输入。
③ Nudm_SDM_Get(AMF↔UDM)
AMF 用 SUPI 向 UDM 拉取签约数据,其中 AccessAndMobilitySubscriptionData 含 Subscribed S-NSSAI 列表,每项带 defaultIndication(是否默认切片)。
④ Nnssf_NSSelection_Get(AMF↔NSSF,本流程核心)
| 请求参数(query) | 必选/条件 | 作用 |
|---|---|---|
nf-type |
必选 | 调用方类型,NSSF 校验仅 AMF 或异 PLMN NSSF 可调 |
nf-id |
必选 | 调用方 NF 实例 ID |
slice-info-request-for-registration |
注册场景条件必选 | 含 RequestedNssai、SubscribedNssai、DefaultConfiguredSnssaiIndication、TAI |
tai |
本 PLMN 必选 | 跟踪区标识,决定 TA 级切片可用性 |
home-plmn-id |
漫游必选 | 用于 VPLMN↔HPLMN 切片映射 |
supported-features |
可选 | 特性协商 |
NSSF 收到后执行四步校验与计算(详见 free5GC 实现逻辑):鉴权调用方 → 校验 TAI/PLMN → 对比 Requested 与 Subscribed 求 Allowed NSSAI → 确定 Configured NSSAI 映射、NSI-ID、AMF Set、NRF 定址。
⑤ 200 OK AuthorizedNetworkSliceInfo(NSSF→AMF)
响应体即上文结构图,含 targetAmfSet 与 nsiInformationList。若 S-NSSAI 未订阅或不在此 TA 支持,落入 rejectedNssaiInTa。
⑥ NGAP RerouteNAS Request(AMF→gNB,TS 38.413)
这是 AMF 重选的 RAN 转发方式。初始 AMF 在 NGAP 层向 gNB 发 Reroute NAS Request,携带原始 NAS 消息体(封装在 Rerouted NAS Message 容器)与指向目标 AMF Set 的 Routing ID,以及可选 Allowed NSSAI、PDU Session ID、Masked IMEISV 等。gNB 据此将 Registration Request 当作一次新的 Initial UE Message 转发给目标 AMF。
设计意图:为什么 AMF 重选要让 gNB"绕一圈"转发,而不是 AMF 之间直接 Namf 调用?因为 N2 信令连接(UE-associated logical NGAP connection)是绑定在 gNB↔AMF 这一段上的。若 AMF 直接把上下文交给新 AMF,gNB 的 N2 连接仍指向旧 AMF,会导致后续 N2 消息(如初始上下文建立)投递错位。通过 RAN 转发,gNB 会与目标 AMF 重建 N2 关联,保证控制面连接的一致性。这是 3GPP 在"切片选择灵活性"与"N2 连接一致性"之间的精妙折中。
下表把请求与响应两侧的高频 IE 集中说明,便于抓包比对:
| 方向 | IE 名称 | 类型 | 说明 / 排错关注点 |
|---|---|---|---|
| 请求 | RequestedNssai |
list<Snssai> | UE 请求切片;若空则 NSSF 用 Subscribed 的 default |
| 请求 | SubscribedNssai |
list | AMF 从 UDM 取得,作为授权基准 |
| 请求 | DefaultConfiguredSnssaiIndication |
bool | UE 用了默认配置切片的标志 |
| 请求 | tai |
TAI | 本 TA 是否支持切片的判定依据 |
| 响应 | allowedNssai |
list | 最终下发 UE 的可用切片 |
| 响应 | targetAmfSet |
string | 触发 AMF 重选的依据 |
| 响应 | nsiInformationList |
list | 每项含 nsiId + nrfId,供 SMF 发现本切片的 NF |
| 响应 | mappedHomeNssai |
list | 漫游下 VPLMN S-NSSAI → HPLMN S-NSSAI 映射 |
| 响应 | rejectedNssaiInTa |
list | 被拒切片,UE 需退避(默认 24h) |
| 维度 | Nnssf_NSSelection(本文) | Nnssf_NSSAIAvailability | NSSAA(切片二次认证) |
|---|---|---|---|
| 触发时机 | 注册/PDU 建立/UCU | AMF 启动、能力变更 | Allowed NSSAI 中含需认证切片 |
| 主体方向 | AMF 请求 NSSF | AMF 上报 NSSF | AMF ↔ AUSF/AAA |
| 核心输出 | Allowed NSSAI + AMF Set + NSI | 切片可用性数据库 | 切片是否被授权使用 |
| TS 章节 | TS 29.531 | TS 29.531 | TS 23.502 §4.20、TS 33.501 |
| 关系 | 上游:决定"能用什么" | 配套:维护"哪里有什么" | 下游:决定"是否真的能用" |
在 N22 接口(AMF↔NSSF,HTTP/2 over TCP)上抓取:
# 过滤 NSSF 的 SBI 调用
http2.headers.path contains "network-slice-information"
# 或按端口
tcp.port == <NSSF端口>
/nnssf-nsselection/v2/network-slice-information,query 串含 slice-info-request-for-registration= 与 tai=。:status = 200,body 为 JSON,含 allowedNssai 数组。403 Forbidden,body 是 ProblemDetails(含 cause、invalidParams),通常因调用方非 AMF 或参数缺失。Reroute NAS Request(消息名 RerouteNASRequest),其 Routing ID 字段即目标 AMF Set 的标识——这是 AMF 重选发生的铁证。Registration Accept 的 5GS network feature support 之后,定位 Allowed NSSAI IE,与 UE 请求比对,确认切片是否被授权。Allowed NSSAI 非空、且含 UE 期望的 S-NSSAI。RerouteNASRequest(说明默认 AMF 即可服务,切片选择一次命中)。| 现象 | 可能根因 | 排错动作 |
|---|---|---|
| UE 请求切片,Allowed 中却为空 | Requested S-NSSAI 未在 UDM 签约 | 查 UDM 的 Subscribed S-NSSAI;核对 SUPI |
| 同一 UE 移动后切片消失 | 该 TA 不支持该切片 | 查 gNB/AMF 的 TA-Slice 映射;看 NSSF 返回 rejectedNssaiInTa |
| 反复 AMF 重选、注册失败死循环 | targetAmfSet 内无可用 AMF 实例 | 查 NRF 注册情况、AMF Set 切片能力配置 |
| 漫游下切片不可用 | VPLMN/HPLMN S-NSSAI 映射缺失 | 查 mappedHomeNssai;核实漫游协议 |
| NSSF 返回 403 | 调用方非 AMF / 缺 tai | 检查 nf-type、nf-id、tai 参数完整性 |
| 切片"通了但很慢" | NSI 选到了远端 UPF | 查 nsiInformationList→NRF→SMF 选锚点是否本地 |
排错心法(3glteinfo 总结):切片问题大多先暴露在会话层(PDU Session Establishment),而非注册层。当会话建不起来时,第一步必须回溯注册期的 Allowed NSSAI,确认请求切片是否真的进了 Allowed 列表——否则容易误判为 SMF/UPF 故障。
Q1: Allowed NSSAI 与 Requested NSSAI 的区别是什么? A: Requested NSSAI 是 UE 单方面的"意愿",可能含未签约或不在此 TA 可用的切片;Allowed NSSAI 是网络在签约、策略、TA 可用性三维约束下计算出的"实际可用"结果。UE 后续只能基于 Allowed NSSAI 建 PDU 会话。
Q2: AMF 重选一定会发生吗?
A: 不一定。若默认 AMF 已支持 UE 请求的全部切片,则 NSSF 返回的 Allowed NSSAI 不触发 targetAmfSet 重选,注册一次完成。只有当默认 AMF 能力不足时才重选。
Q3: 为什么一个 NSSAI 最多 8 个 S-NSSAI? A: 出于 NAS 信令开销与空口效率的平衡(TS 23.501 §5.15.2)。8 个足以覆盖典型多切片场景,同时避免 Registration 消息过长。
Q4: NSSF 在漫游下如何工作?
A: VPLMN 的 AMF 调用本地 V-NSSF,V-NSSF 可能再咨询 H-NSSF;返回的 Allowed NSSAI 用 VPLMN 的 S-NSSAI,并通过 mappedHomeNssai 维持与 HPLMN 签约切片的对应关系,保证计费与策略一致。
Q5: NSI-ID 有什么用?
A: NSI-ID(Network Slice Instance ID)把"逻辑切片"映射到"具体的一组 NF 实例(SMF/UPF 池)"。NSSF 在 nsiInformationList 中给出 NSI-ID 与关联 NRF,SMF 据此发现本切片专用的网元,实现切片间资源隔离。
本文由「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 等场景全覆盖。
