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

5GC实践篇之BSF篇第1篇:BSF服务注册

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

5GC实践篇之BSF篇第1篇:BSF服务注册

作者:爱卫生


1 测试背景与用例简介

在5G核心网的PCC(Policy and Charging Control,策略与计费控制)架构中,BSF(Binding Support Function,绑定支持功能) 扮演着一个关键的"桥梁"角色。它的核心职责是在AF(Application Function,应用功能)会话和PCF(Policy Control Function,策略控制功能)会话之间建立绑定关系——简单来说,当AF向网络请求某个数据流的策略控制时,PCF需要知道这个数据流属于哪个用户、对应哪个PDU会话,而BSF就是提供这个"绑定信息"的网元。

BSF在5GC中并非独立存在的孤岛,它必须遵循5GC的服务化架构(SBA)原则,向NRF(Network Repository Function,网络存储库功能) 注册自己的存在和服务能力,才能被其他网元(如PCF、AF)发现和调用。

本篇要验证的,正是BSF启动后如何向NRF完成服务注册的全过程。这一过程涉及5GC SBA中最基础也最重要的SBI接口之一:Nnrf_NFManagement_NFRegister

为什么BSF服务注册如此重要?

在5GC服务化架构下,任何NF(Network Function)想要对外提供服务,都必须经历以下三步:

  1. 注册(Register):向NRF注册自己的NF Profile,包括NF类型、实例ID、支持的服务列表、IP地址/端口等;

  2. 被发现(Discover):其他NF通过NRF查询发现该NF;

  3. 被调用(Invoke):其他NF根据发现结果直接调用该NF的服务。

如果BSF没有成功向NRF注册,那么PCF和AF就永远无法找到BSF,整个PCC架构中的会话绑定机制将无法工作,基于应用层的策略控制(如针对特定应用的QoS保障)将完全失效。

BSF提供的核心服务

BSF在NRF中注册的服务名称为 nbsf_management(即Nbsf_Management服务),该服务主要提供以下能力:

  • PCF绑定信息查询:PCF通过BSF查询某个UE会话对应的AF会话绑定信息;

  • AF会话绑定注册/更新/删除:AF在BSF中创建、更新或删除会话绑定信息。

BSF还在注册时上报自己服务的IP地址段信息(bsfInfo),包括IPv4地址范围和IPv6前缀范围,用于NRF在服务发现时进行精确匹配。

详细消息流程图


sequenceDiagram

    participant BSF

    participant NRF

    Note over BSF, NRF: BSF服务启动,向NRF发起注册

    BSF->>NRF: PUT /nnrf-nfm/v1/nf-instances/{nfInstanceID}

    Note right of BSF: 请求体携带NFProfile:

    Note right of BSF: nfInstanceID

    Note right of BSF: nfType: BSF

    Note right of BSF: nfStatus: REGISTERED

    Note right of BSF: serviceName: nbsf_management

    Note right of BSF: bsfInfo: ipv4/ipv6地址段

    NRF-->>BSF: 201 Created

    Note left of NRF: 响应体含NFRegistrationData:

    Note left of NRF: NFProfile (已注册实例)

    Note left of NRF: heartBeatTimer

    Note left of NRF: Location头域


flowchart LR

    A["BSF服务启动"] --> B["构造NFProfile"]

    B --> C["PUT /nnrf-nfm/v1/nf-instances/nfInstanceID"]

    C --> D["NRF校验并存储NFProfile"]

    D --> E["NRF返回201 Created + heartBeatTimer"]

    E --> F["BSF注册成功,进入心跳维持阶段"]

    style A fill:#e3f2fd,stroke:#1565c0,stroke-width:2px

    style F fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px


测试目的

验证NRF支持BSF发起的服务注册流程,确保BSF能够成功将其NFProfile(包括NF实例标识、NF类型、支持的服务、IP地址端口、服务的IP地址段等信息)注册到NRF中。

测试前置条件

  1. SA网络中BSF和NRF网元系统及操作维护台运行正常。

  2. BSF已配置NRF的地址,且已配置为用户分配的IP地址段(包括IPv4和IPv6地址段)。

  3. 服务化接口的信令监控、抓包分析工具准备就绪。

测试步骤

  1. 在BSF和NRF之间启动消息跟踪/抓包操作。

  2. 启动BSF服务。

  3. 观察BSF和NRF之间的消息交互。

  4. 在NRF上查看BSF服务注册情况。

测试结果验证(预期)

  1. 检查在NRF中BSF服务注册成功。

  2. 检查BSF服务注册流程成功。对HTTP消息检查如下:

消息1(BSF -> NRF,PUT请求)检查项:

检查项 预期结果
PUT消息的URI: {apiRoot}/nnrf-nfm/v1/nf-instances/{nfInstanceID},其中apiRoot和nfInstanceID与实际配置一致
NFProfile.nfInstanceID 与实际配置保持一致
NFProfile.nfType BSF
NFProfile.nfStatus REGISTERED
NFProfile.serviceInstanceID 与实际配置保持一致
NFProfile.serviceName nbsf_management
NFProfile.version 与实际配置保持一致
NFProfile.schema http
NFProfile.ipEndPoints nbsf_management的服务IP和Port
NFProfile.bsfInfo.ipv4AddressRanges 提供服务的IPv4地址段
NFProfile.bsfInfo.ipv6PrefixRanges 提供服务的IPv6地址段

消息2(NRF -> BSF,响应)检查项:

检查项 预期结果
statusCode 201 Created
头域 包含Location
Body 包含NFRegistrationData,其中NFProfile为注册的网元实例

2 BSF服务注册信令深度解析

在本测试中,BSF与NRF的交互涉及5GC服务化架构中最核心的NF管理流程。BSF通过HTTP PUT方法将自身的完整NFProfile推送给NRF,NRF校验后存储并返回注册成功的响应。

(注:为保护网络安全,以下log中的网元IP、NF Instance ID等敏感信息已做严格脱敏处理)

2.1 BSF向NRF发送注册请求(Nnrf_NFManagement_NFRegister)

BSF启动后,首先构造自身的NFProfile,然后通过HTTP PUT方法向NRF发起注册请求。PUT方法的URI中包含BSF的NF Instance ID,NRF通过此ID唯一标识该BSF实例。


sequenceDiagram

    participant BSF

    participant NRF

    Note over BSF, NRF: Nnrf_NFManagement_NFRegister

    BSF->>NRF: PUT /nnrf-nfm/v1/nf-instances/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

    Note right of BSF: 请求体(NFProfile):

    Note right of BSF: nfInstanceID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

    Note right of BSF: nfType: BSF

    Note right of BSF: nfStatus: REGISTERED

    Note right of BSF: serviceName: nbsf_management

    Note right of BSF: bsfInfo.ipv4AddressRanges: IP段信息

    Note right of BSF: bsfInfo.ipv6PrefixRanges: IPv6前缀信息

    NRF-->>NRF: 校验NFProfile合法性

    NRF-->>NRF: 存储BSF的NFProfile到本地数据库

    NRF-->>BSF: 201 Created

    Note left of NRF: 响应头: Location: /nnrf-nfm/v1/nf-instances/XXX

    Note left of NRF: 响应体: NFRegistrationData

    Note left of NRF:   含NFProfile + heartBeatTimer

信令抓包解析:


# 1. BSF -> NRF(发起服务注册 PUT请求)

PUT /nnrf-nfm/v1/nf-instances/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

Host: 10.XX.XX.XX:31380

Content-Type: application/json

JavaScript Object Notation: application/json

  Object

    # ===== NF基本信息 =====

    Member Key: nfInstanceID

      String value: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

      # BSF的NF实例ID,UUID格式,全局唯一标识

    Member Key: nfType

      String value: "BSF"

      # 网元类型,标识该NF为Binding Support Function

    Member Key: nfStatus

      String value: "REGISTERED"

      # 注册状态:REGISTERED表示已注册

    Member Key: serviceInstanceID

      String value: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

      # 服务实例ID

    # ===== NF服务信息 =====

    Member Key: nfServices

      Array

        Object

          Member Key: serviceName

            String value: "nbsf_management"

            # BSF对外提供的核心服务名称

          Member Key: versions

            Array

              Object

                Member Key: apiVersion

                  String value: "v1"

                  # API版本号

                Member Key: apiPrefix

                  String value: "/nbsf-management"

          Member Key: scheme

            String value: "http"

            # 传输协议:HTTP

          Member Key: ipEndPoints

            Array

              Object

                Member Key: ipv4Address

                  String value: "10.XX.XX.XX"

                  # BSF服务的IP地址

                Member Key: port

                  Number value: 8080

                  # BSF服务监听端口

    # ===== BSF特有信息 =====

    Member Key: bsfInfo

      Object

        Member Key: ipv4AddressRanges

          Array

            Object

              Member Key: start

                String value: "10.XX.0.0"

                # IPv4地址段起始地址

              Member Key: end

                String value: "10.XX.255.255"

                # IPv4地址段结束地址

        Member Key: ipv6PrefixRanges

          Array

            Object

              Member Key: start

                String value: "2a01:172:253::0/64"

                # IPv6前缀段起始

              Member Key: end

                String value: "2a01:172:253:ffff::0/64"

                # IPv6前缀段结束

        Member Key: dnnList

          Array

            String value: "internet"

            # BSF支持的DNN列表

        Member Key: ipDomainList

          Array

            String value: "default"

            # IP域列表

关键NFProfile信元解读:

信元 含义 说明
nfInstanceID NF实例标识 UUID格式,在NRF中唯一标识该BSF实例
nfType NF类型 固定为"BSF",用于服务发现时过滤
nfStatus 注册状态 "REGISTERED"表示在线可用
serviceName 服务名称 "nbsf_management"为BSF的核心服务
ipEndPoints 服务端点 包含BSF的IP地址和端口号
bsfInfo.ipv4AddressRanges IPv4地址段 BSF负责服务的UE IP地址范围,用于绑定匹配
bsfInfo.ipv6PrefixRanges IPv6前缀范围 BSF负责服务的UE IPv6前缀范围
bsfInfo.dnnList DNN列表 BSF支持的数据网络名称列表

协议参考:根据3GPP TS 29.510 第6.1.6.2节,NF注册使用HTTP PUT方法,URI为{apiRoot}/nnrf-nfm/v1/nf-instances/{nfInstanceID}。NFProfile数据结构定义在TS 29.510的表6.1.6.2.3-1中,其中bsfInfo字段专属于BSF类型网元,定义在TS 29.551中。


2.2 NRF返回注册成功响应

NRF收到BSF的PUT请求后,会执行以下操作:

  1. 校验NFProfile:检查nfInstanceIDnfTypenfStatus等必填字段是否完整、合法;

  2. 存储NFProfile:将BSF的NFProfile存入NRF的本地数据库(NRF Repository);

  3. 返回响应:向BSF返回201 Created状态码,携带注册结果数据。

信令抓包解析:


# 2. NRF -> BSF(注册成功响应)

HTTP/1.1 201 Created

Location: http://10.XX.XX.XX:31380/nnrf-nfm/v1/nf-instances/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

Content-Type: application/json

JavaScript Object Notation: application/json

  Object

    Member Key: nfProfile

      Object

        # 返回完整的已注册NFProfile

        Member Key: nfInstanceID

          String value: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

        Member Key: nfType

          String value: "BSF"

        Member Key: nfStatus

          String value: "REGISTERED"

        # ... 其余NFProfile字段与请求一致

    Member Key: heartBeatTimer

      Number value: 120

      # 心跳定时器,单位:秒

      # BSF需每隔120秒向NRF发送心跳,维持注册有效性

响应关键字段解读:

字段 取值 含义
HTTP状态码 201 Created 表示资源创建成功
Location头域 /nnrf-nfm/v1/nf-instances/{nfInstanceID} 指向刚创建的NF实例资源URI
nfProfile 完整NFProfile NRF确认存储的NF配置信息
heartBeatTimer 120秒 心跳周期,BSF需按此时长周期性发送心跳

协议参考:根据3GPP TS 29.510 第6.1.6.2节,NRF收到有效的NF注册请求后,应返回201 Created状态码,并在响应体中包含NFRegistrationDataheartBeatTimer字段指示NRF期望的心跳周期,BSF必须遵守此周期,否则NRF将在超时后将该BSF标记为不可用。


2.3 【深度分析】BSF注册中的bsfInfo字段

bsfInfo是BSF注册时最独特的部分,也是区分BSF与其他NF的关键。它包含了BSF的"服务覆盖范围"信息:

bsfInfo的四个核心子字段:

子字段 数据类型 必选性 含义
ipv4AddressRanges array(Ipv4AddressRange) 可选 BSF服务的IPv4地址段范围
ipv6PrefixRanges array(Ipv6PrefixRange) 可选 BSF服务的IPv6前缀范围
dnnList array(Dnn) 可选 BSF支持的DNN列表
ipDomainList array(string) 可选 BSF支持的IP域列表

为什么BSF需要上报IP地址段?

这是PCC架构中会话绑定的核心机制。当PCF收到来自AF的策略请求时(比如AF请求为某个IP地址的用户视频流提供QoS保障),PCF需要知道应该联系哪个BSF来获取绑定信息。PCF通过NRF发现BSF时,会携带目标UE的IP地址作为查询条件,NRF根据各BSF注册的ipv4AddressRangesipv6PrefixRanges进行匹配,返回管理该IP地址段的BSF实例。


flowchart TD

    A["BSF启动"] --> B["读取本地配置: IP地址段、DNN等"]

    B --> C["构造NFProfile, 包含bsfInfo"]

    C --> D["PUT /nnrf-nfm/v1/nf-instances/nfInstanceID"]

    D --> E["NRF校验NFProfile"]

    E --> F["NRF存储NFProfile到本地仓库"]

    F --> G["NRF返回201 Created + heartBeatTimer"]

    G --> H["BSF注册完成, 启动心跳定时器"]

    style H fill:#c8e6c9,stroke:#2e7d32,stroke-width:3px

bsfInfo的典型配置示例:


bsfInfo:

  ipv4AddressRanges:

    - start: 10.XX.0.0

      end:   10.XX.255.255

    - start: 10.XX.100.0

      end:   10.XX.100.255

  ipv6PrefixRanges:

    - start: 2a01:172:253::0/64

      end:   2a01:172:253:ffff::0/64

  dnnList:

    - internet

    - ims

  ipDomainList:

    - default

协议参考:根据3GPP TS 29.551 第6.1.6节,BsfInfo数据结构定义了BSF的注册信息中特有的字段。这些信息用于NRF在收到PCF或AF的服务发现请求时,根据目标UE的IP地址进行精确的BSF实例匹配。


2.4 【工程细节】注册流程中的注意事项

1) PUT vs POST的选择

5GC NF注册使用HTTP PUT而非POST,这是一个重要的设计选择。PUT是幂等方法(Idempotent),意味着BSF多次发送相同的PUT请求,NRF中的NFProfile状态是一致的。这对BSF的重启场景特别重要——BSF重启后使用相同的nfInstanceID重新注册,NRF会直接覆盖旧记录而非创建重复条目。

2) URI中nfInstanceID的作用

注册URI中直接包含了nfInstanceID(/nnrf-nfm/v1/nf-instances/{nfInstanceID}),这是RESTful设计的体现——PUT请求的目标资源URI就是NF实例本身。NRF根据URI中的nfInstanceID判断是新建注册还是更新已有注册。

3) 心跳定时器的协商

NRF在注册响应中返回heartBeatTimer(本例中为120秒),BSF必须按此时长周期性发送心跳。如果BSF停止发送心跳超过heartBeatTimer指定的时间,NRF将把该BSF的nfStatus从REGISTERED改为SUSPENDED,并通知已订阅该NF状态变更的其他网元。


3 测试结论

验证项 结果 说明
BSF服务注册成功 OK NRF成功存储BSF的NFProfile
PUT消息URI正确 OK 格式为/nnrf-nfm/v1/nf-instances/{nfInstanceID}
NFProfile内容完整 OK 包含nfType=BSF、nbsf_management服务等
bsfInfo地址段正确 OK IPv4和IPv6地址段与实际配置一致
NRF返回201 Created OK 注册成功,含Location头域和heartBeatTimer
心跳时长与配置一致 OK heartBeatTimer为120秒

本测试用例完美通过。BSF通过Nnrf_NFManagement_NFRegister服务成功向NRF注册了自身的NFProfile,包括NF实例标识、NF类型(BSF)、核心服务(nbsf_management)以及BSF特有的IP地址段信息(bsfInfo)。NRF返回201 Created确认注册成功,并指示心跳周期为120秒。整个注册流程与3GPP TS 29.510和TS 29.551规范完全吻合。

协议参考汇总

  • 3GPP TS 29.510:NRF Service-Based Interface,定义NF注册/发现/管理流程

  • 3GPP TS 29.551:BSF Service-Based Interface,定义BSF服务和bsfInfo数据结构



关于作者:爱卫生,从事通信教学18年,出版过《5G核心网原理与实践》等4本专业书籍。学5G核心网、IMS,来51学通信就对了!知识星球:200+小时视频、3000+精华文章、1年答疑群。公众号/知识星球:51学通信,微信:gprshome201101

← 返回 BSF 实践篇