跳到主要内容

16. 消息验证 (Message Validation)

本节说明哪些选项在何种消息类型中有效, 并解释当客户端或服务器收到包含已知选项但这些选项对该消息无效的消息时应如何处理. 例如, IA option 不允许出现在 Information-request message 中.

客户端和服务器可以选择以下任一处理方式: (1) 如果此类消息中的信息对接收方有用, 则从中提取信息; 或 (2) 完全忽略此类消息并直接丢弃.

如果服务器收到一条它认为无效的消息, 它可以发送 Reply message (或在适当情况下发送 Advertise message), 其中包含 Server Identifier option (见第 21.3 节), Client Identifier option (见第 21.2 节, 如果原消息中包含该选项), 以及带有 UnspecFail 状态的 Status Code option (见第 21.13 节).

客户端, 中继代理和服务器禁止丢弃包含未知选项的消息 (或包含 unknown enterprise-number values 的 vendor options 实例的消息). 这些选项应当像不存在一样被忽略. 这对于支持 DHCP 的未来扩展至关重要.

客户端或服务器必须丢弃任何收到的, 具有未知消息类型的 DHCP messages.

客户端不应接受 multicast messages.

服务器不应接受来自客户端的 unicast traffic. Server Unicast option (见第 21.12 节) 和 UseMulticast status code (见第 21.13 节) 已被废弃; 因此, 客户端不应再向服务器的 unicast address 发送消息, 也不应再接收 UseMulticast status code. 但是, 如果某服务器先前支持 Server Unicast option, 后来升级为不再支持该选项, 且先前曾向客户端发送过 Server Unicast option, 则该服务器可以继续接收 unicast messages. 不过, 这不会造成危害, 并且客户端最终会切换回发送 multicast messages (例如, 在达到租约的 rebinding time 后, 或客户端重启后).

中继代理不应接受来自客户端的 unicast messages.

注意: 上述 multicast/unicast 规则适用于本文档中的 DHCP messages. 其他文档和未来文档中定义的消息可能具有不同规则.

16.1. Transaction IDs 的使用 (Use of Transaction IDs)

"transaction-id" 字段保存一个值, 客户端和服务器使用该值将服务器响应与客户端消息关联起来. 客户端应当为其发送的每条新消息生成一个不易被猜测或预测的随机数, 作为 transaction ID. 请注意, 如果客户端生成的 transaction identifiers 很容易预测, 它可能更容易受到某些来自 off-path intruders 的攻击. 客户端在重传消息时必须保持 transaction ID 不变.

16.2. Solicit Message

客户端必须丢弃任何收到的 Solicit messages.

服务器必须丢弃任何不包含 Client Identifier option 或包含 Server Identifier option 的 Solicit messages.

16.3. Advertise Message

客户端必须丢弃任何满足以下任一条件的 Advertise message:

  • 该消息不包含 Server Identifier option (见第 21.3 节).

  • 该消息不包含 Client Identifier option (见第 21.2 节).

  • Client Identifier option 的内容与客户端的 DUID 不匹配.

  • "transaction-id" 字段值与客户端在其 Solicit message 中使用的值不匹配.

服务器和中继代理必须丢弃任何收到的 Advertise messages.

16.4. Request Message

客户端必须丢弃任何收到的 Request messages.

服务器必须丢弃任何满足以下任一条件的 Request message:

  • 该消息不包含 Server Identifier option (见第 21.3 节).

  • Server Identifier option 的内容与服务器的 DUID 不匹配.

  • 该消息不包含 Client Identifier option (见第 21.2 节).

16.5. Confirm Message

客户端必须丢弃任何收到的 Confirm messages.

服务器必须丢弃任何不包含 Client Identifier option (见第 21.2 节) 或包含 Server Identifier option (见第 21.3 节) 的 Confirm messages.

16.6. Renew Message

客户端必须丢弃任何收到的 Renew messages.

服务器必须丢弃任何满足以下任一条件的 Renew message:

  • 该消息不包含 Server Identifier option (见第 21.3 节).

  • Server Identifier option 的内容与服务器的 identifier 不匹配.

  • 该消息不包含 Client Identifier option (见第 21.2 节).

16.7. Rebind Message

客户端必须丢弃任何收到的 Rebind messages.

服务器必须丢弃任何不包含 Client Identifier option (见第 21.2 节) 或包含 Server Identifier option (见第 21.3 节) 的 Rebind messages.

16.8. Decline Message

客户端必须丢弃任何收到的 Decline messages.

服务器必须丢弃任何满足以下任一条件的 Decline message:

  • 该消息不包含 Server Identifier option (见第 21.3 节).

  • Server Identifier option 的内容与服务器的 identifier 不匹配.

  • 该消息不包含 Client Identifier option (见第 21.2 节).

16.9. Release Message

客户端必须丢弃任何收到的 Release messages.

服务器必须丢弃任何满足以下任一条件的 Release message:

  • 该消息不包含 Server Identifier option (见第 21.3 节).

  • Server Identifier option 的内容与服务器的 identifier 不匹配.

  • 该消息不包含 Client Identifier option (见第 21.2 节).

16.10. Reply Message

客户端必须丢弃任何满足以下任一条件的 Reply message:

  • 该消息不包含 Server Identifier option (见第 21.3 节).

  • 消息中的 "transaction-id" 字段与原始消息中使用的值不匹配.

如果客户端在原始消息中包含了 Client Identifier option (见第 21.2 节), 则 Reply message 必须包含 Client Identifier option, 且 Client Identifier option 的内容必须与客户端的 DUID 匹配. 如果客户端在原始消息中未包含 Client Identifier option, 则 Reply message 禁止包含 Client Identifier option.

服务器和中继代理必须丢弃任何收到的 Reply messages.

16.11. Reconfigure Message

服务器和中继代理必须丢弃任何收到的 Reconfigure messages.

客户端必须丢弃任何满足以下任一条件的 Reconfigure message:

  • 该消息不是以 unicast 方式发送给客户端的.

  • 该消息不包含 Server Identifier option (见第 21.3 节).

  • 该消息不包含含有客户端 DUID 的 Client Identifier option (见第 21.2 节).

  • 该消息不包含 Reconfigure Message option (见第 21.19 节).

  • Reconfigure Message option 的 msg-type 不是有效值.

  • 该消息不包含 authentication (例如 RKAP; 见第 20.4 节), 或未通过 authentication validation.

16.12. Information-request Message

客户端必须丢弃任何收到的 Information-request messages.

服务器必须丢弃任何满足以下任一条件的 Information-request message:

  • 该消息包含 Server Identifier option (见第 21.3 节), 且该选项中的 DUID 与服务器的 DUID 不匹配.

  • 该消息包含 IA option.

16.13. Relay-forward Message

客户端必须丢弃任何收到的 Relay-forward messages.

16.14. Relay-reply Message

客户端和服务器必须丢弃任何收到的 Relay-reply messages.