为什么需要请求dhcp数据包?

Why request dhcp packet is neccessary?

在 DHCP 协议中,我们有 4 个名为 DORA 的数据包。

首先客户端发送一个广播Discovery数据包来检测DHCP服务器。

然后服务器发送一个包含ip、子网和许多选项的Offer数据包等待客户端。

如果客户端发现合适的Offer数据包,发送广播请求并得到ACK或NAK。

但是为什么?

为什么我们不能忽略Request包,而是用这种方式发送3个包。

发现、提供和确认。

client -> Discovery
server -> Offer
client -> ACK

为什么这种方式不安全或不合适?

客户端在广播Discover包时,可能会收到来自多个DHCP服务器的Offer包。请求数据包的目的是对 一个 服务器说,“我想使用您提供给我的 IP 地址”。如果没有发送:

  • 客户端将使用其提供的 IP 的服务器不会知道不向其他客户端提供该 IP,并且

  • 其他服务器不知道他们可以将他们的 IP 提供给其他客户端。

然后最后的 Acknowledge 数据包告诉客户端服务器已经收到请求,并且客户端现在有了 IP 地址的“租约”。

这是为了确保:

  • IP 地址不会被浪费,因为服务器认为客户端正在使用提供的 IP,而实际上客户端使用的是不同服务器提供的 IP。

  • 同一个IP不小心同时租给了两个客户端...造成混乱


在你提出的变体中,假设从客户端到服务器的ACK包丢失了。现在服务器不会意识到客户端将使用提供的 IP 地址。几分钟后,它可能会向不同的客户端提供相同的 IP 地址,然后……随之而来的是混乱。


请不要以为设计互联网协议的人都是傻子。在编写 RFC 之前,他们已经仔细考虑了这些事情。 许多 其他(同样聪明)的人仔细检查了预先批准的 RFC 以寻找问题。所以......如果你认为关于标准协议的某些事情是错误的......那是可能你,而不是协议设计者谁猜错了