【发布时间】:2012-05-17 13:29:05
【问题描述】:
为什么服务器不能像 DHCP Discover and Request 的源 IP 一样使用目的 IP 地址 0.0.0.0?它可以使用从 DHCP 发现和请求中获知的客户端 MAC 地址将帧定向到适当的客户端机器。
【问题讨论】:
-
我怀疑这需要在有多个协作 DHCP 服务器的环境中工作。中继代理也可能需要它才能正常工作。
标签: dhcp
为什么服务器不能像 DHCP Discover and Request 的源 IP 一样使用目的 IP 地址 0.0.0.0?它可以使用从 DHCP 发现和请求中获知的客户端 MAC 地址将帧定向到适当的客户端机器。
【问题讨论】:
标签: dhcp
单播或广播选项在DHCP RFC 2131中指定:
如果来自客户端的 DHCP 消息中的 'giaddr' 字段不为零, 服务器将任何返回消息发送到服务器上的“DHCP 服务器”端口 BOOTP 中继代理,其地址出现在“giaddr”中。如果'giaddr' 字段为零且“ciaddr”字段为非零,则服务器 将 DHCPOFFER 和 DHCPACK 消息单播到“ciaddr”中的地址。 如果 'giaddr' 为零且 'ciaddr' 为零,则广播位为 设置,则服务器将 DHCPOFFER 和 DHCPACK 消息广播到 0xffffffff。如果广播位未设置且 'giaddr' 为零并且 'ciaddr' 为零,则服务器单播 DHCPOFFER 和 DHCPACK 向客户端的硬件地址和“yiaddr”地址发送消息。在 在所有情况下,当 'giaddr' 为零时,服务器会广播任何 DHCPNAK 发送到 0xffffffff 的消息。
ciaddr 和 giaddr 是:
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 地址)以及消息的发送者(如果它是中继代理或只是客户端)选择广播或不广播.
在这种情况下,我的 DCHP 服务器选择单播 DHCPOFFER,因为我的机器已经有一个 IP 地址,而我的 LAN 中没有中继代理。
编辑:
而且没有人可以使用 IP 地址 0.0.0.0 作为目标地址。如IPv4 RFC 5735中指定:
0.0.0.0/8 - 此块中的地址指“this”上的源主机 网络。 地址 0.0.0.0/32 可以用作此的源地址 此网络上的主机; 0.0.0.0/8 内的其他地址可用于 引用此网络上的指定主机 ([RFC1122], Section 3.2.1.3)。
【讨论】:
来自the RFC 2131,第 24 页:
通常,DHCP 服务器和 BOOTP 中继代理会尝试传递 使用 DHCPOFFER、DHCPACK 和 DHCPNAK 消息直接发送给客户端 单播交付。 IP 目标地址(在 IP 标头中)已设置 到 DHCP 'yiaddr' 地址,链路层目标地址是 设置为 DHCP 'chaddr' 地址。不幸的是,一些客户 实现无法接收此类单播 IP 数据报,直到 已使用有效的 IP 地址配置实现 (导致无法获取客户端 IP 地址的死锁) 直到客户端配置了 IP 地址)。
客户端无法接收单播 IP 数据报,直到它 协议软件已配置 IP 地址 应设置 在任何 DHCPDISCOVER 或 客户端发送的 DHCPREQUEST 消息。广播位将提供 提示 DHCP 服务器和 BOOTP 中继代理广播任何 向客户端子网上的客户端发送消息。
可以在其协议软件被安装之前接收单播 IP 数据报 配置应将 BROADCAST 位清除为 0。 BOOTP 澄清文件讨论了使用 广播位。
【讨论】: