为什么在DHCPREQUEST步骤中使用广播?


19

这是DHCP操作过程, 在此处输入图片说明

我的问题是在第3步,为什么客户端发送广播而不是单播,因为在前两次操作之后,应该知道DHCP服务器/中继服务器的地址?


有什么答案对您有帮助吗?如果是这样,您应该接受答案,这样问题就不会永远弹出来寻找答案。或者,您可以提供并接受自己的答案。
罗恩·莫平

Answers:


30

https://tools.ietf.org/html/rfc2131#page-13

服务器从客户端接收DHCPREQUEST广播。DHCPREQUEST消息未选择的那些服务器将使用该消息作为客户端拒绝该服务器要约的通知。

该协议假定可能有多个DHCP服务器。通过广播请求消息,所有可能已经发出要约的服务器都可以知道客户端的选择。


11

您可能有多个DHCP服务器-请求以广播方式发送,以通知其他可能已发送要约的DHCP服务器其要约未被接受。


7

因为在服务器发送DHCPACK之前,客户端仍然没有IP地址。DHCP服务器可能用DHCPNACK响应请求。


为什么这意味着需要使用广播?客户端从DHCPOFFER消息知道服务器的MAC地址,因此可以将DHCPREQUEST单播发送到该服务器-不需要IP地址。
psmears '18

1
@psmears,因为L3广播作为L2广播发送。DHCP不是L2协议,因此当数据从L3传递到L2时,您必须遵守规则。
YLearn

2
@YLearn:您也需要L3多播或广播数据包的源IP和目标IP,因此,这显然不是问题:)从理论上讲,DHCPREQUEST数据包不能与目标IP和MAC一起发送,这没有任何理论上的原因服务器,以及(与广播数据包一样)源IP 0.0.0.0。广播的原因是让其他DHCP服务器(如果有)知道客户端正在拒绝其报价。
psmears,

1
@ psmears,L3广播的目标是255.255.255.255。您可以从0.0.0.0接收L3广播。但是,您不能从0.0.0.0发出L3单播。
YLearn

2
@YLearn:您当然可以发送一个数据包,其中源地址的字节设置为零!不过,某些RFC可能会禁止这样做-您知道吗?RFC1700表示0.0.0.0“只能用作源地址”(但单播/广播什么也没有);RFC1122表示0.0.0.0“不得发送,除非作为源地址,作为初始化过程的一部分,主机通过该过程来学习其自己的IP地址”(同样,没有uni / broadcast限制)。这是其他地方规定的吗?
psmears,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.