跳到主要内容

附录 C. 重复检测

附录 C. 重复检测

如第 9.4 节所述,计费记录的重复检测基于会话标识符。重复可能因多种原因出现:

  • 故障转移至备用服务器。在需要接近实时性能时,故障转移阈值必须保持较低,这可能增加出现重复的可能性。故障转移可能发生在客户端,也可能发生在 Diameter 代理内。

  • 客户端或代理在从非易失性存储发送记录之后、但在收到应用层 ACK 并删除待发送记录之前发生故障。这会导致客户端或代理重启后不久重传该记录。

  • 来自 RADIUS 网关的重复。由于 [RFC2865] 未定义 RADIUS 的重传行为,出现重复的可能性将随实现而异。

  • 实现缺陷与配置错误。

T 标志用于指示应用层重传事件,例如因故障转移至备用服务器所致。它仅为 Diameter 客户端或代理发送的请求消息定义。例如,重启后,客户端可能无法确知在重启前是否已尝试发送其非易失性存储中的计费记录。Diameter 服务器在处理请求并检测重复消息时可以使用 T 标志作为辅助。然而,这样做的服务器必须确保即使首次发送的请求在重传请求之后才到达服务器,也能发现重复。它仅适用于未收到服务器对某请求的应答而再次发送该请求的情形(例如,因故障转移至备用对等体、主对等体恢复,或因客户端在客户端或代理重启后从非易失性存储重新发送已存记录)。

在某些情况下,Diameter 计费服务器可将重复检测与计费记录处理推迟到后处理阶段。此时记录可能按所含 User-Name 排序,在此情形下消除重复较为容易。在其他情形下,可能需要进行实时重复检测,例如在施加信用额度限制或需要实时欺诈检测时。

一般而言,只有因故障转移或重新发送非易失性存储中的记录而产生的重复,才能由 Diameter 客户端或代理可靠地检测。在此类情况下,Diameter 客户端或代理可通过设置 T 标志将消息标记为可能的重复。由于 Diameter 服务器负责重复检测,它可选择是否利用 T 标志以优化重复检测。由于 T 标志不影响互操作性,且某些服务器可能不需要它,对 Diameter 客户端与代理而言生成 T 标志为必需(REQUIRED),而 Diameter 服务器则可以(MAY)实现对该标志的处理。

例如,通常可以假定重复出现在最长已记录的网络分区或设备故障的时间窗口内,或许为一天。因此只需在该时间窗口内向后查找记录。其次,可采用哈希技术或其他方案(例如在已收消息中使用 T 标志),以除极少数情况外避免对该集合进行全文搜索。

以下为服务器可如何利用 T 标志检测重复请求的示例。

Diameter 服务器可以(MAY)检查所收消息的 T 标志,以判断该记录是否可能为重复。若在请求消息中设置了 T 标志,服务器在可配置的重复时间窗口内向前与向后搜索重复。这将把数据库搜索限制在设置了 T 标志的记录上。在运行良好的网络中,网络分区与设备故障据推测为罕见事件,因此该方法可大幅优化重复检测过程。在故障转移期间,由于原始传输与重复传输沿路径经历的网络时延不同,原始记录有可能在带 T 标志的记录之后才到达。随着故障转移间隔缩短,出现这种情况的可能性增大。为了能够检测乱序的重复,Diameter 服务器在对带 T 标志的请求执行重复检查时应同时使用向前与向后的时间窗口。例如,为留出时间使原始记录离开网络并被计费服务器记录,Diameter 服务器可在原始传输连接关闭后,延迟处理设置了 T 标志的记录,直至经过 TIME_WAIT + RECORD_PROCESSING_TIME 这一时段。此后,可将带 T 标志的记录与数据库比对,并相对有把握地认为若原始记录已发送,则其已被接收并记录。