关键SBI接口:
Nnrf_NFManagement_NFUpdate:NF服务更新操作(HTTP PATCH/PUT)
二、流程图
flowchart TD
A[NSSF已在NRF完成服务注册] --> B[NSSF服务配置发生变更]
B --> C[构造NFUpdate请求消息]
C --> D[NSSF发送Nnrf_NFManagement_NFUpdate PATCH请求到NRF]
D --> E[NRF接收并验证更新请求]
E --> F{NF Profile验证通过}
F -- 否 --> G[NRF返回错误响应]
F -- 是 --> H[NRF更新本地NF Profile存储]
H --> I[NRF返回200 OK响应]
I --> J[其他NF可查询到最新的NSSF信息]
J --> K[通过维护界面确认NSSF信息已更新]
三、测试目的
验证NSSF在修改服务配置后,能够主动向NRF发起服务更新请求,完成NF实例信息的更新。具体验证点包括:
-
NSSF在NRF已完成服务注册;
-
NSSF修改服务配置后,自动向NRF发送NFUpdate请求消息,消息中包含更新的服务描述;
-
NRF接收并处理NSSF的更新请求,更新本地存储的NF Profile;
-
通过操作维护命令或界面查询NRF上的NSSF注册信息,确认信息已更新;
-
NSSF与NRF之间的服务接口消息可查看到对应的期望网络功能及参数信息。
四、前置条件
| 序号 |
前置条件 |
| 1 |
NSSF已在NRF成功完成服务注册(参考第1篇) |
| 2 |
NRF服务运行正常,可接受NF更新请求 |
| 3 |
NSSF实例运行正常,心跳机制工作正常 |
| 4 |
网络连通性正常,NSSF与NRF之间的SBI接口可达 |
| 5 |
已建立各接口信令跟踪和用户跟踪 |
| 6 |
已准备好NSSF服务配置变更内容(如新增切片、修改服务参数等) |
五、测试步骤
步骤1:确认NSSF在NRF已完成服务注册
在发起服务更新之前,首先确认NSSF已经在NRF上成功注册,并且注册信息是最新的。
查询NRF上的NSSF注册信息:
GET /nnrf-nfm/v1/nf-instances?nf-type=NSSF HTTP/1.1
Host: 10.XX.XX.XX:8443
Accept: application/json
预期返回信息:
{
"nfInstances": [
{
"nfInstanceId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"nfType": "NSSF",
"nfStatus": "REGISTERED",
"heartBeatTimer": 30,
"sbi": {
"scheme": "https",
"addresses": [
{
"ipv4Address": "10.XX.XX.XX",
"port": 8443
}
]
},
"nsiList": [
{
"snssai": {
"sst": 1,
"sd": "010203"
}
}
]
}
]
}
步骤2:修改NSSF服务配置,触发服务更新
通过切片管理平台或操作维护界面,修改NSSF的服务配置。常见的配置变更场景包括:
场景一:新增支持的切片
{
"operation": "ADD_SLICE",
"nsiList": [
{
"snssai": {"sst": 1, "sd": "010203"},
"nsiId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
},
{
"snssai": {"sst": 2, "sd": "040506"},
"nsiId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
}
]
}
场景二:修改服务版本
{
"operation": "UPDATE_SERVICE_VERSION",
"nfServices": [
{
"serviceName": "nnssf-nssselection",
"versions": [
{"apiVersionInUri": "v2", "apiFullVersion": "2.0.0"}
]
}
]
}
NSSF检测到配置变更后,自动触发向NRF的服务更新流程。
步骤3:检查NRF与NSSF的服务接口消息
通过信令跟踪工具,抓取NSSF与NRF之间的SBI接口消息,验证服务更新流程的正确性。
在NRF上查询更新后的NSSF信息,确认注册信息已更新。
六、预期结果
结果a:服务更新流程正确
NSSF的服务更新请求流程正确,一次请求/响应流程返回一种类型的NSSF实例。整个更新过程符合3GPP TS 29.510规范定义的NFUpdate流程。
结果b:NSSF发送NFUpdate请求包含更新的服务描述
NSSF发送Nnrf_NFManagement_NFUpdate请求消息,消息中包含更新的服务描述。
Nnrf_NFManagement_NFUpdate请求消息(HTTP PATCH):
PATCH /nnrf-nfm/v1/nf-instances/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX HTTP/1.1
Host: 10.XX.XX.XX:8443
Content-Type: application/json-patch+json
请求Body(JSON Patch格式):
[
{
"op": "replace",
"path": "/nsiList",
"value": [
{
"snssai": {"sst": 1, "sd": "010203"},
"nsiId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
},
{
"snssai": {"sst": 2, "sd": "040506"},
"nsiId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
}
]
},
{
"op": "replace",
"path": "/nfServices/0/nfServiceStatus",
"value": "REGISTERED"
}
]
Frame 1:NSSF -> NRF,Nnrf_NFManagement_NFUpdate PATCH请求,携带JSON Patch格式的更新内容
完整NF Profile更新方式(HTTP PUT):
在某些实现中,NSSF也可以使用HTTP PUT方法发送完整的更新后的NF Profile:
PUT /nnrf-nfm/v1/nf-instances/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX HTTP/1.1
Host: 10.XX.XX.XX:8443
Content-Type: application/json
请求Body(完整NF Profile):
{
"nfInstanceId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"nfType": "NSSF",
"nfStatus": "REGISTERED",
"heartBeatTimer": 30,
"sbi": {
"scheme": "https",
"registeredDomain": "5gc.mncXX.mcc460.3gppnetwork.org",
"addresses": [
{
"ipv4Address": "10.XX.XX.XX",
"port": 8443,
"apiPrefix": "/nssf/v1"
}
]
},
"nfServices": [
{
"serviceInstanceId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"serviceName": "nnssf-nssselection",
"versions": [
{"apiVersionInUri": "v1", "apiFullVersion": "1.0.0"}
],
"scheme": "https",
"nfServiceStatus": "REGISTERED",
"ipEndPoints": [
{"ipv4Address": "10.XX.XX.XX", "port": 8443}
]
},
{
"serviceInstanceId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"serviceName": "nnssf-nsavailability",
"versions": [
{"apiVersionInUri": "v1", "apiFullVersion": "1.0.0"}
],
"scheme": "https",
"nfServiceStatus": "REGISTERED",
"ipEndPoints": [
{"ipv4Address": "10.XX.XX.XX", "port": 8443}
]
}
],
"plmnList": [{"mcc": "460", "mnc": "XX"}],
"nsiList": [
{"snssai": {"sst": 1, "sd": "010203"}},
{"snssai": {"sst": 2, "sd": "040506"}}
],
"allowedNssai": [
{
"tai": {"plmnId": {"mcc": "460", "mnc": "XX"}, "tac": "0001"},
"allowedSnssai": [
{"snssai": {"sst": 1, "sd": "010203"}},
{"snssai": {"sst": 2, "sd": "040506"}}
]
}
]
}
结果c:服务接口消息可查看到期望网络功能及参数信息
NSSF与NRF之间的服务接口消息可以查看到对应的期望网络功能及参数信息,包括:
| 检查项 |
预期结果 |
| NF Instance ID |
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX |
| NF Type |
NSSF |
| 更新字段 |
nsiList新增S-NSSAI {sst:2, sd:040506} |
| 服务状态 |
REGISTERED |
| SBI地址 |
https://10.XX.XX.XX:8443 |
NRF响应消息:
HTTP/1.1 200 OK
Content-Type: application/json
响应Body:
{
"nfInstanceId": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"nfType": "NSSF",
"nfStatus": "REGISTERED",
"heartBeatTimer": 30,
"validityTime": "2026-04-18T15:00:00Z"
}
Frame 2:NRF -> NSSF,Nnrf_NFManagement_NFUpdate 200 OK响应,确认更新完成
结果d:NRF上的NSSF注册信息已更新
通过操作维护命令或界面查询NRF上的NSSF注册信息,确认信息已更新为最新内容。
更新后的NSSF查询结果:
NF Instance ID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
NF Type: NSSF
NF Status: REGISTERED
SBI Address: https://10.XX.XX.XX:8443
Supported Slices:
- S-NSSAI: SST=1, SD=010203
- S-NSSAI: SST=2, SD=040506 <-- 新增
Heartbeat Timer: 30s
Last Updated: 2026-04-17T15:30:00Z
七、信令深度解析
7.1 Nnrf_NFManagement_NFUpdate接口概述
根据3GPP TS 29.510规范,Nnrf_NFManagement_NFUpdate服务操作用于已注册的NF更新自身的Profile信息。该操作支持两种HTTP方法:
1) HTTP PATCH(部分更新)
PATCH /nnrf-nfm/v1/nf-instances/{nfInstanceId}
Content-Type: application/json-patch+json
2) HTTP PUT(完整更新)
PUT /nnrf-nfm/v1/nf-instances/{nfInstanceId}
Content-Type: application/json
7.2 JSON Patch操作类型
在PATCH方式下,支持以下JSON Patch操作:
| 操作 |
说明 |
示例场景 |
| add |
添加新字段/数组元素 |
新增支持的切片 |
| remove |
删除字段/数组元素 |
移除不再支持的切片 |
| replace |
替换字段值 |
修改SBI地址 |
| move |
移动字段位置 |
调整服务顺序 |
| copy |
复制字段 |
保留旧值备份 |
| test |
条件测试 |
更新前验证当前值 |
7.3 NSSF服务更新的触发场景
NSSF服务更新通常在以下场景触发:
1) 切片配置变更
-
新增网络切片实例
-
删除已有网络切片实例
-
修改切片参数(如S-NSSAI、TAI范围等)
2) 网络拓扑变更
-
NSSF实例扩容(新增Pod)
-
NSSF实例缩容(减少Pod)
-
SBI地址变更
3) 服务版本升级
4) 心跳维持
7.4 更新流程的时序分析
时间轴 消息方向 消息名称
---------------------------------------------------------
T0 管理员/系统 修改NSSF服务配置
T1 NSSF 检测配置变更,构造更新消息
T2 NSSF --> NRF PATCH /nnrf-nfm/v1/nf-instances/{id}
[JSON Patch Body]
T3 NRF 验证NF Profile更新内容
T4 NRF 更新本地数据库中的NF Profile
T5 NRF --> NSSF 200 OK
[Updated NF Profile]
T6 NRF 更新服务索引(如有变化)
T7 NSSF 继续心跳维持
7.5 NRF的更新处理逻辑
NRF收到NSSF的更新请求后,执行以下处理:
-
身份验证:验证请求方的NF Instance ID与注册信息一致
-
格式验证:检查JSON Patch/PUT Body的格式是否合法
-
业务验证:验证更新内容是否符合业务规则
-
执行更新:将更新内容应用到本地NF Profile存储
-
更新索引:如果服务列表发生变化,更新服务名到NF实例的索引
-
返回结果:通过200 OK响应确认更新完成
7.6 HTTP状态码说明
| 状态码 |
含义 |
场景 |
| 200 OK |
更新成功 |
NF Profile成功更新 |
| 204 No Content |
更新成功(无返回体) |
PATCH更新成功 |
| 400 Bad Request |
请求格式错误 |
JSON Patch格式不合法 |
| 403 Forbidden |
权限不足 |
非NF所有者发起更新 |
| 404 Not Found |
NF实例不存在 |
NF Instance ID未注册 |
| 500 Internal Server Error |
服务器内部错误 |
NRF处理异常 |
7.7 与NFRegister的区别
| 对比项 |
NFRegister |
NFUpdate |
| HTTP方法 |
PUT |
PATCH或PUT |
| 触发时机 |
NF首次部署 |
NF配置变更或心跳 |
| 返回状态码 |
201 Created |
200 OK |
| URI |
相同 |
相同 |
| Body内容 |
完整NF Profile |
JSON Patch或完整NF Profile |
| 前置条件 |
无需注册 |
必须已注册 |
八、常见问题与排查
8.1 更新请求返回404 Not Found
现象:NSSF发送NFUpdate请求后,NRF返回404。
可能原因:
排查步骤:
-
检查NSSF的NF Instance ID是否正确
-
查询NRF确认NSSF是否仍处于注册状态
-
如果注册已过期,需重新发起NFRegister
8.2 更新后信息未生效
现象:NSSF发送更新请求返回200 OK,但查询NRF发现信息未更新。
可能原因:
-
JSON Patch的path路径不正确
-
NRF的数据库同步延迟
-
NRF缓存未刷新
排查步骤:
-
检查JSON Patch的path字段是否指向正确的属性
-
等待一段时间后重新查询
-
查看NRF日志确认更新操作是否执行
九、测试结论
本测试用例验证了NSSF向NRF发起服务更新的完整流程。测试结果表明:
-
NSSF在NRF已完成服务注册,注册状态正常;
-
NSSF修改服务配置后,主动向NRF发送Nnrf_NFManagement_NFUpdate请求,请求消息中包含更新的服务描述(如新增切片信息);
-
NRF成功接收并处理更新请求,更新本地存储的NF Profile;
-
通过操作维护命令或界面查询NRF上的NSSF注册信息,确认信息已更新为最新内容;
-
NSSF与NRF之间的服务接口消息可以查看到对应的期望网络功能及参数信息。
该测试用例验证了3GPP TS 29.510中定义的NF服务更新机制在NSSF上的正确实现,是保证网络切片信息动态同步的关键环节。
数据脱敏声明:本文中所有SUPI、IP地址、NF Instance ID等敏感信息均已做脱敏处理(如SUPI显示为"imsi-460XX00000XXXX",IP显示为"10.XX.XX.XX",Instance ID显示为"XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"),不影响技术原理的理解与分析。
关于作者:爱卫生,从事通信教学18年,出版过《5G核心网原理与实践》等4本专业书籍。学5G核心网、IMS,来51学通信就对了!知识星球:200+小时视频、3000+精华文章、1年答疑群。公众号/知识星球:51学通信,微信:gprshome201101