14

为什么服务器不能像 DHCP Discover and Request 的源 IP 一样使用目的 IP 地址 0.0.0.0?它可以使用从 DHCP 发现和请求中获知的客户端 MAC 地址将帧定向到适当的客户端计算机。

4

2 回答 2

17

单播或广播选项在DHCP RFC 2131中指定:

如果来自客户端的 DHCP 消息中的“giaddr”字段不为零,则服务器将任何返回消息发送到地址出现在“giaddr”中的 BOOTP 中继代理上的“DHCP 服务器”端口。如果“giaddr”字段为零且“ciaddr”字段不为零,则服务器将 DHCPOFFER 和 DHCPACK 消息单播到“ciaddr”中的地址。如果 'giaddr' 为 0 且 'ciaddr' 为 0,并且设置了广播位,则服务器将 DHCPOFFER 和 DHCPACK 消息广播到 0xffffffff。如果广播位未设置且“giaddr”为零且“ciaddr”为零,则服务器将 DHCPOFFER 和 DHCPACK 消息单播到客户端的硬件地址和“yiaddr”地址。在所有情况下,当 'giaddr' 为零时,

ciaddrgiaddr为:

ciaddr        4  Client IP address; only filled in if client is in BOUND, RENEW or REBINDING state and can respond to ARP requests.
giaddr        4  Relay agent IP address, used in booting via a relay agent.

因此,DHCP 服务器根据客户端的当前状态(主要是是否已经有 IP 地址)以及消息的发送者(如果它是中继代理或只是客户端)选择广播或不广播。

单播 DHCPOFFER

在这种情况下,我的 DCHP 服务器选择单播 DHCPOFFER,因为我的机器已经有一个 IP 地址并且我的 LAN 中没有中继代理。

编辑:

并且没有人可以使用 IP 地址 0.0.0.0 作为目标地址。如IPv4 RFC 5735中所述:

0.0.0.0/8 - 此块中的地址是“此”网络上的源主机。 地址 0.0.0.0/32 可用作此网络上此主机的源地址;0.0.0.0/8 内的其他地址可用于引用此网络上的指定主机([RFC1122],第 3.2.1.3 节)。

于 2012-05-25T16:08:10.287 回答
0

来自RFC 2131,第 24 页:

通常,DHCP 服务器和 BOOTP 中继代理会尝试使用 uicast 传递将 DHCPOFFER、DHCPACK 和 DHCPNAK 消息直接传递给客户端。IP 目标地址(在 IP 报头中)设置为 DHCP 'yiaddr' 地址,链路层目标地址设置为 DHCP 'chaddr' 地址。不幸的是,某些客户端实现在配置了有效的 IP 地址之前无法接收此类单播 IP 数据报(导致死锁,在客户端配置了 IP 地址之前无法传递客户端的 IP 地址)。

在客户端发送的任何 DHCPDISCOVER 或 DHCPREQUEST 消息中,在其协议软件配置 IP 地址之前无法接收单播 IP 数据报的客户端应该将“flags”字段中的 BROADCAST 位设置为 1。BROADCAST 位将向 DHCP 服务器和 BOOTP 中继代理提供提示,以将任何消息广播到客户端子网上的客户端。

可以在其协议软件配置之前接收单播 IP 数据报的客户端应该将 BROADCAST 位清除为 0。BOOTP 澄清文档讨论了使用 BROADCAST 位的后果。

于 2015-04-28T07:22:36.643 回答