2

我正在研究 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 中对此一无所知。

谢谢

4

4 回答 4

1

您可以保持第一个连接或开始一个新连接,如您在rfc6733中所见

CER 消息总是在连接请求成功完成后立即在发起连接上发送。在选举的情况下,两个连接之一将关闭。

于 2012-11-27T16:59:05.933 回答
0

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

于 2014-04-26T06:11:01.167 回答
0

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

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

于 2014-05-22T06:33:36.203 回答
0

实际上 RFC 对此非常具体:

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

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

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

于 2015-07-09T18:23:43.900 回答