为什么要播放DHCP Offer和Ack?

时间:2012-05-17 13:29:06

标签: dhcp

为什么服务器不能使用FTP发现和请求的源IP中使用的目标IP地址0.0.0.0?它可以使用从DHCP Discover和Request学习的客户端的MAC地址将帧指向适当的客户端计算机。

2 个答案:

答案 0 :(得分:16)

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

  

如果来自客户端的DHCP消息中的'giaddr'字段不为零,      服务器将任何返回消息发送到的“DHCP服务器”端口      BOOTP中继代理,其地址出现在'giaddr'中。如果'giaddr'      field为零,'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地址)并相应地广播消息的发送者,如果它是中继代理或仅仅是客户端

Unicast DHCPOFFER

在这种情况下,我的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)。

答案 1 :(得分:0)

来自the RFC 2131,第24页:

  

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

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

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