![DHCP:广播标志](https://linux22.com/image/1329101/DHCP%EF%BC%9A%E5%B9%BF%E6%92%AD%E6%A0%87%E5%BF%97.png)
我通过 wireshark 查看了一些 DHCP 数据包。我注意到在 bootp 部分有一个广播标志。
但是目的 IP 是 255.255.255.255。这还不足以表明它是广播吗?为什么需要这个标志?
谢谢,
语言2
答案1
DHCP 标志的作用完全不同。它由客户表明服务器如何将回复发送回客户端。DHCP 客户端最初通过广播发送其请求,因为它不知道服务器的 IP 地址。但是,由于服务器知道客户端的 IP(它只提供了一个 IP),因此即使请求是通过广播发送的,服务器也可以通过单播发送回复。每RFC2131:
如果客户端在其协议软件配置 IP 地址之前无法接收单播 IP 数据报,则应在其发送的任何 DHCPDISCOVER 或 DHCPREQUEST 消息中将“标志”字段中的 BROADCAST 位设置为 1。BROADCAST 位将向 DHCP 服务器和 BOOTP 中继代理提供提示,以向客户端子网上的客户端广播任何消息。如果客户端在其协议软件配置之前可以接收单播 IP 数据报,则应将 BROADCAST 位清除为 0。
答案2
它们位于 ISO 堆栈的不同层。目标 IP 255.255.255.255 使数据包在 IP 级别成为广播 IP 数据包。在 DHCP 数据包内设置广播标志不会产生此效果。
该标志本身可以被视为 DHCP 服务器的信息 - 它告诉服务器应该通过广播进行回复。最常见的情况是客户端还没有 IP 地址,因此需要广播回复,因为还没有 IP 可以单播。DHCP 服务器不需要检查数据包头来确定如何响应,这取决于 dhcp 协议来明确这一点。
您可以将 DHCP 请求作为单播数据包发送,直接发送到 DHCP 服务器 - 但仍可以在 DHCP 标志内设置广播标志,以让 dhcp 服务器知道无论标头是什么样子,它都需要通过广播进行回复。
总结来说,IP 和 UDP 报头告诉协议栈的 IP 层和 UDP 层知道发生了什么,而 DHCP 内容是应用层的,让 DHCP 应用程序知道发生了什么。