订阅者查找功能 (SLF)
订阅者查找功能 (SLF) 通过观察通过 DRA 的 Diameter 信令流量动态学习哪个网络元素为每个订阅者提供服务。它使用这些学习到的绑定直接将后续请求(例如位置服务查询)路由到正确的服务节点,而无需静态路由规则。
这对于 SLg/SLh 位置服务请求特别有用,在这种情况下,GMLC 需要到达给定订阅者的服务 MME,但对哪个 MME 没有先前的了解。
SLF 概念在 3GPP TS 29.172 和 3GPP TS 29.173 中描述了位置服务,而订阅者注册在 3GPP TS 29.272 中定义。
工作原理
该模块分为两个阶段:学习和路由。
在学习阶段,模块被动观察通过 DRA 流动的注册和注销消息。当订阅者注册时(例如通过 S6a Update-Location-Request),模块记录哪个网络元素现在为该订阅者提供服务。
在路由阶段,���请求到达需要到达订阅者服务节点时(例如 SLg Provide-Location-Request),模块查找绑定并直接路由到正确的对等节点。
如果不存在订阅者的绑定,请求将通过现有的路由逻辑(包括高级路由)进行处理。
绑定生命周期
学习:创建绑定的消息
模块通过以下 Diameter 消息学习订阅者与服务节点的绑定:
| 接口 | 消息 | 命令码 | 创建的绑定 | IMSI 来源 |
|---|---|---|---|---|
| S6a | Update-Location-Request (ULR) | 316 | serving_mme | User-Name AVP (1) |
| Gx | Credit-Control-Request Initial (CCR-I) | 272 (CC-Request-Type=1) | serving_pgw | Subscription-Id AVP (443) |
| Cx | Server-Assignment-Request (SAR) | 301 (Server-Assignment-Type=1) | serving_cscf | Public-Identity AVP (601) |
学习:移除绑定的消息
| 接口 | 消息 | 命令码 | 移除的绑定 |
|---|---|---|---|
| S6a | Cancel-Location-Request (CLR) | 317 | serving_mme |
| S6a | Purge-UE-Request (PUR) | 321 | serving_mme |
| Gx | Credit-Control-Request Termination (CCR-T) | 272 (CC-Request-Type=3) | serving_pgw |
| Cx | Server-Assignment-Request (SAR) | 301 (Server-Assignment-Type=4) | serving_cscf |
当最后一个绑定被移除时,整个订阅者记录将从表中删除。
路由:使用绑定的消息
| 接口 | 消息 | 命令码 | 使用的绑定 |
|---|---|---|---|
| SLg | Provide-Location-Request (PLR) | 8388620 | serving_mme |
| SLh | LCS-Routing-Info-Request (RIR) | 8388622 | serving_mme |
通过学习到的绑定路由的请求使用 diameter.request_timeout 设置中的基本中继超时进行中继(请���见 Peer Connectivity 或 Configuration)。该模块不为这些路由请求定义自己的超时。
示例流程:位置服务请求
管道位置
订阅者查找在请求处理管道中在高级路由之前运行。如果 SLF 找到绑定并覆盖路由,高级路由仍然会运行,但 SLF 路由优先。
配置
该模块在 config/runtime.exs 的 module_subscriber_lookup 下进行配置。
module_subscriber_lookup: %{
# 启用或禁用模块
enabled: false,
# 绑定在过期之前保持多长时间(秒)
binding_ttl_seconds: 86400
}
参数
| 参数 | 类型 | 必需 | 默认 | 描述 |
|---|---|---|---|---|
enabled | 布尔值 | 是 | false | 启用或禁用订阅者查找模块。当 false 时,所有请求未修改地通过,并且不会学习任何绑定。 |
children | 列表 | 否 | [] | 启用时在 DRA 主管下启动的进程。设置为 [DRA.Router.Modules.SubscriberLookup] 以便绑定表进程运行。 |
binding_ttl_seconds | 整数 | 否 | 86400 | 订阅者绑定过期并在清理期间被移除的时间(秒)。默认是 24 小时。清理在 TTL 间隔的一半运行,最小为 60 秒。 |
配置示例
标准部署
适用于大多数在 24 小时内重新注册的网络。
module_subscriber_lookup: %{
enabled: true,
binding_ttl_seconds: 86400
}
工作原理: 该模块从通过的流量中学习 MME/PGW/CSCF 绑定,并保持 24 小时。SLg 和 SLh 请求会自动路由到正确的服务 MME。每当观察到相同订阅者的新注册消息时,绑定会被刷新。
用例: 具有位置服务 (LCS) 要求的网络,其中 GMLC 需要在没有静态订阅者到 MME 映射的情况下到达���务 MME。
高流动环境
适用于频繁移动的订阅者的网络,过时的绑定应快速过期。
module_subscriber_lookup: %{
enabled: true,
binding_ttl_seconds: 3600
}
工作原理: 绑定在 1 小时后过期。当订阅者频繁在 MMEs 之间移动且过时的绑定会导致错误的位置信息请求时,这种方法是合适的。清理间隔每 30 分钟运行。
用例: 密集城市网络或高订阅者流动性的事件。
指标
绑定更新
指标: diameter.subscriber_lookup.binding.update
类型: 计数器
描述: 每次创建或更新订阅者绑定时递增。
标签:
imsi- 订阅者的 IMSIbinding_type- 绑定类型:serving_mme,serving_pgw, 或serving_cscfserving_host- 服务网络元素的 Origin-Host
绑定删除
指标: diameter.subscriber_lookup.binding.delete
类型: 计数器
描述: 每次通过注销消息显式移除订阅者绑定时递增。
标签:
imsi- 订阅者的 IMSIbinding_type- 移除的绑定类型
路由请求
指标: diameter.subscriber_lookup.route.count
类型: 计数器
描述: 每次成功使用学习到的绑定路由 SLg/SLh 请��时递增。
标签:
imsi- 订阅者的 IMSIbinding_type- 用于路由的绑定类型(当前始终为serving_mme)serving_host- 请求路由到的对等方的 Origin-Host
故障排除
位置请求未路由到服务 MME
症状: SLg Provide-Location-Requests 或 SLh LCS-Routing-Info-Requests 未路由到预期的 MME,而是通过默认路由处理。
可能原因:
- 订阅者尚未通过此 DRA 注册,因此不存在绑定
- 绑定已过期(TTL 超过)
- 服务 MME 对等方未连接到此 DRA
enabled设置为false
解决方案:
- 验证配置中模块是否已启用
- 检查订阅者的 S6a ULR 流量是否通过此 DRA(绑定仅从观察到的流量中学习)
- 验证
binding_ttl_seconds是否足够长,以覆盖注册和位置请求之间的间隔 - 确认服务 MME 作为对等方已连接
绑定未被学习
症状: 尽管 S6a/Gx/Cx 流量通过 DRA,绑定表仍然为空。
可能原因:
- 模块未启用
- 模块进程未运行(检查主管)
- 消息未在预期的 AVP 中包含有效的 IMSI
解决方案:
- 验证配置中
enabled: true - 确认在配置更改后 DRA 已重新启动
- 检查 DRA 调试日志中的
SubscriberLookup: Learned条目以确认绑定活动
过时的绑定导致请求错误路由
症状: 位置请求被路由到不再为订阅者提供服务的 MME。
可能原因:
- Cancel-Location-Request (CLR) 或 Purge-UE-Request (PUR) 未通过此 DRA
binding_ttl_seconds对于网络的移动模式设置过高
解决方案:
- 减少
binding_ttl_seconds以匹配预期的订阅者重新注册间隔 - 确保所有 S6a 注销流量通过此 DRA
参考
应用程序 ID
| ID | 接口 | 描述 | 参考 |
|---|---|---|---|
| 16777251 | S6a/S6d | MME/SGSN 到 HSS 认证和订阅管理 | 3GPP TS 29.272 |
| 16777238 | Gx | PCEF 到 PCRF 策略和计费控制 | 3GPP TS 29.212 |
| 16777216 | Cx | I-CSCF/S-CSCF 到 HSS IMS 注册 | 3GPP TS 29.229 |
| 16777255 | SLg | GMLC 到 MME 位置服务 | 3GPP TS 29.172 |
| 16777291 | SLh | GMLC 到 HSS/DRA LCS 路由信息 | 3GPP TS 29.173 |
命令码
| 代码 | 名称 | 接口 | 描述 |
|---|---|---|---|
| 272 | Credit-Control-Request/Answer (CCR/CCA) | Gx | 会话级别的策略和计费控制 |
| 301 | Server-Assignment-Request/Answer (SAR/SAA) | Cx | IMS 注册和注销 |
| 316 | Update-Location-Request/Answer (ULR/ULA) | S6a | 在 MME 处更新订阅者位置 |
| 317 | Cancel-Location-Request/Answer (CLR/CLA) | S6a | HSS 发起的位置取消 |
| 321 | Purge-UE-Request/Answer (PUR/PUA) | S6a | MME 发起的 UE 清除 |
| 8388620 | Provide-Location-Request/Answer (PLR/PLA) | SLg | 向服务 MME 发送位置服务请求 |
| 8388622 | LCS-Routing-Info-Request/Answer (RIR/RIA) | SLh | LCS 路由信息查找 |
绑定类型
| 绑定类型 | 来源 | 使用 | 描述 |
|---|---|---|---|
serving_mme | S6a ULR | SLg PLR, SLh RIR | 当前为订阅者提供服务的 MME |
serving_pgw | Gx CCR-I | — | 处理订阅者会话的 PGW(保留用于未来路由) |
serving_cscf | Cx SAR (Registration) | — | 为订阅者的 IMS 注册提供服务的 S-CSCF(保留用于未来路由) |