RFC 2132 定义了子网掩码和广播地址选项。为什么在 dhcp 协议中有一个广播地址选项(28),它可以由客户端使用子网掩码和 IP 地址计算?
DHCP 中的冗余选项
因为在早已被遗忘的日子里,人们可以使用全零地址或全一地址进行广播,所以你必须告诉系统每个网络倾向于哪种方式。今天(大约 30 年),一切都使用全1地址。
您可能会将现代 IPv4 标准与旧标准混淆。
RFC 2132“DHCP 选项和 BOOTP 供应商扩展”第 5.3 节“:广播地址选项”说:
此选项指定客户端子网上使用的广播地址。广播地址的合法值在 [4] 的第 3.2.1.3 节中指定。
在这种情况下,“[4]”指的是文档的第四个引用资源,STD 3,RFC 1122。
如果我们查看STD 3 RFC 1122“Internet 主机的要求 - 通信层”,第 66 页,我们会发现:
3.2.1.3 节定义了四种标准的 IP 广播地址形式:
Limited Broadcast: {-1, -1}
Directed Broadcast: {<Network-number>,-1}
子网定向广播:{,,-1}
All-Subnets Directed Broadcast: {<Network-number>,-1,-1}
A host MUST recognize any of these forms in the destination
address of an incoming datagram.
There is a class of hosts* that use non-standard broadcast
address forms, substituting 0 for -1. All hosts SHOULD
recognize and accept any of these non-standard broadcast
addresses as the destination address of an incoming datagram.
A host MAY optionally have a configuration option to choose the
0 or the -1 form of broadcast address, for each physical
interface, but this option SHOULD default to the standard (-1)
form.
*4.2BSD Unix and its derivatives, but not 4.3BSD.
(为了便于阅读,引用从 RFC 稍微重新格式化,以删除分页符。)
术语“-1”是指将所有位设置为 1,这可能是您在广播地址中所习惯的。然而,这意味着 4.2 BSD 系统过去使用全零作为广播地址。与这个旧标准的兼容性是我发现我们禁止“网络 ID”地址在 IPv4 中被视为“可用”的最令人信服的技术原因。
RFC 894“通过以太网传输 IP 数据报的标准”,第 2 页的最后(带括号的)句子说:
Unix 4.2bsd 也使用非标准的 Internet 广播地址,主机部分全为零,这也可能在未来改变。
如果我们看一个较新的 RFC,从 2000 年 12 月开始(RFC 3021,它比旧引用的 RFC 编号较低的 RFC 文档更新)RFC 3021“在 IPv4 点对点链接上使用 31 位前缀”说:
广播和网络地址
IP 段上有几个历史上公认的广播地址 [RFC1812]:
(a) the directed broadcast
{<Network-number>, -1}
{<Network-number>, 0}
The network address itself {<Network-number>, 0} is an
obsolete form of directed broadcast, but it may still be used
by older hosts.
因此,虽然您可能认为可以根据子网大小找出正确的广播地址,但这很可能是因为您被教导使用较新的标准。但是,较旧的标准,由 2000 年 12 月的 RFC 3021 认可,因此在 1997 年 3 月(RFC 2132 的发布日期,即您询问的 RFC)肯定仍然(至少被某些人认可)指定了多个可能的广播地址,这些地址可以得到支持。可以提出一个论点,即在网络上使用的正确广播地址是网络采用的任何标准(由网络管理员指定)。因此,“DHCP 选项...”RFC 的作者可能正在尝试使他们提出的协议规范可以在此类网络上毫无问题地有效使用。