![DHCP 需要两阶段交换,DHCPDISCOVER 然后 DHCPREQUEST,其设计原理是什么?](https://linux22.com/image/611725/DHCP%20%E9%9C%80%E8%A6%81%E4%B8%A4%E9%98%B6%E6%AE%B5%E4%BA%A4%E6%8D%A2%EF%BC%8CDHCPDISCOVER%20%E7%84%B6%E5%90%8E%20DHCPREQUEST%EF%BC%8C%E5%85%B6%E8%AE%BE%E8%AE%A1%E5%8E%9F%E7%90%86%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
RFC2131第3.1节描述了DHCP的工作流程如下:
Server Client Server
(not selected) (selected)
v v v
| | |
| Begins initialization |
| | |
| _____________/|\____________ |
|/DHCPDISCOVER | DHCPDISCOVER \|
| | |
Determines | Determines
configuration | configuration
| | |
|\ | ____________/|
| \________ | /DHCPOFFER |
| DHCPOFFER\ |/ |
| \ | |
| Collects replies |
| \| |
| Selects configuration |
| | |
| _____________/|\____________ |
|/ DHCPREQUEST | DHCPREQUEST\ |
| | |
| | Commits configuration
| | |
| | _____________/|
| |/ DHCPACK |
| | |
| Initialization complete |
| | |
. . .
. . .
| | |
| Graceful shutdown |
| | |
| |\ ____________ |
| | DHCPRELEASE \|
| | |
| | Discards lease
| | |
v v v
Figure 3: Timeline diagram of messages exchanged between DHCP
client and servers when allocating a new network address
我的问题是:对于请求 IP 地址的客户端,两阶段数据包交换有什么好处?我认为仅定义 DHCPREQUEST/DHCPACK 就足够了。
DHCPDISCOVER
我的意思是,我希望有人可以举出一个对协议的运作有益的案例。
减少一次数据包交换(具体涉及MAC广播)可以降低数据包丢失的风险,特别是在一些不太可靠的介质上,例如802.11无线网络。
答案1
发送发现然后仅向其中一个响应的服务器发送请求的好处是,您不必让所有 DHCP 服务器都经历分配 IP 地址的过程。
我想不出有多个 DHCP 服务器处理相同客户端的很多理由(除了冗余之外),但如果有,单阶段过程将导致 DHCP 服务器分配一个永远不会使用的 IP 地址。客户端搜索 DHCP 服务器,然后在第二步中实际要求其中一个服务器分配 IP 地址,这是有道理的。