5GC实践篇之BSF篇第4篇:BSF支持服务发现
作者:爱卫生
1 测试背景与用例简介
在5GC的服务化架构(SBA)中,"注册"让BSF在NRF中"存在",而"发现"则让BSF被其他网元"找到"。本篇聚焦5GC SBA中另一个核心机制——BSF服务发现(NF Discovery)。
如果说注册是BSF在NRF这个"黄页"中登记自己的联系方式,那么服务发现就是PCF、AF等网元翻阅这本"黄页"查找BSF的过程。没有服务发现,注册就毫无意义——因为没有任何网元能找到已注册的BSF。
《5G核心网原理与实践》实践篇 · BSF 网元功能
作者:爱卫生
在5GC的服务化架构(SBA)中,"注册"让BSF在NRF中"存在",而"发现"则让BSF被其他网元"找到"。本篇聚焦5GC SBA中另一个核心机制——BSF服务发现(NF Discovery)。
如果说注册是BSF在NRF这个"黄页"中登记自己的联系方式,那么服务发现就是PCF、AF等网元翻阅这本"黄页"查找BSF的过程。没有服务发现,注册就毫无意义——因为没有任何网元能找到已注册的BSF。
BSF服务发现是指其他NF(如PCF、AF)通过NRF的Nnrf_NFDiscovery服务,根据特定查询条件(如目标NF类型、服务名称、IP地址等)查找可用的BSF实例。NRF根据查询条件,在已注册的NFProfile中进行匹配,返回符合条件的BSF列表。
在5GC的PCC架构中,主要有以下网元需要发现BSF:
| 发现方 | 发现目的 | 典型场景 |
|---|---|---|
| PCF | 查找管理特定UE IP地址的BSF | PCF收到AF的策略请求后,需通过BSF查询AF会话与PDU会话的绑定信息 |
|---|---|---|
| AF | 查找可用的BSF来创建会话绑定 | AF需要为某个应用流创建策略绑定,需找到管理目标UE的BSF |
| CHF | 计费关联查询 | 部分计费场景需要通过BSF关联AF会话和计费会话 |
target-nf-type |
目标NF类型 | BSF |
requester-nf-type |
请求方NF类型 | PCF / AF |
service-names |
目标服务名称 | nbsf_management |
target-plmn-list |
目标PLMN | 460XX |
ipv4-address |
UE IPv4地址(用于精确匹配BSF) | 10.XX.100.5 |
ipv6-prefix |
UE IPv6前缀(用于精确匹配BSF) | 2a01:9:2::0/64 |
dnn |
数据网络名称 | internet |
| URI | {apiRoot}/nnrf-disc/v1/nf-instances |
|
target-nf-type=BSF |
只查找BSF类型 | NRF可能有数百个已注册NF,此参数大幅缩小搜索范围 |
service-names=nbsf_management |
只查找支持该服务的NF | 确保返回的BSF支持PCF需要的服务操作 |
ipv4-address=10.XX.100.5 |
根据UE IP地址匹配 | NRF根据BSF注册的bsfInfo.ipv4AddressRanges进行精确匹配 |
nfInstanceID |
BSF实例标识 | 用于后续直接调用BSF服务时的路由标识 |
nfStatus |
BSF当前状态 | 确认BSF可用(REGISTERED) |
ipEndPoints |
BSF服务端点 | PCF根据此信息直接向BSF发起HTTP请求 |
bsfInfo |
BSF服务范围 | 确认该BSF确实管理目标IP地址 |
| 缓存有效期 | NRF在发现响应中可携带Cache-Control: max-age=XX头域,指示PCF/AF可以缓存结果的有效时长 |
|
| 缓存失效 | 当缓存的BSF实例不可达(如HTTP连接失败)时,PCF/AF应清除缓存并重新发起发现请求 | |
| 缓存刷新 | 缓存过期后,PCF/AF需要重新向NRF发起发现请求获取最新的BSF信息 | |
| 轮询(Round-Robin) | 按顺序依次选择 | 负载均衡 |
| 随机选择 | 随机选择一个 | 简单负载分担 |
| 优先级选择 | 优先选择高优先级实例 | 主备场景 |
| 拓扑就近选择 | 选择网络距离最近的实例 | 低延迟场景 |
| 负载感知选择 | 优先选择负载较低的实例 | 负载均衡 |
NRF在发现响应中可能携带各BSF实例的负载信息(如loadLevelAvg),PCF/AF可以据此做出更智能的选择。
为了验证BSF服务发现的正确性,可以通过curl命令模拟PCF的发现请求:
# 模拟PCF发起BSF发现请求
$ curl -X GET "http://10.XX.XX.XX:31380/nnrf-disc/v1/nf-instances?target-nf-type=BSF&requester-nf-type=PCF&service-names=nbsf_management" | python -mjson.tool
{
"nfInstances": [
{
"nfInstanceID": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
"nfType": "BSF",
"nfStatus": "REGISTERED",
"nfServices": [
{
"serviceName": "nbsf_management",
"scheme": "http",
"ipEndPoints": [
{
"ipv4Address": "10.XX.XX.XX",
"port": 8080
}
]
}
],
"bsfInfo": {
"ipv4AddressRanges": [
{
"start": "10.XX.0.0",
"end": "10.XX.255.255"
}
],
"ipv6PrefixRanges": [
{
"start": "2a01:172:253::0/64",
"end": "2a01:172:253:ffff::0/64"
}
]
}
}
]
}
验证要点:
nfType为BSF,确认返回的是BSF实例;
nfStatus为REGISTERED,确认BSF在线可用;
serviceName包含nbsf_management,确认支持所需服务;
ipEndPoints包含可达的IP和端口,确认可以建立连接。
| 验证项 | 结果 | 说明 |
|---|---|---|
| PCF通过NRF发现BSF | OK | Nnrf_NFDiscovery交互正确 |
| target-nf-type过滤正确 | OK | NRF只返回BSF类型的NF |
| service-names过滤正确 | OK | 只返回支持nbsf_management的BSF |
| IP地址匹配正确 | OK | NRF根据bsfInfo.ipv4AddressRanges精确匹配 |
| 返回结果可用 | OK | BSF的ipEndPoints可达,PCF可直接调用 |
本测试用例完美通过。PCF通过NRF的Nnrf_NFDiscovery服务成功发现了BSF实例。NRF能够根据查询参数(target-nf-type=BSF、service-names=nbsf_management、ipv4-address等)进行精确匹配,返回管理目标UE IP地址的BSF实例信息。PCF根据发现结果中的ipEndPoints成功建立了与BSF的连接。整个服务发现流程与3GPP TS 29.510和TS 29.551规范完全吻合。
协议参考汇总:
3GPP TS 29.510 第6.2节:NF Discovery Service,定义发现流程和查询参数
3GPP TS 29.551 第6.1.6节:BsfInfo数据结构,定义BSF的地址段信息
3GPP TS 29.551 第5.2节:Nbsf_Management服务操作
关于作者:爱卫生,从事通信教学18年,出版过《5G核心网原理与实践》等4本专业书籍。学5G核心网、IMS,来51学通信就对了!知识星球:200+小时视频、3000+精华文章、1年答疑群。公众号/知识星球:51学通信,微信:gprshome201101