5G核心网学习平台
NSSF 实践篇 #07

5GC实践篇之NSSF篇第2篇:NSSF服务更新

《5G核心网原理与实践》实践篇 · NSSF 网元功能

5GC实践篇之NSSF篇第2篇:NSSF服务更新

作者:爱卫生


一、测试背景与用例简介

在5GC服务化架构中,NF的服务信息并非一成不变。当NSSF的服务配置发生变化时(例如新增或修改支持的切片信息、更新SBI地址、调整服务版本等),NSSF需要主动向NRF发起服务更新请求,以确保NRF中保存的NF Profile始终是最新的。这一机制保证了其他NF在通过NRF发现NSSF时,能够获取到准确的服务信息。

本文将详细讲解NSSF向NRF发起服务更新的完整流程,包括更新的触发条件、更新请求的构造、NRF的处理逻辑以及更新后的信息同步。通过本文的学习,读者将深入理解5GC中NF服务动态更新机制的实现细节。

相关3GPP规范

  • TS 29.510:NF Service Framework(NF服务框架),定义了Nnrf_NFManagement服务接口

  • TS 23.501:5G系统架构,定义了NSSF的功能与接口

  • TS 29.531:NSSF服务接口规范

关键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实例信息的更新。具体验证点包括:

  1. NSSF在NRF已完成服务注册;

  2. NSSF修改服务配置后,自动向NRF发送NFUpdate请求消息,消息中包含更新的服务描述;

  3. NRF接收并处理NSSF的更新请求,更新本地存储的NF Profile;

  4. 通过操作维护命令或界面查询NRF上的NSSF注册信息,确认信息已更新;

  5. 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

  • 使用JSON Patch格式(RFC 6902),仅更新变化的字段

  • 适用于小幅配置变更,减少传输数据量

2) HTTP PUT(完整更新)


PUT /nnrf-nfm/v1/nf-instances/{nfInstanceId}

Content-Type: application/json

  • 发送完整的NF Profile,NRF全量替换原有信息

  • 适用于大规模配置变更

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) 服务版本升级

  • API版本升级(如v1升级到v2)

  • 服务能力扩展

4) 心跳维持

  • 定期发送PATCH请求更新nfStatus为"REGISTERED"

  • 更新心跳时间戳

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的更新请求后,执行以下处理:

  1. 身份验证:验证请求方的NF Instance ID与注册信息一致

  2. 格式验证:检查JSON Patch/PUT Body的格式是否合法

  3. 业务验证:验证更新内容是否符合业务规则

  4. 执行更新:将更新内容应用到本地NF Profile存储

  5. 更新索引:如果服务列表发生变化,更新服务名到NF实例的索引

  6. 返回结果:通过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的注册已过期(心跳超时导致NRF删除了NF记录)

  • NF Instance ID不正确

  • NRF数据库异常导致记录丢失

排查步骤

  1. 检查NSSF的NF Instance ID是否正确

  2. 查询NRF确认NSSF是否仍处于注册状态

  3. 如果注册已过期,需重新发起NFRegister

8.2 更新后信息未生效

现象:NSSF发送更新请求返回200 OK,但查询NRF发现信息未更新。

可能原因

  • JSON Patch的path路径不正确

  • NRF的数据库同步延迟

  • NRF缓存未刷新

排查步骤

  1. 检查JSON Patch的path字段是否指向正确的属性

  2. 等待一段时间后重新查询

  3. 查看NRF日志确认更新操作是否执行


九、测试结论

本测试用例验证了NSSF向NRF发起服务更新的完整流程。测试结果表明:

  1. NSSF在NRF已完成服务注册,注册状态正常;

  2. NSSF修改服务配置后,主动向NRF发送Nnrf_NFManagement_NFUpdate请求,请求消息中包含更新的服务描述(如新增切片信息);

  3. NRF成功接收并处理更新请求,更新本地存储的NF Profile;

  4. 通过操作维护命令或界面查询NRF上的NSSF注册信息,确认信息已更新为最新内容;

  5. 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

← 返回 NSSF 实践篇