我们正在尝试调试一些执行广播的应用程序。
广播地址 255.255.255.255 和 ifconfig 报告的 Bcast:192.168.1.255 之间有什么区别
答案1
广播地址总是与给定的网络相关,不存在广播本身;当您有一个网络时,您可以通过将所有主机位替换为 1 来计算其广播地址;简单地说,广播地址是网络上可以拥有的最高编号地址,而网络地址是最低编号地址(所有主机位均设置为 0);这就是为什么您不能将它们中的任何一个用作实际主机地址的原因:它们是为此用途保留的。
如果您的网络是 192.168.1.0/24,那么您的网络地址将是 192.168.1.0,而您的广播地址将是 192.168.1.255。
如果您的网络是 192.168.0.0/16,那么您的网络地址将是 192.168.0.0,而您的广播地址将是 192.168.255.255。
等等...
255.255.255.255 是一个特殊的广播地址,意思是“这个网络”:它让你向你所连接的网络发送广播数据包,而不必真正关心它的地址;在这方面,类似于 127.0.0.1,它是一个虚拟地址,意思是“本地主机”。
答案2
补充一下 Massimo 在他的回答中所说的内容:
255.255.255.255 将被视为物理层广播地址,而 192.168.1.255 将被视为网络层广播地址。ARP 将生成物理层广播,而 NetBIOS 将生成网络层广播。
答案3
原则上,255.255.255.255 是“全局”广播地址,这意味着 IP 堆栈应该将数据包发送到所有网络接口,并且配置为转发广播的路由器应该将其发送。
实际上,几乎没有路由器转发广播,许多堆栈只是将数据包的一个副本发送到默认路由指向的接口。
子网广播地址用于选择特定接口。在两种情况下,这些地址都应映射到网络层广播地址(对于以太网,该地址为 FF:FF:FF:FF:FF:FF)。
一般情况下,使用 255.255.255.255 不是一个好主意,因为在很多设置中,使用默认路由的接口恰恰是错误的选择。明确选择接口更好,但需要谨慎行事。
我的另一个建议是使用多播,如果这对您的应用程序有意义的话。与广播流量相同的注意事项仍然适用,但这允许不感兴趣的主机快速识别您的数据包,并且允许网络管理员为您的协议设置特定的转发规则。
答案4
如果网络中没有子网,则 255.255.255.255 和 192.168.1.255 具有相同的效果。但是,当您将网络细分为子网时,情况会有所不同。主机使用 255.255.255.255(称为“有限广播”)向其所有近邻(即本地子网上的所有接口)进行广播。
而您可以使用 192.168.1.255(称为“定向广播”)向整个 LAN 或 WAN 上的所有接口进行广播。
此外,如果节点不知道其网络(或只是事先配置了 IP),并且正在从 DHCP 服务器请求其动态 IP,则节点会使用 255.255.255.255 在子网上进行广播。有关更多详细信息,请参阅“RFC 919”。