<!-- title: 5G UDM订阅数据四服务信令拆解 -->
<!-- domain: core-network -->

# 5G UDM订阅数据管理Nudm_SDM四服务信令全链路拆解

## 一、机制定位与设计意图

在5GC服务化架构中，**UDM（Unified Data Management）** 是用户签约数据的权威持有者，相当于4G EPC中HSS的演进形态。UDM对外暴露**Nudm_SDM（Subscriber Data Management）** 服务，为AMF、SMF、SMSF、NEF等NF消费者提供订阅数据的**获取、订阅、通知和取消**四大操作。

这一机制的设计核心意图是解决一个根本问题：**如何确保分布式网络功能中的用户数据始终与中央数据源保持一致？**

在传统4G架构中，MME在Attach流程中从HSS获取用户数据后，依赖IDR（Insert Subscriber Data Request）/ DSR（Delete Subscriber Data Request）等Diameter信令实现增量推送。5GC则彻底转向**HTTP/2 RESTful + JSON**模型，通过"Get → Subscribe → Notification → Unsubscribe"四步闭环实现订阅数据的全生命周期管理。

本文聚焦**TS 29.503**定义的Nudm_SDM四大服务操作，结合**TS 23.502 Section 4.2.2.2**（注册流程）和**Section 4.3.2.2.1**（PDU会话建立流程），逐信令拆解每个操作的REST API细节、关键IE字段和异常处理机制。

---

## 二、Nudm_SDM四大服务操作总览

Nudm_SDM服务定义于**TS 29.503 Section 5.2**，包含以下四个核心操作：

| 服务操作 | HTTP方法 | URI模板 | 消费者 | 触发场景 |
|----------|---------|---------|--------|---------|
| **Get** | `GET` | `/nudm-sdm/v2/{supi}/am-data`等 | AMF, SMF, SMSF | 注册、PDU会话建立 |
| **Subscribe** | `POST` | `/nudm-sdm/v2/{supi}/sdm-subscriptions` | AMF, SMF | 注册、PDU会话建立（紧跟Get之后） |
| **Notification** | `POST`（回调） | 消费者提供的callback URI | UDM→NF | 运营修改签约数据 |
| **Unsubscribe** | `DELETE` | `/nudm-sdm/v2/{supi}/sdm-subscriptions/{subscriptionId}` | AMF, SMF | 去注册、AMF变更 |

```mermaid
graph LR
    subgraph UDM数据资源层级
        A["/{supi}"] --> B["/am-data<br/>接入与移动性数据"]
        A --> C["/smf-select-data<br/>SMF选择数据"]
        A --> D["/sm-data<br/>会话管理数据"]
        A --> E["/ue-context-in-smf-data<br/>SMF中的UE上下文"]
        A --> F["/sms-data<br/>SMS签约数据"]
        A --> G["/sdm-subscriptions<br/>订阅关系"]
    end

    subgraph 消费者NF
        AMF["AMF"] -->|Get am-data| B
        AMF -->|Get smf-select-data| C
        AMF -->|Get ue-context-in-smf-data| E
        SMF["SMF"] -->|Get sm-data| D
        SMSF["SMSF"] -->|Get sms-data| F
    end

    AMF -->|Subscribe| G
    SMF -->|Subscribe| G
    UDM["UDM"] -->|Notification 回调| AMF
    UDM -->|Notification 回调| SMF
```

上图展示了Nudm_SDM的资源层级和NF消费者关系。每个SUPI下挂接多种数据子资源，不同NF消费者根据自身职能订阅不同数据类型。**关键设计原则：数据按需分发，而非全量推送。**

---

## 三、注册流程中的Nudm_SDM_Get与Subscribe信令拆解

### 3.1 完整信令时序

在**TS 23.502 Section 4.2.2.2（General Registration）** 步骤14中，AMF与UDM之间的交互是注册流程的关键里程碑。以下展示初始注册场景下的完整Nudm_SDM信令链：

```mermaid
sequenceDiagram
    participant UE
    participant RAN
    participant NewAMF as 新AMF
    participant OldAMF as 旧AMF
    participant UDM
    participant UDR

    Note over UE,UDM: TS 23.502 Section 4.2.2.2 步骤13-14

    UE->>RAN: Registration Request(SUCI/5G-GUTI)
    RAN->>NewAMF: N2 Initial UE Message + NAS

    opt 旧AMF存在（步骤5-10）
        NewAMF->>OldAMF: Namf_Communication_UEContextTransfer
        OldAMF-->>NewAMF: 200 OK(含已缓存的签约数据)
    end

    rect rgb(230, 245, 255)
    Note right of NewAMF: 步骤13: AMF选择UDM实例
    Note right of NewAMF: 若SUCI加密则先经SIDF解密

    NewAMF->>UDM: 14a. GET /nudm-sdm/v2/{supi}/am-data
    Note right of NewAMF: Query: fields=<过滤字段><br/>Header: Accept: application/json
    UDM->>UDR: Nudr_DM_Query(GET /subscription-data/{supi}/am-data)
    UDR-->>UDM: 200 OK(AccessAndMobilitySubscriptionData)
    UDM-->>NewAMF: 200 OK(JSON Body)

    NewAMF->>UDM: 14a'. GET /nudm-sdm/v2/{supi}/smf-select-data
    UDM-->>NewAMF: 200 OK(SmfSelectionSubscriptionData)

    NewAMF->>UDM: 14a''. GET /nudm-sdm/v2/{supi}/ue-context-in-smf-data
    Note right of NewAMF: 获取已建立PDU会话的SMF信息
    UDM-->>NewAMF: 200 OK(UeContextInSmfData)

    NewAMF->>UDM: 14b. POST /nudm-sdm/v2/{supi}/sdm-subscriptions
    Note right of NewAMF: Body: SdmSubscription<br/>- nfInstanceId: AMF ID<br/>- callbackReference: URI<br/>- monitoredResourceUris<br/>- expiry: 订阅过期时间
    UDM-->>NewAMF: 201 Created(Location header + subscriptionId)
    end

    rect rgb(255, 240, 230)
    Note right of OldAMF: 步骤14d: 旧AMF取消订阅
    OldAMF->>UDM: DELETE /nudm-sdm/v2/{supi}/sdm-subscriptions/{subId}
    UDM-->>OldAMF: 204 No Content
    end

    NewAMF-->>RAN: Registration Accept
    RAN-->>UE: NAS Registration Accept
```

### 3.2 步骤14a：Nudm_SDM_Get详解

AMF在步骤14a中发起**三次GET请求**（可合并为一次批量GET，取决于实现），分别获取三类关键数据：

#### 3.2.1 Access and Mobility Subscription Data（`/am-data`）

这是AMF最核心的签约数据集，定义于**TS 29.503 Section 6.1.6.2.3**，主要包含以下字段：

| IE字段 | 类型 | 含义 | 典型值 |
|--------|------|------|--------|
| `subscribedUeAmbr` | Ambr | UE级聚合最大比特率 | `uplink: "1 Gbps"`, `downlink: "10 Gbps"` |
| `nssai` | Nssai | 签约网络切片标识 | `defaultServingSst: [1,2,3]` |
| `gpsis` | array[string] | 外部标识符集合 | `["msisdn-8613800138000"]` |
| `subscribedSnssais` | array[Snssai] | 签约S-NSSAI列表（含缺省） | `[{sst:1, sd:"010203"}, {sst:2}]` |
| `accessRestrictionData` | integer | 接入限制位图 | `0x00`（无限制） |
| `coreNetworkTypeRestriction` | enum | 核心网类型限制 | `"5GC"` |
| `rfspIndex` | integer | RAT/频率选择优先级索引 | `1-256` |
| `subscribedDnnList` | array[string] | 签约DNN列表 | `["internet", "ims"]` |

**设计意图：** AMF需要`subscribedSnssais`来构建Registration Accept中的Allowed NSSAI，需要`subscribedUeAmbr`来在NGAP Initial Context Setup Request中向RAN传递UE-AMBR。`rfspIndex`则用于辅助RAN侧的频率选择策略。

#### 3.2.2 SMF Selection Subscription Data（`/smf-select-data`）

```json
{
  "subscribedSnssaiInfos": {
    "00101": {
      "dnnSmfInfoList": [
        {
          "dnn": "internet",
          "smfInstaceId": "smf-instance-001"
        }
      ],
      "snssai": {"sst": 1, "sd": "000001"}
    }
  }
}
```

该数据帮助AMF在PDU会话建立时执行SMF选择。每个S-NSSAI下可映射多个DNN与对应SMF实例。**TS 23.501 Section 6.3.2**定义了SMF选择算法，该数据是算法输入之一。

#### 3.2.3 UE Context in SMF Data（`/ue-context-in-smf-data`）

此数据记录UE当前已建立PDU会话的SMF列表。对于初始注册是空列表；对于移动性注册更新，AMF需要此数据来通知各SMF新的服务AMF已接管。关键IE：

| IE字段 | 含义 |
|--------|------|
| `smfRegList` | SMF注册列表，每项含SMF ID、DNN、S-NSSAI、PDU Session ID |
| `pgwInfo` | 演进型PGW信息（用于EPS互操作） |

### 3.3 步骤14b：Nudm_SDM_Subscribe详解

AMF获取完数据后立即发起订阅，确保后续数据变更能被及时感知。订阅请求的JSON Body结构（TS 29.503 Section 6.1.6.2.10）：

```json
{
  "nfInstanceId": "550e8400-e29b-41d4-a716-446655440000",
  "callbackReference": "https://amf-01.example.com/nudm-sdm-notification/callback",
  "monitoredResourceUris": [
    "https://udm.example.com/nudm-sdm/v2/supi-imsi-460011234567890/am-data",
    "https://udm.example.com/nudm-sdm/v2/supi-imsi-460011234567890/smf-select-data"
  ],
  "expiry": "2026-12-31T23:59:59Z",
  "sdmSubscriptionId": "sub-20260524-001"
}
```

**关键设计要点：**

1. **callbackReference**：UDM将在数据变更时向此URI发送Nudm_SDM_Notification。这是典型的观察者模式在SBI中的实现。

2. **monitoredResourceUris**：AMF仅订阅自己关心的数据资源（`am-data`和`smf-select-data`），**不会订阅`sm-data`（那是SMF的事）**。这种按需订阅避免了不必要的通知流量。

3. **expiry**：订阅有过期时间。AMF需要在过期前续订，否则UDM将自动清除订阅。这防止了"幽灵订阅"（NF宕机后无人清理）。

4. **UDM内部处理**：UDM收到Subscribe后，会通过`Nudr_DM_Subscribe`向UDR注册通知触发器。当UDR中的签约数据被O&M系统修改时，UDR通知UDM，UDM再回调消费NF。

---

## 四、Nudm_SDM_Notification：数据变更通知全链路

### 4.1 触发场景

Nudm_SDM_Notification的典型触发场景包括：

| 场景 | 变更数据类型 | AMF动作 | SMF动作 |
|------|------------|---------|---------|
| 运营商停机 | AccessAndMobilitySubscriptionData | 发起去注册 | 释放PDU会话 |
| 变更签约切片 | SmfSelectionSubscriptionData | 更新Allowed NSSAI | — |
| 变更QoS等级 | SessionManagementSubscriptionData | — | 发起PDU会话修改 |
| 新增DNN | SessionManagementSubscriptionData | — | 允许新PDU会话建立 |
| 限制漫游区域 | AccessAndMobilitySubscriptionData | 发起去注册或限制 | — |
| 修改计费策略 | SessionManagementSubscriptionData | — | 通知PCF更新PCC规则 |

### 4.2 通知信令流程

```mermaid
sequenceDiagram
    participant OAM as O&M系统
    participant UDR as UDR
    participant UDM as UDM
    participant AMF
    participant SMF
    participant UE

    Note over OAM,UE: TS 23.502 Section 4.2.2.2.2 订阅数据变更通知

    OAM->>UDR: 修改用户签约数据(如: 停机)
    UDR->>UDM: Nudr_DM_Notify(变更通知)
    Note right of UDR: UDR感知到数据变更<br/>通知已注册的UDM实例

    rect rgb(255, 245, 230)
    Note right of UDM: UDM查找SDM订阅表
    Note right of UDM: 遍历所有已订阅该SUPI的NF

    UDM->>AMF: POST {callbackUri}<br/>Nudm_SDM_Notification
    Note right of UDM: Body: ModificationNotification<br/>changeItems:[{op:REPLACE,<br/>path:/am-data/subscribedUeAmbr}]
    AMF-->>UDM: 200 OK(确认)
    end

    rect rgb(230, 255, 230)
    UDM->>SMF: POST {smfCallbackUri}<br/>Nudm_SDM_Notification
    Note right of UDM: Body: ModificationNotification<br/>changeItems:[{op:DELETE,<br/>path:/sm-data/dnnConfigurations/internet}]
    SMF-->>UDM: 200 OK(确认)
    end

    alt AMF判定需要去注册(如:停机)
        AMF->>UE: NAS Deregistration Request(type: re-registration required)
    else AMF判定仅需更新配置
        AMF->>UE: NAS UE Configuration Update Command
    end

    alt SMF判定需要释放会话
        SMF->>AMF: Nsmf_PDUSession_UpdateSMContext(释放指示)
        AMF->>UE: NAS PDU Session Release Command
    else SMF判定需要修改QoS
        SMF->>AMF: Nsmf_PDUSession_UpdateSMContext(QoS更新)
    end
```

### 4.3 Notification消息JSON结构

Nudm_SDM_Notification的请求体（TS 29.503 Section 6.1.6.2.11）包含一个`ModificationNotification`结构：

```json
{
  "notifyItems": [
    {
      "resourceId": "https://udm.example.com/nudm-sdm/v2/supi-imsi-460011234567890/am-data",
      "changeType": "MODIFY",
      "changeItems": [
        {
          "op": "REPLACE",
          "path": "/subscribedUeAmbr",
          "from": {"uplink": "1 Gbps", "downlink": "10 Gbps"},
          "to": {"uplink": "100 Mbps", "downlink": "1 Gbps"}
        }
      ]
    }
  ],
  "originalCallbackReference": "https://amf-01.example.com/nudm-sdm-notification/callback"
}
```

**核心IE解析：**

| IE字段 | 含义 | 取值范围 |
|--------|------|---------|
| `changeType` | 变更类型 | `ADD`, `MODIFY`, `DELETE` |
| `op` | JSON Patch操作 | `ADD`, `REPLACE`, `REMOVE`（RFC 6902） |
| `path` | JSON Pointer路径 | 指向变更的具体字段（RFC 6901） |
| `originalCallbackReference` | 原始订阅回调URI | 用于NF匹配订阅 |

**设计亮点：** 通知采用**JSON Patch（RFC 6902）**格式描述增量变更，而非全量推送。这意味着AMF/SMF只需应用补丁即可更新本地缓存，无需重新获取完整数据集。在高并发场景（如批量停机）下，这显著降低了CPU开销。

---

## 五、PDU会话建立中的Nudm_SDM交互

### 5.1 SMF与UDM的SDM交互

在PDU会话建立流程中（TS 23.502 Section 4.3.2.2.1），SMF同样需要与UDM进行Get + Subscribe交互：

```mermaid
sequenceDiagram
    participant UE
    participant AMF
    participant SMF
    participant UDM
    participant PCF
    participant UPF

    UE->>AMF: NAS PDU Session Establishment Request
    AMF->>SMF: Nsmf_PDUSession_CreateSMContext

    rect rgb(240, 248, 255)
    Note right of SMF: TS 23.502 4.3.2.2.1 步骤7
    SMF->>UDM: GET /nudm-sdm/v2/{supi}/sm-data?dnn=internet&single-nssai={"sst":1}
    Note right of SMF: 查询特定DNN+S-NSSAI的会话管理数据
    UDM-->>SMF: 200 OK(SessionManagementSubscriptionData)
    Note right of UDM: 返回: dnnConfigurations,<br/>sscModes, 5gQosProfile,<br/>chargingProperties等

    SMF->>UDM: POST /nudm-sdm/v2/{supi}/sdm-subscriptions
    Note right of SMF: 订阅sm-data变更通知
    UDM-->>SMF: 201 Created
    end

    SMF->>PCF: Npcf_SMPolicyControl_Create
    SMF->>UPF: N4 Session Establishment
    SMF-->>AMF: Nsmf_PDUSession_CreateSMContext Response
```

### 5.2 Session Management Subscription Data关键字段

SMF获取的`SessionManagementSubscriptionData`（TS 29.503 Section 6.1.6.2.7）与AMF获取的数据完全不同：

| IE字段 | 含义 | SMF使用场景 |
|--------|------|-----------|
| `dnnConfigurations` | 每个DNN的配置参数集 | PDU会话类型、IP地址分配方式、SSC模式 |
| `5gQosProfile` | 缺省QoS配置 | 缺省QoS Flow的5QI/ARP |
| `sscModes` | 支持的SSC模式 | SSC模式选择 |
| `chargingProperties` | 计费属性 | 在线/离线计费触发 |
| `sessionAmbr` | 会话级AMBR | UPF QoS enforcement |
| `staticIpAddress` | 静态IP地址 | UE IP地址分配 |
| `pduSessionTypes` | 允许的PDU会话类型 | IPv4/IPv6/以太网 |

**与4G对比：** 4G中PGW从HSS通过Diameter Cx接口获取APN配置（APN-Configuration-Profile）。5G中SMF通过RESTful GET按DNN粒度获取，更加灵活，支持单次查询特定DNN+S-NSSAI组合。

---

## 六、Nudm_SDM_Unsubscribe：订阅生命周期终结

### 6.1 触发场景

Unsubscribe操作发生在以下场景：

1. **AMF变更**（TS 23.502 Section 4.2.2.2步骤14d）：新AMF注册到UDM后，旧AMF取消其SDM订阅
2. **显式去注册**（TS 23.502 Section 4.2.2.2.2）：UE或网络发起去注册后，AMF取消订阅
3. **PDU会话释放**：SMF释放最后一个PDU会话后取消对`sm-data`的订阅
4. **订阅过期**：超过`expiry`时间后UDM自动清理

### 6.2 资源竞争与博弈

当AMF发生变更时存在一个微妙的时序问题：**旧AMF的Unsubscribe与新AMF的Subscribe必须保证原子性，否则可能出现通知丢失窗口。**

TS 23.502的设计策略是：

```
时序保证：
1. 新AMF先执行 Nudm_UECM_Registration（注册自己为服务AMF）
2. 新AMF再执行 Nudm_SDM_Get + Subscribe
3. 旧AMF收到Nudm_SDM_Notification（告知AMF已变更）后，执行Unsubscribe
4. UDM维护subscription列表，新旧AMF的订阅短暂共存
```

这种"先建后拆"的设计确保了在AMF切换期间不会丢失通知。

---

## 七、UDM内部数据流转与UDR交互

UDM本身可以不持久化数据，而是通过**Nudr_DM（Data Management）** 接口从UDR（Unified Data Repository）获取。这种分层架构实现了数据存储与数据管理的解耦。

```mermaid
graph TB
    subgraph NF消费者
        AMF["AMF"]
        SMF["SMF"]
        SMSF["SMSF"]
    end

    subgraph 数据管理层
        UDM_SDM["UDM<br/>Nudm_SDM服务"]
        UDM_UECM["UDM<br/>Nudm_UECM服务"]
        UDM_Auth["UDM<br/>Nudm_Auth服务"]
    end

    subgraph 数据存储层
        UDR["UDR<br/>Nudr_DM服务"]
    end

    subgraph 外部系统
        OAM["O&M/Provisioning"]
    end

    AMF -->|"Get/Subscribe<br/>am-data, smf-select-data"| UDM_SDM
    SMF -->|"Get/Subscribe<br/>sm-data"| UDM_SDM
    SMSF -->|"Get/Subscribe<br/>sms-data"| UDM_SDM

    AMF -->|"Registration<br/>服务AMF记录"| UDM_UECM
    SMF -->|"Registration<br/>PDU会话记录"| UDM_UECM

    UDM_SDM -->|"Nudr_DM_Query"| UDR
    UDM_SDM -->|"Nudr_DM_Subscribe"| UDR
    UDM_UECM -->|"Nudr_DM_Create/Update"| UDR

    UDM_SDM -->|"Nudm_SDM_Notification"| AMF
    UDM_SDM -->|"Nudm_SDM_Notification"| SMF

    OAM -->|"修改签约数据"| UDR
    UDR -->|"Nudr_DM_Notify"| UDM_SDM

    style UDR fill:#fff3e0
    style UDM_SDM fill:#e3f2fd
    style OAM fill:#f3e5f5
```

**数据流转关键路径：**

1. **读取路径**：NF → Nudm_SDM_Get → UDM → Nudr_DM_Query → UDR → UDM → NF
2. **订阅路径**：NF → Nudm_SDM_Subscribe → UDM → Nudr_DM_Subscribe → UDR（注册触发器）
3. **变更路径**：O&M → UDR → Nudr_DM_Notify → UDM → 遍历订阅表 → Nudm_SDM_Notification → 各NF

---

## 八、REST API URI设计与HTTP状态码博弈

### 8.1 URI层级设计

Nudm_SDM的RESTful URI遵循严格的层级设计（TS 29.503 Annex A.2）：

```
{nudm-sdm API Root}/v2
├── /{supi}
│   ├── /am-data                          → AMF获取移动性数据
│   ├── /smf-select-data                  → AMF获取SMF选择数据
│   ├── /ue-context-in-smf-data           → AMF获取PDU会话上下文
│   ├── /sm-data                          → SMF获取会话管理数据
│   │   ├── ?dnn=internet                 → 按DNN过滤
│   │   └── ?single-nssai={"sst":1}      → 按S-NSSAI过滤
│   ├── /sms-data                         → SMSF获取SMS数据
│   ├── /sms-mng-data                     → SMSF获取SMS管理数据
│   ├── /trace-data                       → 获取MDT追踪数据
│   ├── /sdm-subscriptions                → 订阅管理
│   │   ├── POST (创建订阅)
│   │   └── /{subscriptionId}
│   │       └── DELETE (取消订阅)
│   └── /lcs-pos-data                     → 位置服务数据
├── /shared-data                          → 共享数据
│   └── /{sharedDataId}
└── /{gpsi}                               → 外部标识符查询
    └── /sm-data
```

### 8.2 关键HTTP状态码

| 状态码 | 场景 | NF处理策略 |
|--------|------|-----------|
| `200 OK` | Get成功，返回完整数据 | 解析JSON，缓存到本地 |
| `201 Created` | Subscribe成功 | 保存subscriptionId，记录expiry |
| `204 No Content` | Unsubscribe成功 | 清除本地订阅记录 |
| `403 Forbidden` | SUPI不存在或NF无权限 | 判断是临时还是永久，永久则去注册 |
| `404 Not Found` | 数据不存在 | 可能是新用户，检查是否需要默认配置 |
| `429 Too Many Requests` | UDM过载 | 按`Retry-After`退避重试 |
| `503 Service Unavailable` | UDM不可用 | 重试或选择备用UDM实例 |

**设计博弈：** 为什么Get操作返回`200 OK`而不是`206 Partial Content`？因为3GPP设计原则是"一次Get获取某类数据的全集"，过滤通过Query参数（如`?fields=`）实现。这与Web API常用的分页模式不同——签约数据通常不大，无需分页。

---

## 九、实战排错指南

### 9.1 抓包识别Nudm_SDM信令

在Wireshark中使用以下过滤条件（HTTP/2 over TLS需要解密）：

```
# 过滤所有Nudm_SDM消息
http2.headers.path contains "nudm-sdm"

# 过滤AMF获取移动性数据
http2.headers.path contains "nudm-sdm" and http2.headers.path contains "am-data"

# 过滤订阅操作
http2.headers.path contains "sdm-subscriptions" and http2.request.method == "POST"

# 过滤通知回调
http2.request.method == "POST" and http2.headers.path contains "callback"
```

### 9.2 常见故障与排错

| 故障现象 | 根因分析 | 排查步骤 |
|---------|---------|---------|
| 注册失败（5G-DNN_CONGESTION） | UDM返回404或空签约数据 | 检查Nudm_SDM_Get响应中DNN列表是否为空 |
| 切片不可用（Rejected S-NSSAI） | 签约S-NSSAI与请求不匹配 | 对比`am-data`中`subscribedSnssais`与UE请求的NSSAI |
| PDU会话建立失败 | SMF Get sm-data返回403 | 检查SUPI/DNN/S-NSSAI组合是否在UDR中配置 |
| 数据变更不生效 | Subscribe缺失或已过期 | 检查AMF/SMF日志中的Subscribe响应码和expiry时间 |
| 旧AMF收到幽灵通知 | Unsubscribe未执行 | 检查旧AMF是否收到了AMF变更通知并正确Unsubscribe |
| UDM 429错误 | 短时间大量Get请求 | 检查AMF是否有异常的重复注册请求洪泛 |
## 十、4G HSS vs 5G UDM SDM机制对比

| 对比维度 | 4G HSS/SPR | 5G UDM/UDR |
|---------|-----------|-----------|
| **接口协议** | Diameter (Cx/S6a) | HTTP/2 REST (Nudm_SDM) |
| **数据获取** | ULR/ULA（全量推送） | GET（按资源类型精准查询） |
| **变更通知** | IDR/DSR（推拉结合） | Subscribe + Notification（纯推送） |
| **数据格式** | AVP（二进制编码） | JSON（文本编码） |
| **数据存储** | HSS内置或外挂SPR | UDR独立网元（Nudr接口） |
| **数据粒度** | APN级别 | DNN + S-NSSAI联合粒度 |
| **切片支持** | 不支持 | 原生支持S-NSSAI |
| **接口安全** | IPsec/Diameter TLS | OAuth2.0 + TLS 1.3 |
| **扩展性** | 受限于Diameter连接模型 | RESTful天然支持水平扩展 |

**关键演进逻辑：** Diameter协议的连接模型（peer-to-peer）在云原生环境下扩展困难。HTTP/2 REST模型天然适合容器化部署和负载均衡。Nudm_SDM的设计使得UDM可以无状态化——所有持久数据交给UDR，UDM实例可随时扩缩容。

---

## 常见问题

**Q1: Nudm_SDM_Get和Nudm_SDM_Subscribe为什么不在同一个HTTP请求中完成？**

A: 这是RESTful API的设计原则——Get是幂等的资源读取操作，Subscribe是创建订阅资源的写入操作，语义不同。合并会违反REST的无状态语义。但在实际部署中，一些厂商实现了"Get + Implicit Subscribe"优化：在Get请求中携带额外Header暗示同时订阅，减少一次RTT。

**Q2: 如果UDM发送Nudm_SDM_Notification时AMF不可达怎么办？**

A: TS 29.503定义了重试机制。UDM会根据HTTP响应码判断：如果收到TCP连接失败或5xx错误，UDM会启动重试定时器（指数退避）。超过最大重试次数后，UDM将标记该订阅为"失效"，并可能通过Nudm_UECM查询当前服务AMF是否已变更。如果AMF已切换，新AMF的订阅将正常工作。

**Q3: SMF在PDU会话建立时获取的sm-data和AMF获取的sm-data有什么区别？**

A: AMF获取的是`smf-select-data`（用于SMF选择），包含每个S-NSSAI下可用的SMF实例列表和DNN映射。SMF获取的是`sm-data`（Session Management Subscription Data），包含DNN级别的详细配置（QoS profile、计费属性、IP地址分配策略等）。两者虽然都与会话相关，但消费者和使用目的完全不同。

**Q4: Nudm_SDM和Nudm_UECM有什么关系？为什么要分成两个服务？**

A: Nudm_UECM管理的是UE的"注册关系"（谁在服务这个UE——AMF ID、SMF ID、PDU Session ID），是动态的、频繁变化的。Nudm_SDM管理的是UE的"签约数据"（这个用户有什么权限——切片、QoS、DNN），是相对静态的。分离后，查询注册信息不需要遍历签约数据，查询签约数据也不需要处理注册信息，各自可以独立缓存和扩展。

**Q5: 多个UDM实例如何保证数据一致性？**

A: 3GPP设计中UDM通过UDR实现数据一致性。多个UDM实例共享同一个UDR（或UDR集群），Nudm_SDM_Get实际是从UDR读取。订阅通知的触发也由UDR统一管理——UDR数据变更后通知所有已注册的UDM实例，再由各UDM实例分别通知其管理的NF消费者。这保证了"单一数据源 + 多通知分发器"的一致性模型。

---

## 参考来源

1. [3GPP TS 29.503 V18.x.x](https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3342) — Nudm_SDM服务定义，Section 5.2（服务操作）、Section 6.1.6（数据模型）
2. [3GPP TS 23.502 V18.x.x](https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3145) — Section 4.2.2.2（注册流程步骤14）、Section 4.3.2.2.1（PDU会话建立流程步骤7）
3. [3GPP TS 23.501 V18.x.x](https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=3144) — Section 5.2.3（UDM功能描述）、Section 6.3.2（SMF选择机制）
4. [free5GC UDM Introduction](https://free5gc.org/blog/20230719/UDM_introduce/) — 开源5GC中UDM实现解析
5. [Oracle UDM SDM Service Guide](https://docs.oracle.com/en/industries/communications/cloud-native-core/2.2.0/udm_users_guide/subscription-data-management-sdm-service.html) — 商用UDM的SDM服务实现细节

---
> 本文由「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)
