15. 消息验证
- 消息验证
客户端和服务器 SHOULD 丢弃任何包含不允许出现在所接收消息中的选项的消息. 例如, IA option 不允许出现在 Information-request message 中. 如果此类消息中的信息对接收方有用, 客户端和服务器 MAY 选择从该消息中提取信息.
服务器 MUST 丢弃其收到的任何以单播地址为目标地址的 Solicit, Confirm, Rebind 或 Information-request message.
基于 DHCP 认证的消息验证在 section 21.4.2 中讨论.
如果服务器收到的消息包含其不应包含的选项 (例如带有 IA option 的 Information-request message), 缺少其应包含的选项, 或因其他原因无效, 则服务器 MAY 发送 Reply (或在适当情况下发送 Advertise), 其中包含 Server Identifier option, 如果原消息中包含 Client Identifier option 则也包含该选项, 并包含状态为 UnSpecFail 的 Status Code option.
15.1. Transaction ID 的使用
"transaction-id" 字段保存一个值, 客户端和服务器使用该值将服务器响应与客户端消息同步. 客户端 SHOULD 为其发送的每个新消息生成一个不易猜测或预测的随机数作为 transaction ID. 注意, 如果客户端生成容易预测的 transaction identifier, 它可能更容易受到路径外入侵者的某些类型攻击. 客户端在重传某个消息时 MUST 保持 transaction ID 不变.
15.2. Solicit Message
客户端 MUST 丢弃任何收到的 Solicit message.
服务器 MUST 丢弃任何不包含 Client Identifier option 或包含 Server Identifier option 的 Solicit message.
15.3. Advertise Message
客户端 MUST 丢弃任何满足以下任一条件的收到的 Advertise message:
-
该消息不包含 Server Identifier option.
-
该消息不包含 Client Identifier option.
-
Client Identifier option 的内容与客户端的 DUID 不匹配.
-
"transaction-id" 字段值与客户端在其 Solicit message 中使用的值不匹配.
服务器和 relay agent MUST 丢弃任何收到的 Advertise message.
15.4. Request Message
客户端 MUST 丢弃任何收到的 Request message.
服务器 MUST 丢弃任何满足以下任一条件的收到的 Request message:
-
该消息不包含 Server Identifier option.
-
Server Identifier option 的内容与服务器的 DUID 不匹配.
-
该消息不包含 Client Identifier option.
15.5. Confirm Message
客户端 MUST 丢弃任何收到的 Confirm message.
服务器 MUST 丢弃任何不包含 Client Identifier option 或包含 Server Identifier option 的 Confirm message.
15.6. Renew Message
客户端 MUST 丢弃任何收到的 Renew message.
服务器 MUST 丢弃任何满足以下任一条件的收到的 Renew message:
-
该消息不包含 Server Identifier option.
-
Server Identifier option 的内容与服务器的 identifier 不匹配.
-
该消息不包含 Client Identifier option.
15.7. Rebind Message
客户端 MUST 丢弃任何收到的 Rebind message.
服务器 MUST 丢弃任何不包含 Client Identifier option 或包含 Server Identifier option 的 Rebind message.
15.8. Decline Message
客户端 MUST 丢弃任何收到的 Decline message.
服务器 MUST 丢弃任何满足以下任一条件的收到的 Decline message:
-
该消息不包含 Server Identifier option.
-
Server Identifier option 的内容与服务器的 identifier 不匹配.
-
该消息不包含 Client Identifier option.
15.9. Release Message
客户端 MUST 丢弃任何收到的 Release message.
服务器 MUST 丢弃任何满足以下任一条件的收到的 Release message:
-
该消息不包含 Server Identifier option.
-
Server Identifier option 的内容与服务器的 identifier 不匹配.
-
该消息不包含 Client Identifier option.
15.10. Reply Message
客户端 MUST 丢弃任何满足以下任一条件的收到的 Reply message:
-
该消息不包含 Server Identifier option.
-
消息中的 "transaction-id" 字段与原始消息中使用的值不匹配.
如果客户端在原始消息中包含了 Client Identifier option, 则 Reply message MUST 包含 Client Identifier option, 且 Client Identifier option 的内容 MUST 与客户端的 DUID 匹配; 或者, 如果客户端在原始消息中未包含 Client Identifier option, 则 Reply message MUST NOT 包含 Client Identifier option.
服务器和 relay agent MUST 丢弃任何收到的 Reply message.
15.11. Reconfigure Message
服务器和 relay agent MUST 丢弃任何收到的 Reconfigure message.
客户端 MUST 丢弃任何满足以下任一条件的 Reconfigure message:
-
该消息不是以单播方式发送给客户端.
-
该消息不包含 Server Identifier option.
-
该消息不包含含有客户端 DUID 的 Client Identifier option.
-
该消息不包含 Reconfigure Message option, 且 msg-type 必须是有效值.
-
该消息包含任何 IA option, 且 Reconfigure Message option 中的 msg-type 为 INFORMATION-REQUEST.
-
该消息不包含 DHCP 认证:
-
该消息不包含 authentication option.
-
该消息未通过客户端执行的认证验证.
-
15.12. Information-request Message
客户端 MUST 丢弃任何收到的 Information-request message.
服务器 MUST 丢弃任何满足以下任一条件的收到的 Information-request message:
-
该消息包含 Server Identifier option, 且该选项中的 DUID 与服务器的 DUID 不匹配.
-
该消息包含 IA option.
15.13. Relay-forward Message
客户端 MUST 丢弃任何收到的 Relay-forward message.
15.14. Relay-reply Message
客户端和服务器 MUST 丢弃任何收到的 Relay-reply message.