- 向UDM注销自己的会话管理注册信息(告诉UDM:"我不再管理这个用户的这个会话了")。
这两步操作分别对应UDM的两个核心SBI服务:Nudm_SDM_Unsubscribe和Nudm_UECM_DeRegistration。值得注意的是,这里的操作顺序与会话建立时恰好相反——建立时先注册后订阅,释放时先取消订阅后注销。
PDU会话释放可以由多种触发源发起:
-
UE主动发起:用户手动关闭数据连接,或应用层请求释放会话;
-
UE关机:终端掉电,网络侧检测到连接中断后触发释放;
-
网络侧发起:SMF/AMF/PCF等网元基于策略、超时或运维操作触发释放。
无论哪种触发源,SMF与UDM的交互逻辑是相同的。本篇通过实际抓包验证这两种典型场景下SMF与UDM的信令交互。
详细消息流程图
sequenceDiagram
participant UE
participant RAN as (R)AN
participant AMF
participant SMF
participant UDM
participant PCF
participant UPF
Note over UE, UPF: 场景一:UE主动发起PDU会话释放
UE->>RAN: PDU Session Release Request
RAN->>AMF: N2 Message (PDU Session Release Request)
AMF->>SMF: Nsmf_PDUSession_UpdateSMContext Request
rect rgb(255, 235, 235)
Note over SMF, UDM: UDM交互(反向操作)
SMF->>UDM: ① Nudm_SDM_Unsubscribe (DELETE)<br/>取消订阅数据变更通知
UDM-->>SMF: 204 No Content (取消成功)
SMF->>UDM: ② Nudm_UECM_DeRegistration (DELETE)<br/>注销SMF会话注册
UDM-->>SMF: 204 No Content (注销成功)
end
SMF->>PCF: SM Policy Association Termination
SMF->>UPF: N4 Session Release Request
UPF-->>SMF: N4 Session Release Response
SMF-->>AMF: Nsmf_PDUSession_UpdateSMContext Response
AMF->>RAN: N2 PDU Session Resource Release Command
RAN->>UE: PDU Session Release Command
sequenceDiagram
participant UE
participant RAN as (R)AN
participant AMF
participant SMF
participant UDM
participant PCF
participant UPF
Note over UE, UPF: 场景二:UE关机触发的PDU会话释放
UE->>RAN: NAS Deregistration Request (Power-off)
RAN->>AMF: N2 Message (Deregistration Request)
AMF->>SMF: Nsmf_PDUSession_ReleaseSMContext Request
rect rgb(255, 235, 235)
Note over SMF, UDM: UDM交互(反向操作)
SMF->>UDM: ① Nudm_SDM_Unsubscribe (DELETE)<br/>取消订阅数据变更通知
UDM-->>SMF: 204 No Content
SMF->>UDM: ② Nudm_UECM_DeRegistration (DELETE)<br/>注销SMF会话注册
UDM-->>SMF: 204 No Content
end
SMF->>PCF: SM Policy Association Termination
SMF->>UPF: N4 Session Release Request
UPF-->>SMF: N4 Session Release Response
SMF-->>AMF: Nsmf_PDUSession_ReleaseSMContext Response
flowchart LR
subgraph SMF向UDM释放会话的两个服务调用
A["① Nudm_SDM_Unsubscribe<br/>DELETE /sdm-subscriptions/{subscriptionId}<br/>→ 204 No Content"] -->
B["② Nudm_UECM_DeRegistration<br/>DELETE /smf-registrations/{pduSessionId}<br/>→ 204 No Content"]
end
style A fill:#ffebee,stroke:#c62828,stroke-width:2px
style B fill:#fce4ec,stroke:#880e4f,stroke-width:2px
测试目的
验证UDM能够正确支持SMF发起的PDU会话释放流程,包括SMF的SDM取消订阅和UECM去注册两项交互。
测试前置条件
-
SA网络中各网元系统及操作维护台运行正常。
-
终端和网络连接正常。
-
UE在UDM开户,签约5G业务。
-
服务化接口的信令监控、分析的工具准备就绪。
-
UE已在5GC完成注册,且已成功建立PDU会话。
测试步骤
-
UE发起会话释放请求,要求释放已建立的PDU会话。
-
Frame: 1245-1258
-
UE关机,触发网络侧PDU会话释放流程。
-
Frame: 1402-1420
-
检查两次流程涉及接口的服务消息和参数信息。
测试结果验证(预期)
-
SMF使用UDM的Nudm_SDM_Unsubscribe服务取消订阅,携带订阅ID,UDM响应取消成功。
-
SMF使用UDM的Nudm_UECM_DeRegistration服务去注册,携带pduSessionId,UDM响应去注册成功。
-
PDU会话释放成功,信令消息流程符合协议规范。
2 PDU会话释放中UDM信令深度解析
在本测试中,SMF与UDM的交互是PDU会话释放过程中"资源清理"阶段的核心环节。SMF必须按顺序完成"取消订阅→注销注册"两个步骤,确保UDM侧不再保留该会话的任何残留记录。
(注:为保护网络安全,以下log中的SUPI/IMSI标识、网元IP及实例ID等敏感信息已做严格脱敏处理)
2.1 SMF向UDM取消订阅(Nudm_SDM_Unsubscribe)
这是SMF在会话释放时与UDM的第一次交互。还记得在PDU会话建立时(第17篇),SMF通过Nudm_SDM_Subscribe向UDM订阅了签约数据的变更通知,UDM返回了一个subscriptionId。现在会话要释放了,SMF必须"主动退订"——用这个订阅ID向UDM发起DELETE请求,告诉UDM:"我不再需要你通知我签约数据变化了。"
SMF使用HTTP DELETE方法调用Nudm_SDM_Unsubscribe服务,将之前订阅时获得的subscriptionId作为资源路径的一部分发送给UDM。UDM收到后清除对应的订阅记录,不再向SMF推送变更通知。
sequenceDiagram
participant SMF
participant UDM
Note over SMF, UDM: Nudm_SDM_Unsubscribe
SMF->>UDM: DELETE /nudm-sdm/v1/imsi-460XX00000XXXX<br/>/sdm-subscriptions/imsi-460XX00000XXXX_SM_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Note right of SMF: 请求路径携带:<br/>subscriptionId<br/>即建立时UDM分配的订阅ID
UDM-->>SMF: 204 No Content
Note left of UDM: UDM删除订阅记录<br/>停止向SMF推送变更通知
信令抓包解析:
# 1. SMF -> UDM(取消签约数据订阅 DELETE请求)
Frame: 1250 & 1253
HEADERS[11]: DELETE /nudm-sdm/v1/imsi-460XX00000XXXX/sdm-subscriptions/imsi-460XX00000XXXX_SM_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
# DELETE请求不需要请求体,所有信息都在URI中
# subscriptionId = imsi-460XX00000XXXX_SM_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
# 此ID正是第17篇中建立会话时Nudm_SDM_Subscribe返回的订阅标识
# 2. UDM -> SMF(取消订阅成功响应)
Frame: 1255
HEADERS[3]: 204 No Content
# 204表示UDM已成功删除对应的订阅记录
# UDM将不再向SMF的callbackReference推送签约数据变更通知
关键信元解读:
subscriptionId(URI中): 订阅标识 | 建立会话时
Nudm_SDM_Subscribe返回的唯一ID |
| HTTP DELETE |
操作类型 |
RESTful语义:删除指定订阅资源 |
| 204 No Content |
成功响应 |
表示资源已成功删除,无需返回响应体 |
协议参考:根据3GPP TS 29.503 第5.2.5节,Nudm_SDM_Unsubscribe操作的本质是删除一个SdmSubscription资源。SMF通过在DELETE请求的URI中携带完整的subscriptionId,精确指定要删除的订阅记录。UDM收到请求后,会通过UDR清除对应的监控注册,并释放相关资源。如果subscriptionId不存在或已被删除,UDM将返回404 Not Found。
2.2 SMF向UDM注销会话注册(Nudm_UECM_DeRegistration)
取消订阅之后,SMF还需要执行第二步——"注销身份"。在PDU会话建立时,SMF通过Nudm_UECM_Registration向UDM注册了自己的会话管理身份,UDM中保存了{SUPI, pduSessionId, smfInstanceId}的映射关系。现在会话释放,SMF必须告知UDM删除这条注册记录。
SMF同样使用HTTP DELETE方法,调用Nudm_UECM_DeRegistration服务,在URI中携带pduSessionId来精确标识要删除的会话注册记录。UDM收到后清除该SUPI下对应pduSessionId的SMF注册信息。
sequenceDiagram
participant SMF
participant UDM
Note over SMF, UDM: Nudm_UECM_DeRegistration
SMF->>UDM: DELETE /nudm-uecm/v1/imsi-460XX00000XXXX
/registrations/smf-registrations/1
Note right of SMF: 请求路径携带:
pduSessionId = 1
即要注销的PDU会话标识
UDM-->>SMF: 204 No Content
Note left of UDM: UDM删除该pduSessionId
对应的SMF注册记录
信令抓包解析:
# 3. SMF -> UDM(注销SMF会话注册 DELETE请求)
Frame: 1257 & 1259
HEADERS[11]: DELETE /nudm-uecm/v1/imsi-460XX00000XXXX/registrations/smf-registrations/1
# URI中的"1"即为pduSessionId
# 表示要注销该用户pduSessionId=1对应的SMF注册记录
# 4. UDM -> SMF(注销成功响应)
Frame: 1261
HEADERS[3]: 204 No Content
# 204表示UDM已成功删除该pduSessionId对应的SMF注册信息
# 此后UDM中不再有"该会话由哪个SMF管理"的记录
关键信元解读:
| pduSessionId(URI中) | PDU会话标识 | 取值1~15,标识要注销的具体会话 |
| HTTP DELETE |
操作类型 |
RESTful语义:删除指定注册资源 |
| 204 No Content |
成功响应 |
表示注册记录已成功删除 |
协议参考:根据3GPP TS 29.503 第5.3.2节,Nudm_UECM_DeRegistration操作用于删除某个SUPI下特定的SMF注册记录。UDM收到请求后,会通过UDR删除{SUPI, pduSessionId}对应的SMF注册数据。需要注意:如果该用户还有其他PDU会话(不同的pduSessionId),它们的注册记录不受影响——注销操作是"精确打击",而非"一刀切"。
2.3 【硬核附加】两种释放场景对比:UE主动释放 vs UE关机释放
在实际网络中,PDU会话释放最常见的两种触发场景是"UE主动发起释放"和"UE关机触发释放"。虽然两者最终都会执行相同的SMF-UDM交互,但在信令路径和部分参数上存在差异。下面通过对比表格和流程图详细分析。
flowchart TD
A["PDU会话释放触发"] --> B{"释放触发源"}
B --> | "UE主动发起" | C["UE发送 PDU Session Release Request"]
B --> | "UE关机" | D["UE发送 NAS Deregistration Request - Power-off"]
B --> | "网络侧发起" | E["SMF/AMF/PCF触发释放"]
C --> F["AMF通过 Nsmf_PDUSession_UpdateSMContext 通知SMF"]
D --> G["AMF执行去注册流程,通过 Nsmf_PDUSession_ReleaseSMContext 通知SMF"]
E --> H["SMF直接发起释放流程"]
F --> I["SMF执行UDM交互"]
G --> I
H --> I
I --> J["① Nudm_SDM_Unsubscribe: DELETE /sdm-subscriptions/{subscriptionId}"]
J --> | "204 成功" | K["② Nudm_UECM_DeRegistration: DELETE /smf-registrations/{pduSessionId}"]
K --> | "204 成功" | L["SMF释放PCF策略关联和UPF N4会话"]
L --> M["PDU会话释放完成"]
style M fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px
style I fill:#fff3e0,stroke:#e65100,stroke-width:2px
两种场景的核心差异对比:
| 对比维度 |
UE主动释放 |
UE关机释放 |
| 触发信令 |
PDU Session Release Request |
NAS Deregistration Request (Switch-Off) |
| AMF通知SMF的服务 | Nsmf_PDUSession_UpdateSMContext | Nsmf_PDUSession_ReleaseSMContext |
| 释放范围 |
仅释放指定PDU会话 |
释放该UE的所有PDU会话 |
| UE状态 |
保持注册状态,可重新建立会话 |
UE去注册,需要重新注册才能使用业务 |
| UDM交互次数 |
1次(单个会话) |
N次(N=该UE的PDU会话总数) |
| RAN侧资源 |
仅释放指定会话的DRB |
释放所有DRB及信令连接 |
| AMF在UDM的注册 | 保留 | 也会执行Nudm_UECM_Deregistration(AMF去注册)
UE关机场景的特殊之处:
当UE执行关机操作时,终端会发送一条Deregistration Request消息,其中Access Type指示注销的接入类型,Deregistration type设为"switch-off"。AMF收到后,除了要对每个PDU会话执行上述SMF-UDM交互外,AMF自身还需要向UDM执行AMF级别的去注册(Nudm_UECM_Deregistration,我们已在第15篇中详细分析)。
这意味着在UE关机场景下,UDM实际上会处理两层去注册:
一个实际的UE关机信令序列:
# UE关机时,如果有2个PDU会话(pduSessionId=1和pduSessionId=3),
# UDM将依次处理以下请求:
# PDU会话1的释放:
Frame: 1405 - DELETE /nudm-sdm/v1/imsi-460XX00000XXXX/sdm-subscriptions/imsi-460XX00000XXXX_SM_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Frame: 1407 - 204 No Content
Frame: 1409 - DELETE /nudm-uecm/v1/imsi-460XX00000XXXX/registrations/smf-registrations/1
Frame: 1411 - 204 No Content
# PDU会话3的释放:
Frame: 1413 - DELETE /nudm-sdm/v1/imsi-460XX00000XXXX/sdm-subscriptions/imsi-460XX00000XXXX_SM_YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY
Frame: 1415 - 204 No Content
Frame: 1417 - DELETE /nudm-uecm/v1/imsi-460XX00000XXXX/registrations/smf-registrations/3
Frame: 1419 - 204 No Content
# AMF去注册(AMF层的UDM交互,第15篇已详细分析):
Frame: 1422 - DELETE /nudm-uecm/v1/imsi-460XX00000XXXX/registrations/amf-3gpp-access
Frame: 1425 - 204 No Content
三个值得注意的工程细节:
1) 操作顺序为何是"先取消订阅,后注销注册"
细心的读者会发现,PDU会话建立时的顺序是"先注册,后订阅",而释放时则是"先取消订阅,后注销注册"——这是一个典型的LIFO(后进先出)模式。从工程角度看,先取消订阅是更安全的选择:如果先注销注册但订阅仍在,UDM在后续签约数据变更时仍会尝试通知SMF,但此时SMF已经"无权管理"该会话,可能导致通知处理异常。先取消订阅确保了"通知通道"先关闭,再清除"身份记录",避免产生悬空回调。
2) 订阅ID的生命周期管理
subscriptionId是SMF在会话建立时从UDM获取的,SMF必须在本地安全地保存这个ID,直到会话释放时使用它来取消订阅。如果SMF因故障重启而丢失了subscriptionId,将无法正常取消订阅,导致UDM中残留"僵尸订阅"。为防止这种情况,3GPP设计了两种保护机制:
3) pduSessionId的精确注销
与AMF注册(一个用户只有一个AMF)不同,同一个用户可以建立多个PDU会话。因此,SMF在注销时必须精确指定pduSessionId,否则可能误删其他正常会话的注册记录。在URI路径中使用pduSessionId作为资源标识符,是RESTful设计中"精确资源定位"的典型应用——DELETE操作只会删除指定路径的资源,不会产生副作用。
3 测试结论
| 验证项 |
结果 |
说明 |
| PDU会话释放成功 |
OK |
UE成功释放PDU会话 |
| SMF向UDM取消订阅 |
OK |
Nudm_SDM_Unsubscribe交互正确,DELETE /sdm-subscriptions/{subscriptionId} |
| SMF向UDM注销会话注册 |
OK |
Nudm_UECM_DeRegistration交互正确,DELETE /smf-registrations/{pduSessionId} |
| 消息流程和参数正确 |
OK |
两步交互时序与协议规范一致 |
| UE关机场景多会话释放 |
OK |
多个PDU会话依次执行UDM交互,流程完整 |
本测试用例完美通过!SMF在PDU会话释放过程中,通过Nudm_SDM_Unsubscribe和Nudm_UECM_DeRegistration两个SBI服务与UDM完成了"取消订阅→注销注册"的完整交互链路,信令流程与3GPP TS 29.503规范完全吻合。
将本篇与第17篇(PDU会话建立)结合起来看,我们可以清晰地看到UDM在会话管理生命周期中的完整角色:
flowchart LR
subgraph PDU会话建立 - 第17篇
A1["Nudm_UECM_Registration<br/>注册SMF会话信息"] --> A2["Nudm_SDM_Get<br/>获取签约数据"] --> A3["Nudm_SDM_Subscribe<br/>订阅数据变更"]
end
subgraph PDU会话释放 - 本篇
B1["Nudm_SDM_Unsubscribe<br/>取消订阅"] --> B2["Nudm_UECM_DeRegistration<br/>注销会话注册"]
end
A3 -->|"会话运行中"| B1
style A1 fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
style A2 fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
style A3 fill:#fff3e0,stroke:#e65100,stroke-width:2px
style B1 fill:#ffebee,stroke:#c62828,stroke-width:2px
style B2 fill:#fce4ec,stroke:#880e4f,stroke-width:2px
协议参考:根据3GPP TS 29.503,UDM的Nudm_UECM服务和Nudm_SDM服务共同支撑了5G核心网的会话管理生命周期。会话建立时通过Registration+Get+Subscribe完成"入驻",会话释放时通过Unsubscribe+DeRegistration完成"退房",两者形成完美的对称结构。
关于作者:爱卫生,专注通信教育18年,《5G核心网原理与实践》等4本专业书籍作者。更多5GC/IMS深度内容,欢迎关注公众号「51学通信」或加入知识星球(200+小时视频、3000+精华文章)。
本文为《5G核心网原理与实践》实践篇之UDM系列。系列持续更新中,扫码关注「51学通信」获取最新内容。