<!-- title: 5G NSSF网络切片选择信令机制拆解 -->
<!-- domain: slicing-mec -->

# 5G NSSF 网络切片选择信令机制拆解

## 一、为什么需要 NSSF：从一个反直觉的设计问题说起

在 5G SA 架构中，切片（Network Slicing）是最具革命性的能力之一。一个经常被初学者问到的问题是：**既然 UE 已经在 Registration Request 里带了 Requested NSSAI，AMF 自己根据 UDM 的订阅数据做个交集不就行了，为什么还要单独定义一个 NSSF（Network Slice Selection Function）这个网络功能？**

这正是理解整个切片选择信令体系的关键。AMF 自己算交集只能解决"这个用户订了哪些切片"的问题，但它无法解决以下三个更深层的决策：

1. **网络拓扑维度**：在当前 TA（Tracking Area）和当前 PLMN 下，**哪些切片实例（NSI）实际部署且可用**？不同地理区域、不同漫游场景下可用切片集合不同。
2. **路由维度**：UE 想用的每一个 S-NSSAI，应该被路由到哪个 **AMF Set**、哪个 **NSI**、由哪个 **NRF** 去发现对应的 SMF/UPF？
3. **漫游与跨域维度**：当 UE 漫游到 VPLMN 时，VPLMN 的切片标识与 HPLMN 的切片标识如何**映射（Mapping）**？

这三个决策的计算逻辑被 3GPP 从 AMF 中解耦出来，封装到 NSSF 中，对外通过 `Nnssf_NSSSelection` 服务暴露。这种解耦带来的好处是：切片策略（哪些区域部署哪些切片、切片如何映射）的运维变更只影响 NSSF，不需要改动 AMF 的代码与逻辑——这是典型的"策略与执行分离"的架构思想，定义在 **TS 23.501 Section 5.15** 与 **TS 29.531** 中。

本文聚焦这个具体机制：`Nnssf_NSSSelection` 服务的 `NSSelectionGet` 操作，在 Registration 与 PDU Session Establishment 两个场景下的完整信令链路、关键 IE、以及 AMF Relocation 的触发逻辑。

---

## 二、地基：S-NSSAI 与五种 NSSAI 的 IE 结构

### 2.1 S-NSSAI 的位级结构

切片选择的最小信息单元是 **S-NSSAI（Single Network Slice Selection Assistance Information）**，定义在 TS 23.501 Section 5.15.2。其结构如下：

```mermaid
graph LR
    A["S-NSSAI"] --> B["SST<br/>Slice/Service Type<br/>8 bits 必选"]
    A --> C["SD<br/>Slice Differentiator<br/>24 bits 可选"]
    B --> B1["标准化范围<br/>0x00–0x7F<br/>eMBB=1 eURLLC=2 mMTC=3<br/>VD2X=4 VCMCS=5"]
    B --> B2["运营商自定义范围<br/>0x80–0xFF<br/>不在标准间互通"]
    C --> C1["区分同一 SST 下<br/>的不同切片实例"]
    C --> C2["全0表示缺省SD<br/>即未指定"]
    style A fill:#2d5b8b,color:#fff
    style B fill:#4a90d9,color:#fff
    style C fill:#7ab8e0,color:#fff
```

**设计意图解读**：SST 用 8 位标准化取值保证全球互通（一个运营商的 `SST=1` 在另一个运营商网络里也代表 eMBB），而 SD 用 24 位运营商自定义空间保证**同一业务类型下可无限细分**（一个运营商可以部署 `SST=1, SD=0x000001` 给 ToC 消费者 eMBB，`SST=1, SD=0x000002` 给 ToB 企业 eMBB，互不干扰）。SD 全 0 是合法值，表示该 S-NSSAI 完全由 SST 唯一确定。

### 2.2 五种 NSSAI 的生命周期

3GPP 定义了 5 种 NSSAI 概念，它们在 UE 与网络的"博弈"中流转。这是切片选择信令要操作的核心数据对象：

| NSSAI 类型 | 存储位置 | 何时产生 | 作用域 | 典型用途 |
|-----------|---------|---------|--------|---------|
| **Subscribed NSSAI** | UDM/UDR 订阅数据 | 签约时预置 | HPLMN 全局 | 主清单，网络做授权的源头 |
| **Configured NSSAI for Serving PLMN** | UE + AMF | AMF 通过 Registration Accept 下发 | 每个 PLMN 一份 | 漫游/跨网时 UE 知道该 PLMN 支持哪些切片 |
| **Requested NSSAI** | UE（内存） | UE 在 Reg Request 里带 | 当前注册区 | UE 表达"我想用这些切片" |
| **Allowed NSSAI** | UE + AMF | NSSF 计算，AMF 通过 Reg Accept 下发 | 当前注册区 | UE 实际能用的切片，服务受其限制 |
| **Rejected NSSAI** | UE | AMF 通过 Reg Accept 下发 | 分 PLMN / 分 TA 两类 | UE 不应再请求这些切片（防乒乓） |

下方的状态转换图刻画了这五种 NSSAI 在一次注册过程中的流转关系：

```mermaid
stateDiagram-v2
    [*] --> Subscribed: UDM 签约预置
    Subscribed --> Configured: 首次注册<br/>AMF 派生下发
    Configured --> Requested: UE 发起业务<br/>取 Configured 子集
    Requested --> NSSF: Nnssf_NSSelectionGet
    Subscribed --> NSSF: Nudm_SDM_Get 取数
    NSSF --> Allowed: 取交集+可用性+映射
    NSSF --> Rejected: 不可用/未订阅
    Allowed --> UE_Accept: Registration Accept
    Rejected --> UE_Accept: 同一下发
    Allowed --> Requested: 移动到新 TA<br/>部分失效需重新协商
    note right of Allowed
        UE 所有 PDU Session
        的 S-NSSAI 必须 ∈ Allowed
    end note
```

一个关键约束（TS 23.501 Section 5.15.5）：**Configured NSSAI 和 Allowed NSSAI 中最多各 8 个 S-NSSAI**。这意味着 UE 在单次注册中最多同时激活 8 个切片——这是 NAS 层 IE 长度与处理复杂度的工程折中。

---

## 三、核心信令：NSSF 在 Registration 中的调用时序

这是本文的重点。下面这张时序图描绘了 Initial Registration 中，从 UE 发起请求到最终拿到 Allowed NSSAI 的完整 NSSF 调用链路：

```mermaid
sequenceDiagram
    autonumber
    participant UE
    participant RAN as (R)AN
    participant AMF
    participant AUSF
    participant UDM
    participant NSSF

    UE->>RAN: Registration Request<br/>Requested NSSAI + 5G-GUTI(optional)
    Note over RAN: RAN 切片选路:<br/>1. 用 Requested NSSAI 选 AMF Set<br/>2. 若无 Requested NSSAI 用 Default<br/>3. 若无法决定→选缺省AMF
    RAN->>AMF: N2 Initial UE Message<br/>(含 Requested/Default NSSAI)
    
    Note over AMF: 检查:本AMF是否已为该UE<br/>持有有效Allowed NSSAI?
    AMF->>UDM: Nudm_SDM_Get (Nssai)<br/>获取 Subscribed NSSAI
    UDM-->>AMF: Subscribed S-NSSAI list<br/>(含 Default 指示位)
    
    AMF->>NSSF: Nnssf_NSSelectionGet<br/>(NSSelectionGet 操作)
    Note right of AMF: 关键请求IE:<br/>- subscribed-nssai<br/>- requested-nssai<br/>- home-plmn-id<br/>- roaming-indication<br/>- ta-id (隐含于ngap)<br/>- nf-type=AMF

    Note over NSSF: 计算:<br/>Allowed = Subscribed ∩<br/>Requested ∩ 该TA可用切片
    NSSF->>NSSF: 生成 Allowed NSSAI<br/>+ Target AMF Set<br/>+ NSI 信息<br/>+ HPLMN 映射
    NSSF-->>AMF: NSSelectionGet Response
    Note left of NSSF: 关键响应IE:<br/>- allowed-nssai(含mappedSnssai)<br/>- configured-nssai(for serving PLMN)<br/>- target-amf-set<br/>- candidate-amf-list<br/>- nrf-amf<br/>- nsi-information[]
    Note over AMF: 若本AMF ∈ target-amf-set?<br/>→ NO: 触发 AMF Relocation
    Note over AMF: (这里假定 YES,继续)
    
    AMF-->>UE: Registration Accept<br/>Allowed NSSAI + Rejected NSSAI<br/>+ Configured NSSAI(for serving PLMN)
```

### 3.1 第 1–2 步：RAN 侧的切片选路

很多人误以为 NSSF 是切片选择的唯一入口，实际上 **RAN 才是切片选路的第一棒**。根据 TS 23.502 Section 4.2.2.2.2，(R)AN 收到 Registration Request 后，按以下优先级选择 AMF：

1. 若 UE 提供 **Requested NSSAI**，RAN 据此选择支持这些 S-NSSAI 的 AMF/AMF Set；
2. 若未提供，用 **Configured NSSAI** 或 **Default NSSAI**；
3. 若都无法判断，路由到一个**默认 AMF**，由该默认 AMF 后续触发完整切片选择与重定向。

这一步在 NAS 信令层面看不到，但它是切片从"逻辑标识"落地到"具体网络实例"的物理起点。

### 3.2 第 3 步：AMF 取 Subscribed NSSAI

AMF 通过 `Nudm_SDM_Get` 访问 UDM 的 **Nssai** 数据集（TS 29.503），拿到该用户签约的全部 S-NSSAI。这里有个细节：每个 Subscribed S-NSSAI 带一个 **`default` 指示位**——它决定了当 UE 不带 Requested NSSAI 时，网络用哪些切片作为兜底。`Subscribed S-NSSAI` 中标记为 default 的那一个，就是保证 UE 永远能接入的"保底切片"。

### 3.3 第 4 步：AMF 调用 NSSF——核心交互

**这是整个机制的灵魂步骤**。AMF 作为 NF service consumer，通过 SBI（HTTP/2 + JSON）调用 NSSF 的 `Nnssf_NSSSelection` 服务的 `NSSelectionGet` 操作。请求 URI 形如：

```
GET /nnssf-nsselection/v1/network-slice-information?
    nf-type=AMF&
    slice-info-request-for-registration=...
```

下表是 `NSSelectionGet` 请求与响应中最关键的 IE 说明（依据 TS 29.531 Section 6.1）：

| 方向 | IE 名称 | 类型 | 必选 | 含义与作用 |
|------|---------|------|------|-----------|
| 请求 | `nf-type` | enum | 是 | 发起者类型，注册场景为 AMF |
| 请求 | `slice-info-request-for-registration` | object | 注册场景必选 | 封装 subscribed/requested/allowed NSSAI、home-plmn-id、roaming-indication |
| 请求 | `requested-nssai` | list<Snssai> | 否 | UE 请求的切片，漫游时为 mapped 到 VPLMN 的值 |
| 请求 | `home-plmn-id` | PlmnId | 否 | 漫游/取映射时使用 |
| 请求 | `roaming-indication` | enum | 否 | home-network / roaming / local-breakout |
| 响应 | `allowed-nssai` | list<AllowedSnssai> | 是 | **核心输出**：含 sNssai + mappedHomePlmnSnssai |
| 响应 | `configured-nssai` | ConfiguredSnssai | 否 | 漫游时下发，含 supported features |
| 响应 | `target-amf-set` | string | 否 | 切片实际应归属的 AMF Set 名 |
| 响应 | `candidate-amf-list` | list<NfProfile> | 否 | 目标 AMF Set 内的候选 AMF |
| 响应 | `nrf-amf` | Uri | 否 | 用于发现 target AMF Set 的 NRF 地址 |
| 响应 | `nsi-information` | list<NsiInformation> | 否 | 每个 S-NSSAI 对应的 NSI 及其 NRF |
| 响应 | `rejected-nssai-in-plmn` / `rejected-nssai-in-ta` | list | 否 | 被 PLMN/TA 拒绝的切片 |

### 3.4 NSSF 的计算逻辑（设计意图）

NSSF 收到请求后，做的不是简单交集，而是**多维约束求解**：

```
Allowed NSSAI = Subscribed NSSAI 
                ∩ Requested NSSAI(若提供，否则全部 Subscribed)
                ∩ (当前 TA 支持的切片集合)
                -- 并对每个结果附加 HPLMN 映射
```

为什么要把"当前 TA 支持的切片"这一维度放进 NSSF 而非 AMF？因为切片部署是**网络全局拓扑的运维属性**，AMF 不应感知（也不应硬编码）"区域 A 部署了 URLLC 切片，区域 B 没有"。NSSF 作为唯一的策略中枢，统一持有这张"切片地理可用性地图"，使切片扩容/迁移只改 NSSF 数据，全网 AMF 自动适配。

---

## 四、NSI 信息：从逻辑切片到物理实例的桥接

`nsi-information` 是 NSSF 响应中常被忽略却极为关键的 IE。一个 **Network Slice Instance（NSI）** 是切片的物理部署实例，由 **NSI-ID** 标识。一个逻辑 S-NSSAI 可以对应一个或多个 NSI（切片实例的弹性伸缩）。

```mermaid
graph TD
    UE["UE 请求 S-NSSAI<br/>SST=1, SD=0x000001"]
    UE --> NSSF["NSSF 决策"]
    NSSF --> NSI1["NSI-ID = NSI-001<br/>部署于华东区域<br/>NRF-East"]
    NSSF --> NSI2["NSI-ID = NSI-002<br/>部署于华南区域<br/>NRF-South"]
    NSSF --> Map["nrf 字段指向<br/>相应NSI的NRF"]
    NSI1 --> SMF1["SMF-East / UPF-East<br/>一组切片专用NF实例"]
    NSI2 --> SMF2["SMF-South / UPF-South"]
    style UE fill:#2d5b8b,color:#fff
    style NSSF fill:#4a90d9,color:#fff
    style NSI1 fill:#7ab8e0,color:#fff
    style NSI2 fill:#7ab8e0,color:#fff
```

**设计意图**：NSSF 不直接告诉 AMF "用哪个 SMF"，而是告诉它"用哪个 NRF 去发现该 NSI 的 SMF"。这遵循了 5GC **无状态 + NRF 动态发现**的架构原则。后续 PDU Session Establishment 时，SMF 会用这个 NSI-ID 做进一步选择（TS 23.502 Section 4.3.2.2.1 中 SMF 选择与 NSI-ID 的关系）。

PDU 会话场景下，AMF/SMF 会调用 NSSF 的另一个操作 `NSSelectionAvailabilityForPDU`（TS 29.531 Section 6.2），传入 `slice-info-request-for-pdu-session`（含 S-NSSAI、NSI-ID），NSSF 返回该切片在 PDU 粒度的可用性与 NSI 路由信息——这是切片从注册态"常驻"过渡到会话态"激活"的衔接点。

---

## 五、AMF Relocation：切片选路失败的自动纠正

当 NSSF 返回的 `target-amf-set` 与当前接收 Registration 的 AMF 所属 Set **不一致**时，触发 **AMF Relocation due to Slicing**（TS 23.502 Section 4.2.9）。这是切片机制保证"UE 落到能服务其切片的 AMF"的核心纠错流程：

```mermaid
sequenceDiagram
    autonumber
    participant UE
    participant RAN as (R)AN
    participant OldAMF as 默认AMF<br/>(Set-A)
    participant NSSF
    participant NewAMF as 目标AMF<br/>(Set-B)

    UE->>RAN: Registration Request (Requested NSSAI)
    RAN->>OldAMF: 无法确定切片,路由到默认AMF
    OldAMF->>UDM: Nudm_SDM_Get (Nssai)
    OldAMF->>NSSF: NSSelectionGet
    NSSF-->>OldAMF: target-amf-set=Set-B (≠Set-A)
    Note over OldAMF: 发现自己不在目标Set<br/>必须重定向
    OldAMF->>NewAMF: Namf_Communication<br/>RegistrationForward (携带NAS)
    Note right of OldAMF: 或通过RAN重新路由<br/>5G-GUTI指示新AMF Set
    NewAMF->>NSSF: (可选)再次确认NSSelection
    NewAMF-->>UE: Registration Accept (Allowed NSSAI)
```

两种重定向路径：
- **RAN 触发重路由**：Old AMF 通过 N2 指令让 RAN 把 Registration 重新发给 target AMF Set 内的 AMF（依赖 5G-GUTI 中编码的 AMF Set 信息）。
- **AMF 间直接转发**：Old AMF 调用目标 AMF 的 `Namf_Communication_RegistrationCompleteMove` / NAS 转发，把上下文搬过去。

这一机制保证了"切片不可用就换 AMF"对 UE 透明——UE 只感知到一次注册成功，背后的 AMF 切换是网络自治的。

---

## 六、抓包识别与排错实战

### 6.1 抓包如何识别切片选择流程

在 SBI 接口抓包（通常在 AMF↔NSSF、AMF↔UDM 链路上），关键识别特征：

| 协议层 | 识别特征 |
|--------|---------|
| HTTP/2 | `GET /nnssf-nsselection/v1/network-slice-information` |
| 消息体 | `slice-info-request-for-registration`、`allowed-nssai`、`nsi-information` |
| NGAP（N2）| `Network Slice Selection Information` IE、`Allowed NSSAI` IE |
| NAS（5GMM）| `NSSAI` IE（Reg Request/Accept 携带）|

NAS 层的 NSSAI IE 编码定义在 TS 24.501 Section 9.11.3.37，每个 S-NSSAI 编码为 `SST(1字节) + [mapted SST] + SD(3字节)`，是排查 UE 实际请求/被授权切片的直接证据。

### 6.2 常见故障点与排错

| 现象 | 根因 | 排查思路 |
|------|------|---------|
| UE 拿到的 Allowed NSSAI 为空 | Requested NSSAI 与 Subscribed 不匹配 | 核对 UDM 订阅数据中 SST/SD 与 UE 请求值（注意大小端、SD 全0） |
| 反复触发 AMF Relocation | NSSF 的 `target-amf-set` 配置与 RAN 选路不一致 | 检查 NSSF 中 AMF Set 与切片的映射表、RAN 的切片配置 |
| UE 持续收到某切片被 Reject | 切片在当前 TA 未部署 | 查 NSSF 的"切片地理可用性"数据，或 Rejected NSSAI 的 reject 类型（PLMN/TA） |
| 漫游场景切片映射错误 | HPLMN↔VPLMN S-NSSAI 映射表缺失 | 核对 NSSF/UDM 的 mappedHomePlmnSnssai 映射配置 |
| PDU 会话建立失败"切片不可用" | NSI 未部署或 NRF 不可达 | 查 `nsi-information` 中 nrf 地址，确认对应 NSI 的 SMF 已注册 |
## 七、常见问题

**Q1：NSSF 是必需的吗？不用行不行？**
A：在非漫游且单切片场景下，AMF 可不调用 NSSF 而自行用 Subscribed NSSAI 派生 Allowed NSSAI（TS 23.501 允许的简化路径）。但一旦涉及多切片部署、AMF Set 划分、漫游映射，NSSF 就是必需的。商用网络基本都部署 NSSF。

**Q2：Allowed NSSAI 和 Subscribed NSSAI 的区别？**
A：Subscribed 是签约全集（UDR 里存的），Allowed 是当前注册区实际可用的子集（NSSF 算出的）。Allowed ⊆ Subscribed，且还要满足"该 TA 有部署"。Allowed 会随 UE 移动到新 TA 而可能缩减。

**Q3：为什么 Requested NSSAI 不存在时 UE 仍能注册？**
A：因为 Subscribed NSSAI 里有标记为 `default` 的 S-NSSAI。UE 不带 Requested NSSAI 时，网络用这些默认切片兜底，保证基础连通性。这也是为什么很多非切片感知的 UE（如普通手机）照样能注册。

**Q4：AMF Relocation 会让 UE 重新走一遍完整注册吗？**
A：不会。Relocation 主要是上下文转发（Old AMF→New AMF），NAS 层对 UE 表现为一次注册，认证流程的中间结果（如已完成的 AKA 鉴权）可复用，不会重复鉴权。

**Q5：NSI-ID 在哪一接口上真正起作用？**
A：主要在 PDU 会话建立与 SMF/UPF 选择环节。NSSF 把 NSI-ID 传给 AMF，AMF 在选择 SMF 时将其作为约束（TS 23.502 Section 4.3.2.2.1），SMF 进而选择属于该 NSI 的 UPF——这是切片从"AMF 级准入"到"数据面隔离"的落地。

---

## 参考来源

1. [3GPP TS 29.531 — 5G System; Network Slice Selection Services; Stage 3](https://www.3gpp.org/dynareport/29531.htm) — Section 5/6: `Nnssf_NSSSelection` 服务与 `NSSelectionGet`/`NSSelectionAvailabilityForPDU` 操作定义
2. [3GPP TS 23.501 — System architecture for the 5G System](https://www.3gpp.org/dynareport/23501.htm) — Section 5.15 Network slicing、Section 5.15.2 S-NSSAI、Section 5.15.5 NSSAI 数量约束
3. [3GPP TS 23.502 — Procedures for the 5G System](https://www.3gpp.org/dynareport/23502.htm) — Section 4.2.2.2 Registration（含切片选择）、Section 4.2.9 AMF Relocation、Section 4.3.2.2.1 SMF 选择
4. [ShareTechnote — 5G Network Slicing](https://www.sharetechnote.com/html/5G/5G_NetworkSlicing.html) — Allowed/Configured/Requested NSSAI 概念图解与时序
5. [free5GC — Network Function NSSF Introduction](https://free5gc.org/blog/20260128/20260128/) — 开源实现视角下的 `Nnssf_NSSelection` 服务与 NSI 映射逻辑
6. [3glteinfo — NSSF in 5G Explained](https://www.3glteinfo.com/5g/architecture/core-network/nssf/) — NSSF 与 AMF/UDM/PCF 交互流程

---
> 本文由「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学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
