5.3. 能力交换 (Capabilities Exchange)
当两个 Diameter 对等端建立传输连接后, 必须按对等状态机 (见第 5.6 节) 的规定交换能力交换 (Capabilities Exchange) 消息. 该消息用于发现对等端身份及其能力 (协议版本号, 所支持的 Diameter 应用标识, 安全机制等).
接收方只向已宣告支持定义该命令的 Diameter 应用的对等端发出命令. Diameter 节点必须缓存所支持的 Application Id, 以免向对等端不必要地发送无法识别的命令与/或属性值对 (AVP).
若某 Capabilities-Exchange-Request (CER) 的接收方与发送方没有任何共同应用, 必须返回 Capabilities-Exchange-Answer (CEA), 并将 Result-Code AVP 设为 DIAMETER_NO_COMMON_APPLICATION, 且应当断开传输层连接. 注意, 若从自称为中继 (relay, 见第 2.4 节) 的对等端收到 CER 或 CEA, 必须解释为与该对等端存在共同应用.
CER 的接收方必须通过将其自身支持的 Application Id 集合与 CER 中出现的所有 Application-Id 类 AVP (Auth-Application-Id, Acct-Application-Id 与 Vendor-Specific-Application-Id) 求交来确定共同应用. 计算时不得使用 Vendor-Specific-Application-Id 中的 Vendor-Id AVP 的值. CEA 的发送方应当将其支持的全部应用一并给出, 作为对接收方其应用能力的提示.
Diameter 实现应当首先尝试在 CER/CEA 交换之前建立 TLS/TCP 与 DTLS/SCTP 连接, 以保护双方的能力信息. 为兼容不完全符合本文档的旧实现, 仍可通过 Inband-Security AVP 协商传输层安全. 此时, 若 CER 接收方与发送方没有任何共同安全机制, 必须返回 CEA 且将 Result-Code AVP 设为 DIAMETER_NO_COMMON_SECURITY, 并应当断开传输层连接.
来自未知对等端的 CER 可以静默丢弃, 也可以返回 CEA 且将 Result-Code AVP 设为 DIAMETER_UNKNOWN_PEER. 两种情况下都应关闭传输连接. 若本地策略允许接受来自未知主机的 CER, 可以返回成功的 CEA. 若对未知对等端的 CER 回答了成功 CEA, 对等表项的生存期等于传输连接的生存期. 若发生传输故障, 发往该未知对等端的所有未完成事务可以丢弃.
CER 与 CEA 消息禁止被代理 (proxy), 重定向 (redirect) 或中继 (relay).
由于 CER/CEA 不能被代理, 上游代理仍可能收到一条消息, 却没有可用对等端处理与该命令码对应的应用. 此时在应答消息中置位 E 位 (见第 7 节), Result-Code AVP 设为 DIAMETER_UNABLE_TO_DELIVER, 通知下游代理采取行动 (例如将请求改发到另一对等端).
除 Capabilities-Exchange-Request 外, 类型为请求 (Request) 且包含 Auth-Application-Id 或 Acct-Application-Id AVP 的消息, 或带有应用专属命令码的消息, 只能转发到已明确宣告支持该应用 (或已宣告中继应用标识 Relay Application Id) 的主机.