2.3.5 广播地址
每个 IPv4 子网都保留了一个特殊的地址作为子网广播地址(subnet broadcast address)
子网广播地址就是保留地址中的网络/子网部分,剩下的部分全为 1
可以这样得到某个子网的子网广播地址:先对子网掩码取反,然后将取反的结果与任意一个子网中的地址做按位或运算
图 2-6 使用了图 2-5 中最左侧的子网作为例子来展示了计算过程
图 2-6
子网广播地址由 IPv4 地址与子网掩码的补码(这里的补码指取反)做按位或运算得到
在这个例子中,/24 的子网掩码,剩下的 32 – 24 = 8 位都被设置为 1,得到一个十进制的值 255
子网广播地址为 128.32.1.255
如图 2-6 所示,子网 128.32.1.0/24 的子网广播地址为 128.32.1.255
历史上,使用这种类型的目的地址的数据报也被称为定向广播(directed broadcast)
这样一个广播,理论上在到达目标子网之前,都可以作为一个单独的数据报在互联网中进行路由
到达子网之后,这个数据报会变成一个广播数据报集合,被分别交付到子网中的所有主机上
对这个方法进一步推广,可以用到整个站点的网络号广播上
例如在图 2-3 或图 2-5 中
一个目的地址为 IPv4 地址 128.32.255.255 的数据报会被广播给所有站点中的主机
定向广播被发现在安全方面存在很大的问题,因此如今实际上已经不再使用了
[RFC0919] 描述了 IPv4 中各种不同类型的广播
[RFC1812] 规定路由器不仅必须有接收和转发定向广播的功能,而且还必须默认开启此功能
这个策略在 [RFC2644] 中被颠倒过来,路由器默认必须禁用转发定向广播的功能,甚至可以完全不支持这个功能
除了子网广播地址之外,地址 255.255.255.255 也因为特殊用途而被保留了下来
这个地址被用作本地广播(local net broadcast)(也叫做受限广播(limited broadcast)),不需要路由器转发
见第 2.5 节,了解特殊用途地址的更多细节
虽然路由器可能不转发广播,但子网广播或本地广播的目的地网络中的计算机
还是应该认为可能会收到这样的广播,除非终端主机显式地禁用了这个功能
这样的广播不一定需要路由器来完成,也可能由链路层广播机制来提供支持(见第 3 章)
广播地址通常在 UDP/IP(见第 10 章)或 ICMP(见第 8 章)这样的协议中使用
因为这些协议不涉及 TCP/IP 那样的基于 IP 的双向会话
IPv6 中没有任何广播地址,因此只有在 IPv4 中才有可能使用广播地址
IPv6 中只会使用组播地址(见第 9 章)