DHCP OFFER 是第 3 层广播,因为服务器不知道客户端 Ip,但服务器知道客户端 mac 地址。那么它会是怎样的广播呢?
如果有人问我这个?我该怎么回答?我可以说它的第 3 层广播和第 2 层单播吗
DHCP OFFER 是第 3 层广播,因为服务器不知道客户端 Ip,但服务器知道客户端 mac 地址。那么它会是怎样的广播呢?
如果有人问我这个?我该怎么回答?我可以说它的第 3 层广播和第 2 层单播吗
请注意广播标志,请参阅RFC2131(第 24 页):
在客户端发送的任何 DHCPDISCOVER 或 DHCPREQUEST 消息中,在其协议软件配置了 IP 地址之前无法接收单播 IP 数据报的客户端应该将“标志”字段中的 BROADCAST 位设置为 1。BROADCAST 位将向 DHCP 服务器和 BOOTP 中继代理提供一个提示,以向客户端子网上的客户端广播任何消息。
编辑
在配置协议软件之前可以接收单播 IP 数据报的客户端应该将 BROADCAST 位清零。 BOOTP 说明文档讨论了使用 BROADCAST 位的后果。
添加了 RFC 的其余部分。根据整个段落,它可以是广播的,也可以是单播的,甚至两者都可以。
答案是它可以是广播的也可以是单播的——在某些情况下,当使用 an 时,它在到达客户端之前既可以是单播又可以是广播ip helper-address
。
在 DISCOVER-OFFER-REQUEST-ACK 交换完成之前,客户端实际上没有 IP 地址。这是可能的(尽管很可能)有一个情况出现,其中服务器将resond与一个NAK请求。
但是,由于单播通常优于广播,因此许多客户端将接受与其 L2 地址匹配的单播回复。
https://www.ietf.org/rfc/rfc2131.txt
根据此 RFC:
Droms 标准跟踪 [第 24 页] RFC 2131 动态主机配置协议 1997 年 3 月
通常,DHCP 服务器和 BOOTP 中继代理尝试使用 uicast 传递将 DHCPOFFER、DHCPACK 和 DHCPNAK 消息直接传递给客户端。IP 目标地址(在 IP 标头中)设置为 DHCP 'yiaddr' 地址,链路层目标地址设置为 DHCP 'chaddr' 地址。不幸的是,一些客户端实现无法接收这样的单播 IP 数据报,直到实现配置了有效的 IP 地址(导致死锁,在客户端配置了 IP 地址之前无法传递客户端的 IP 地址)。
在客户端发送的任何 DHCPDISCOVER 或 DHCPREQUEST 消息中,在其协议软件配置了 IP 地址之前无法接收单播 IP 数据报的客户端应该将“标志”字段中的 BROADCAST 位设置为 1。BROADCAST 位将向 DHCP 服务器和 BOOTP 中继代理提供一个提示,以向客户端子网上的客户端广播任何消息。可以在其协议软件配置之前接收单播 IP 数据报的客户端应该将 BROADCAST 位清除为 0。BOOTP 澄清文档讨论了使用 BROADCAST 位 [21] 的后果。
服务器或中继代理直接向 DHCP 客户端发送或中继 DHCP 消息(即,不发送或中继到“giaddr”字段中指定的中继代理)应该检查“标志”字段中的 BROADCAST 位。如果该位设置为 1,则 DHCP 消息应该作为 IP 广播发送,使用 IP 广播地址(最好是 0xffffffff)作为 IP 目的地址,使用链路层广播地址作为链路层目的地址。如果 BROADCAST 位被清除为 0,则消息应该作为 IP 单播发送到“yiaddr”字段中指定的 IP 地址和“chaddr”字段中指定的链路层地址。如果无法进行单播,
DHCP 服务器通过 DHCP OFFER 进行应答以提供 IP 地址。它知道目标 MAC 和 IP,因此将使用单播 IP 数据包,发往始发以太网地址,因此也是单播以太网帧。
如果您想真正看到它,只需在您的 DHCP 服务器上输入以下命令:
tcpdump -i
我的以太网设备-e src port bootps
其中my_ethernet_device是您的 DHCP 服务器在其上回复您的网络的以太网接口的名称。