【问题标题】:Diameter protocol. What's the expected behaviour if several CERs are received?直径协议。如果收到多个 CER,预期的行为是什么?
【发布时间】:2012-11-21 09:57:42
【问题描述】:

我正在研究 Diameter 协议的 python 实现。 我想知道如果在这种情况下 Diameter 对等方的预期行为是什么:

  1. Peer1 向 Peer2 发送 CER
  2. Peer2 向 Peer1 发送 CEA(结果代码 DIAMETER_SUCCESS: 2001)
  3. 直径连接已准备就绪。
  4. 一些直径流量
  5. Peer1 向 Peer2 重新发送另一个 CER
  6. Peer2 的预期行为是什么?

peer2 是否关闭了连接?还是 Peer2 必须重新发送 CEA?

我知道这种情况不应该发生,但是……如果 peer2 有一个错误的实现。

我在 rfc6733 中对此一无所知。

谢谢

【问题讨论】:

  • 我有同样的问题,我正在使用爱立信收费 sdk 1.0 但我认为这不是由于有问题的 peer2,如果再次发送 CER 是 peer1 的问题
  • 是的,我想写 peer1 而不是 peer2。谢谢指正。

标签: diameter-protocol


【解决方案1】:

您可以保持第一个连接或开始一个新连接,如您在 rfc6733 中看到的那样

始终在发起连接时立即发送 CER 消息 连接请求成功完成后。在这种情况下 选举时,两个连接之一将关闭。

【讨论】:

    【解决方案2】:

    对于 Diameter Peers 之间的任何给定实时连接,CER 和 CEA 应该只发生一次。期望它或必须在任何现有会话 [dmtr] 的上下文中处理它似乎都不正确。理想情况下,应该在这种情况发生之前断开传输连接。此外,使用 SCTP / TLS 将确保整个 3 次握手将在您到达该点之前发生。也许您需要仔细处理传输层的状态转换以更好地定义处理。

    【讨论】:

      【解决方案3】:

      对等方 2 应丢弃第二个 CER。

      只有在传输关闭或直径关闭 (DPR/DPA) 发生后,它才应该接受第二个 CER

      【讨论】:

        【解决方案4】:

        实际上 RFC 对此非常具体:

        CER 消息总是在发起连接时立即发送 连接请求成功完成后。在这种情况下 选举时,两个连接之一将关闭。这 如果本地的 Origin-Host 响应者连接将继续存在 直径实体高于对等体;发起人 如果对等方的 Origin-Host 更高,则连接将继续存在。全部 随后的消息在幸存的连接上发送。注意 一个对等点的选举结果保证为 与另一方的结果相反。

        所以,总结一下:只有一个连接应该存在(最新的),除非您在请求中使用不同的 Origin-Host。

        如果您使用 TCP 并且 peer1 在没有通知 peer2 的情况下重新启动,这种情况并不少见。所以 peer2 必须允许 peer1 重新连接并使用最新的(最新的)连接。否则,您将阻止发往/来自 peer1 的消息,直到看门狗将其销毁。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-04-28
          • 1970-01-01
          • 2021-08-13
          • 2020-08-22
          • 2016-02-15
          • 2017-01-04
          • 2017-05-01
          相关资源
          最近更新 更多