根据这本书DHCP 提供必须被广播,但嗅探 DHCP 数据包:看起来 OFFER 和 ACK 都没有被广播(或者我错了?)。屏幕截图是在以下情况下拍摄的:
ipconfig /release
ipconfig /renew
我认为广播可以帮助多个 DHCP 服务器确定他们的提议是否被接受;但 REQUEST 部分已经广播,并且它具有决定性信息,可以确定客户端想要接受哪个提议。换句话说,其他 DHCP 服务器的提议因此被隐式拒绝。
我已经查看了这些问题这,这和这。但我相信这些问题和答案的重点是如何而我想关注的是推理。我很好奇为什么 OFFER 声称必须广播,然后为什么它更喜欢不是是吗?DHCP 服务器怎么会假设发现主机具有该特定 IP 地址?(我相信这是因为帧:179 似乎确实具有特定 IP 地址的 ipv4 目标,该 IP 地址与 DHCP 服务器提供的 IP 地址一致)。这本书的关注点可能是什么,声称它必须在确实需要的地方进行广播能不是嗎?
答案1
根据本书,DHCP Offer 必须广播
这取决于 DNS 服务器是否与客户端位于同一网络上。
这本书有点误导,因为书中的示例展示了 DNS 中继请求(当服务器位于不同的网络上时)。
DNS 服务器与客户端位于同一网络
在您的示例中,DNS 服务器与客户端位于同一网络上,我们可以转到相应的RFC 2131 - 动态主机配置协议看看它指定了什么:
3. 客户端-服务器协议
...
客户端在其本地物理子网上广播 DHCPDISCOVER 消息。DHCPDISCOVER 消息可能包含建议网络地址和租约期限值的选项。BOOTP 中继代理可能会将消息传递给不在同一物理子网上的 DHCP 服务器。
每个服务器都可以用 DHCPOFFER 消息进行响应,该消息在“yiaddr”字段中包含可用的网络地址(以及 DHCP 选项中的其他配置参数)。服务器不需要保留提供的网络地址,但如果服务器避免将提供的网络地址分配给另一个客户端,协议将更有效地工作。在分配新地址时,服务器应该检查提供的网络地址是否尚未使用;例如,服务器可以使用 ICMP 回显请求探测提供的地址。服务器应该实现为网络管理员可以选择禁用对新分配地址的探测。 服务器向客户端发送DHCPOFFER消息,必要时使用 BOOTP 中继代理。
(重点是我的)
因此DHCPOFFER
不是广播-直接发送到客户端。
- 客户端收到带有配置参数的 DHCPACK 消息客户端应对参数(例如,分配网络地址的 ARP)进行最终检查,并注意 DHCPACK 消息中指定的租约期限。此时,客户端已配置完毕。如果客户端检测到该地址已被使用(例如,通过使用 ARP),则客户端必须向服务器发送 DHCPDECLINE 消息并重新启动配置过程。客户端应等待至少十秒钟再重新启动配置过程,以避免在出现循环的情况下出现过多的网络流量。
(重点是我的)
因此DHCPACK
不是广播-直接发送到客户端。
DNS 服务器与客户端位于不同的网络上
正如链接中提到的计算机网络中的 DHCP 中继代理 - GeeksforGeeks发布者吉娜在评论中,当涉及 DNS 中继(当服务器位于不同的网络上时)时,过程会有所不同:
在 DORA 过程中,发现和请求消息是广播的,提供和确认消息是广播或单播的,具体取决于广播标志的值,即如果广播标志的值为 1,则提供和确认消息是广播的,如果为 0,则消息是单播的。
(重点是我的)
DHCP 中继代理是任何 TCP/IP 主机,用于在 DHCP 服务器位于不同网络时转发 DHCP 服务器和客户端之间的请求和回复。中继代理接收 DHCP 消息,然后生成新的 DHCP 消息并在另一个接口上发送。
多拉
(德)iscovery:客户端向网络发送广播以查找 DHCP 服务器。
(哦)ffer:DHCP 服务器以单播方式向客户端发送 IP 地址“提供”。
(R)equest:客户端向所有服务器广播它已经接受了该提议。
(A)cknowledge:DHCP 服务器向客户端发送最终单播,其中包含客户端将使用的 IP 信息。
如果客户端和服务器位于同一网络中,则会出现这种情况。客户端广播请求将确保除接受提供的服务器之外的所有其他 DHCP 服务器将停止为发出的提供保留 IP。