- 同一SMF/BSF内部存在多个IP地址域(ipDomain):在某些部署中,同一SMF/BSF可能同时服务多个IP地址域,不同ipDomain中的用户可能分配到相同的IPv4地址。
无论哪种情况,当AF/DRA仅凭用户IP地址查询BSF时,可能得到多个结果或者查到错误的PCF。ipDomain参数就是3GPP为解决这一问题而引入的——通过IP地址+ipDomain的组合,唯一标识一条绑定记录。
本篇聚焦于IP地址重复场景下的会话绑定信息查询,验证BSF如何通过ipDomain参数区分使用相同IP地址的不同用户,返回正确的PCF绑定信息。
两种IP地址重叠场景
| 场景 |
描述 |
区分方式 |
| 场景1:不同SMF/BSF间重叠 |
SMF/BSF1和SMF/BSF2使用相同IPv4地址段,ipDomain不同 |
AF根据ipDomain选择正确的BSF |
| 场景2:同一SMF/BSF内重叠 |
同一SMF/BSF内部有多个ipDomain,地址段重叠 |
AF查询时携带ipDomain参数 |
详细消息流程图
场景1:不同SMF/BSF的IPv4地址段重复
sequenceDiagram
participant AF as AF
participant BSF1 as SMF/BSF1
participant BSF2 as SMF/BSF2
participant PCF1 as PCF1
participant PCF2 as PCF2
Note over AF, PCF2: 前置: 用户A和用户B使用相同IPv4地址172.24.1.2
Note over AF, PCF2: 用户A绑定BSF1/ipDomain1, 用户B绑定BSF2/ipDomain2
Note over AF, PCF1: 查询用户A的绑定信息
AF->>BSF1: GET /pcfBindings ipv4Addr=172.24.1.2, ipDomain=bsfipdomain1
Note right of AF: Nbsf_Management_Discovery_Req<br/>携带ipDomain区分
BSF1-->>AF: 200 OK (用户A绑定PCF1)
Note left of BSF1: 返回: SUPI A + DNN + PCF1信息
AF->>PCF1: Npcf_PolicyAuthorization_Req
PCF1-->>AF: Npcf_PolicyAuthorization_Rsp
Note over AF, PCF2: 查询用户B的绑定信息
AF->>BSF2: GET /pcfBindings ipv4Addr=172.24.1.2, ipDomain=bsfipdomain2
Note right of AF: Nbsf_Management_Discovery_Req<br/>相同IP不同ipDomain
BSF2-->>AF: 200 OK (用户B绑定PCF2)
Note left of BSF2: 返回: SUPI B + DNN + PCF2信息
AF->>PCF2: Npcf_PolicyAuthorization_Req
PCF2-->>AF: Npcf_PolicyAuthorization_Rsp
场景2:同一SMF/BSF内部IP地址段重复
sequenceDiagram
participant AF as AF
participant BSF3 as SMF/BSF3
participant PCF1 as PCF1
participant PCF2 as PCF2
Note over AF, PCF2: 前置: 用户C和用户D在BSF3内使用相同IPv4地址
Note over AF, PCF2: 用户C绑定ipDomain3, 用户D绑定ipDomain4
Note over AF, PCF1: 查询用户C的绑定信息
AF->>BSF3: GET /pcfBindings ipv4Addr=172.24.1.X, ipDomain=ipdomain3
BSF3-->>AF: 200 OK (用户C绑定PCF1)
AF->>PCF1: AAR (Rx接口策略授权)
PCF1-->>AF: AAA
Note over AF, PCF2: 查询用户D的绑定信息
AF->>BSF3: GET /pcfBindings ipv4Addr=172.24.1.X, ipDomain=ipdomain4
BSF3-->>AF: 200 OK (用户D绑定PCF2)
AF->>PCF2: AAR (Rx接口策略授权)
PCF2-->>AF: AAA
flowchart TD
A["AF收到策略授权请求"] --> B["提取用户IP地址"]
B --> C["AF已配置IP段与ipDomain的对应关系"]
C --> D["携带ipDomain参数查询BSF"]
D --> E["BSF根据IP+ipDomain匹配绑定"]
E --> F["返回唯一匹配的PCF绑定信息"]
F --> G["AF或DRA将请求路由到正确PCF"]
style E fill:#fff9c4,stroke:#f57f17,stroke-width:3px
style F fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px
2 协议规范与关键技术
2.1 相关协议参考
-
TS 29.551(Nbsf_Management服务):第6.1.6节定义了PcfBinding数据结构中的ipDomain字段。第5.2.2.2节定义了Nbsf_Management_Discovery操作的查询参数,包括ipDomain作为可选查询条件。
-
TS 23.501(5G系统架构):第5.8.2.6节描述了BSF在IP地址重叠场景下如何通过ipDomain区分不同的绑定记录。
-
TS 29.513(PCF策略控制):描述了Rx接口会话绑定的交互流程。
2.2 ipDomain参数的作用
ipDomain(IP地址域标识)是3GPP为解决IP地址重叠问题而引入的参数。其核心设计思想是:
-
地址域划分:每个SMF/BSF的IP地址池可以划分为一个或多个ipDomain,每个ipDomain有唯一的标识符;
-
绑定记录唯一性:绑定记录由(IP地址 + ipDomain)组合唯一标识,而非仅靠IP地址;
-
AF配置:AF/DRA需要预先配置用户IP地址段与ipDomain、BSF地址的对应关系,在查询时携带正确的ipDomain。
2.3 ipDomain在不同部署模式下的使用
| 部署模式 |
ipDomain使用 |
说明 |
| 单SMF/单IP段 |
不需要ipDomain |
IP地址唯一,无需区分 |
| 多SMF/地址段重叠 |
AF根据ipDomain选BSF |
不同SMF使用不同ipDomain |
| 单SMF/多IP域 |
查询时携带ipDomain |
同一SMF内不同地址域 |
| 独立BSF/多SMF |
ipDomain作为查询参数 |
BSF根据ipDomain路由 |
3 消息流程与详细解读
3.1 测试前置条件
场景1前置条件(不同SMF/BSF间重叠):
-
网络中BSF、DRA、PCF1、PCF2网元系统及操作维护台运行正常;
-
SMF/BSF1和SMF/BSF2的IPv4地址段重叠,ipDomain不同(bsfipdomain1和bsfipdomain2);
-
用户A附着成功,SMF/BSF1已创建用户A的DNN1 PDU会话绑定(IPv4地址172.24.1.2 + ipDomain1 + PCF1);
-
用户B附着成功,SMF/BSF2已创建用户B的DNN1 PDU会话绑定(IPv4地址172.24.1.2 + ipDomain2 + PCF2);
-
AF已配置用户IP地址段、ipDomain和BSF ID或地址的对应关系。
场景2前置条件(同一SMF/BSF内重叠):
-
SMF/BSF3内IPv4地址段重叠,包含多个ipDomain(ipDomain3和ipDomain4);
-
用户C附着成功,SMF/BSF3已创建绑定(IPv4地址172.24.1.X + ipDomain3 + PCF1);
-
用户D附着成功,SMF/BSF3已创建绑定(IPv4地址172.24.1.X + ipDomain4 + PCF2)。
3.2 测试步骤
-
在SMF/BSF上进行消息跟踪/抓包操作;
-
用户A发起数据业务应用,触发策略授权请求操作;
-
用户B发起数据业务应用,触发策略授权请求操作;
-
用户C发起数据业务应用,触发策略授权请求操作;
-
用户D发起数据业务应用,触发策略授权请求操作。
3.3 ipDomain查询路由流程
flowchart TD
A["AF收到应用层策略请求"] --> B["提取用户IP地址"]
B --> C{"AF查找IP段与ipDomain映射"}
C --> D["映射到ipDomain1和BSF1"]
C --> E["映射到ipDomain2和BSF2"]
D --> F["查询BSF1: IP + ipDomain1"]
E --> G["查询BSF2: IP + ipDomain2"]
F --> H["BSF1返回用户A的PCF1绑定"]
G --> I["BSF2返回用户B的PCF2绑定"]
H --> J["AF向PCF1发起策略授权"]
I --> K["AF向PCF2发起策略授权"]
style F fill:#fff9c4,stroke:#f57f17,stroke-width:2px
style G fill:#fff9c4,stroke:#f57f17,stroke-width:2px
style H fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px
style I fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px
4 关键信令参数分析
4.1 场景1:查询BSF1的用户A绑定信息(ipDomain=bsfipdomain1)
AF使用用户A的IP地址(172.24.1.2)和ipDomain(bsfipdomain1)查询BSF1:
curl -v --http2 --http2-prior-knowledge -X GET \
"http://10.10.32.250:30086/nbsf-management/v1/pcfBindings\
?ipDomain=bsfipdomain1&ipv4Addr=172.24.1.2"
> GET /nbsf-management/v1/pcfBindings?ipDomain=bsfipdomain1&ipv4Addr=172.24.1.2
> Host: 10.10.32.250:30086
> User-Agent: curl/7.49.0
> Accept: */*
< HTTP/2.0 200
< content-type: application/json
< content-length: 278
{
"ipv6Prefix": "2a01:172:2401:0:657a:4ecc:b212:498a",
"dnn": "Internet2",
"pcfDiamHost": "rxDiam-Host.com",
"supi": "4608800000XXXXXA",
"pcfIpEndPoints": [{"ipv4Address": "10.10.32.34", "port": 9091}],
"snssai": {"sst": 2, "sd": "000001"},
"gpsi": "86138000XXXXXA",
"pcfDiamRealm": "rxDiam-Realm.com"
}
参数分析:
| 参数 |
值 |
说明 |
| 查询参数 ipv4Addr |
172.24.1.2 |
用户A的IPv4地址 |
| 查询参数 ipDomain |
bsfipdomain1 |
用户A所属的IP地址域 |
| 响应 dnn |
Internet2 |
用户A的DNN |
| 响应 pcfIpEndPoints |
10.10.32.34:9091 |
PCF1的SBI地址 |
| 响应 supi |
4608800000XXXXXA |
用户A的SUPI |
4.2 场景1:查询BSF2的用户B绑定信息(ipDomain=bsfipdomain2)
AF使用用户B的IP地址(172.24.1.2)和ipDomain(bsfipdomain2)查询BSF2:
curl -v --http2 --http2-prior-knowledge -X GET \
"http://10.10.32.250:30086/nbsf-management/v1/pcfBindings\
?ipDomain=bsfipdomain2&ipv4Addr=172.24.1.2"
> GET /nbsf-management/v1/pcfBindings?ipDomain=bsfipdomain2&ipv4Addr=172.24.1.2
> Host: 10.10.32.250:30086
< HTTP/2.0 200
< content-type: application/json
< content-length: 246
{
"dnn": "apn2",
"ipv4Addr": "172.24.1.2",
"pcfDiamHost": "rxDiam-Host.com",
"supi": "4608800000XXXXXB",
"pcfIpEndPoints": [{"ipv4Address": "10.10.32.32", "port": 9091}],
"snssai": {"sst": 2, "sd": "000001"},
"gpsi": "86138000XXXXXB",
"pcfDiamRealm": "rxDiam-Realm.com"
}
关键发现: 两次查询使用了相同的IPv4地址(172.24.1.2),但因为ipDomain不同(bsfipdomain1 vs bsfipdomain2),BSF返回了不同的绑定信息:
4.3 用户A的SMF会话信息
[local]SMF02#epg smf user-info identifier-type imsi value 4608800000XXXXXA
mobile-user-information:
subscriber-information:
imsi: 4608800000XXXXXA
msisdn: 86138000XXXXXA
imei: 49172000XXXXXA0
active-pdu-sessions:
active-pdu-session:
pdu-session-id: 5
dnn-in-use: Internet2
ue-address-1:
ipv6: 2a01:172:2401:0:657a:4ecc:b212:498a/64
ue-address-2:
ipv4: 172.24.1.2
single-nssai:
slice-service-type: 2
slice-differentiator: 000001
n3-interface:
ran-fteid:
teid: 1342197282
address: 174.29.0.33
upf-fteid:
teid: 249561089
address: 10.185.255.7
active-pdu-session:
pdu-session-id: 6
dnn-in-use: Internet2
ue-address-1:
ipv6: 2a01:172:2401:1:b017:e2b4:8107:be0c/64
ue-address-2:
ipv4: 172.24.1.3
session-ambr:
uplink-kbps: 50000
downlink-kbps: 150000
4.4 用户B的SMF会话信息
[local]SMF02#epg smf user-info identifier-type imsi value 4608800000XXXXXB
mobile-user-information:
subscriber-information:
imsi: 4608800000XXXXXB
msisdn: 86138000XXXXXB
imei: 49172000XXXXXB0
active-pdu-sessions:
active-pdu-session:
pdu-session-id: 5
dnn-in-use: apn2
ue-address-1:
ipv4: 172.24.1.2
single-nssai:
slice-service-type: 2
slice-differentiator: 000001
n3-interface:
ran-fteid:
teid: 1342197281
address: 174.28.0.34
upf-fteid:
teid: 597688321
address: 10.185.255.2
4.5 两个用户会话对比
| 参数 |
用户A |
用户B |
| IMSI |
4608800000XXXXXA |
4608800000XXXXXB |
IPv4地址: 172.24.1.2 | 172.24.1.2(相同)
| IPv6地址 |
2a01:...:498a |
无 |
| DNN |
Internet2 |
apn2 |
| ipDomain |
bsfipdomain1 |
bsfipdomain2 |
| PCF |
10.10.32.34:9091 |
10.10.32.32:9091 |
| RAN地址 |
174.29.0.33 |
174.28.0.34 |
| UPF地址 |
10.185.255.7 |
10.185.255.2 |
两个用户虽然分配了相同的IPv4地址,但分属不同的ipDomain、不同的DNN、连接不同的PCF和UPF,完全独立的会话。
5 测试验证与数据解读
5.1 验证一:场景1中BSF1正确响应ipDomain1查询
BSF1成功响应AF基于用户A的IP地址(172.24.1.2)和ipDomain(bsfipdomain1)的查询请求,返回用户A的完整绑定信息,包括SUPI、DNN、PCF ID、PCF IP地址和Diameter路由信息。
5.2 验证二:场景1中BSF2正确响应ipDomain2查询
BSF2成功响应AF基于用户B的IP地址(172.24.1.2)和ipDomain(bsfipdomain2)的查询请求,返回用户B的绑定信息。关键点是:相同的IP地址,不同的ipDomain,返回不同的绑定结果。
5.3 验证三:场景2中同一BSF内ipDomain区分
同一SMF/BSF3内部,用户C和用户D使用相同的IPv4地址但属于不同的ipDomain。BSF3能根据ipDomain参数区分两个用户,分别返回各自对应的PCF绑定信息。
5.4 测试结果汇总
| 验证项 |
预期结果 |
实际结果 |
结论 |
| BSF1响应ipDomain1查询 |
返回用户A绑定PCF1 |
200 OK, SUPI A + PCF1 |
通过 |
| BSF2响应ipDomain2查询 |
返回用户B绑定PCF2 |
200 OK, SUPI B + PCF2 |
通过 |
| 相同IP不同ipDomain区分 |
返回不同绑定 |
正确区分 |
通过 |
| 同一BSF内ipDomain区分 |
正确区分用户C/D |
正确返回 |
通过 |
| Diameter路由信息完整 |
含pcfDiamHost |
确认包含 |
通过 |
6 小结与思考
本篇验证了IP地址重叠场景下BSF的会话绑定信息查询能力。测试结果表明:
-
ipDomain是解决地址重叠的关键:在不同SMF/BSF使用相同IP地址段、或同一SMF/BSF内部存在多个IP地址域时,ipDomain参数能够准确区分不同的绑定记录,确保查询结果唯一且正确。
-
AF/DRA的配置至关重要:ipDomain机制的正确运作依赖于AF/DRA预先配置好IP地址段与ipDomain、BSF地址的映射关系。如果配置错误,AF可能查询到错误的BSF或返回错误的绑定信息。
-
两种重叠场景均验证通过:无论是跨SMF/BSF的地址重叠,还是同一SMF/BSF内的地址重叠,BSF都能正确处理。
延伸思考:
-
IPv6场景:IPv6地址空间极大(128位),在大多数部署中不太可能出现地址重叠问题。因此ipDomain主要解决的是IPv4地址重叠场景,在纯IPv6部署中可能不需要使用ipDomain。
-
自动化配置:如何自动化地维护AF/DRA中的IP段-ipDomain-BSF映射关系?在NF动态扩缩容场景下,手动配置显然不可行。未来可能需要通过NRF的服务发现机制自动获取这些映射。
-
大规模重叠:在超大网络中,可能存在数十个SMF/BSF使用相同IP地址段的情况。此时AF需要维护大量的映射关系,查询效率和管理复杂度都需要关注。
协议参考:根据3GPP TS 29.551第5.2.2.2节,Nbsf_Management_Discovery操作支持ipDomain作为查询参数。当BSF中存在多条使用相同IP地址但属于不同ipDomain的绑定记录时,BSF应根据ipDomain参数筛选并返回唯一的匹配记录。如果查询参数不包含ipDomain且匹配到多条记录,BSF应返回400 Bad Request错误。
关于作者:爱卫生,从事通信教学18年,出版过《5G核心网原理与实践》等4本专业书籍。学5G核心网、IMS,来51学通信就对了!知识星球:200+小时视频、3000+精华文章、1年答疑群。公众号/知识星球:51学通信,微信:gprshome201101