在 DHCP DORA 过程中,服务器通过 DHCPOFFER 消息向客户端提供 IP 地址。为什么客户端必须再次向服务器发送显式 DHCPREQUEST 消息?为什么不自己发送 DHCPACCEPT 消息并获取 IP 地址?
我认为,如果有多个 DHCP 服务器向客户端提供 IP 地址,那么这两个消息的必要性是合理的。客户端可以选择提供的任何一个 IP,然后其余服务器将撤回其提供的 IP。但如果我的环境只有 1 个 DHCP 服务器,该怎么办?
答案1
简短回答:这只是一个命名问题。将 DHCPREQUEST 视为您的 DHCPACCEPT,您就会发现它们在做同样的事情。
服务器行为指定为RFC 2131. 消息对为:
DHCPDISCOVER -> DHCPOFFER
DHCPREQUEST -> DHCPACK
您建议添加一条新的 DHCPACCEPT 消息,该消息将执行与 DHCPREQUEST 现在执行的操作完全相同的操作(请注意,您仍应设置“xid”、时间戳……)。并且该新消息仍应适合 DHCP 所属的请求-响应类型的协议,因此您最终会得到类似以下内容:
DHCPDISCOVER -> DHCPOFFER
DHCPACCEPT -> DHCPACK
这样做有什么好处?你仍然需要 DHCPACK(这是实际设置地址的消息,请参阅客户端状态图)。
这只是一种新类型的消息(就像添加 DHCPEXTENDLEASE 一样,它可能更容易阅读,但你添加可能的状态和转换并没有真正的好处)。理论上的 DHCPACCEPT 和 DHCPEXTENDLEASE 都已由 DHCPREQUEST 处理。它们从服务器获取要约,添加一些字段(一个重要的步骤)并接受它。然后有等待服务器确认。