255.255.255.255 vs 192.168.1.255

我们正试图debugging一些执行广播的应用程序。

广播地址255.255.255.255和ifconfig,Bcast:192.168.1.255之间的区别是什么

广播地址总是相对于给定的networking,没有广播本身 ; 当你有一个networking时,你可以通过用1来replace所有的主机位来计算它的广播地址。 简单地说,广播地址是networking上可以使用的最高编号的地址,而networking地址是最低的(所有主机位都设置为0)。 这就是为什么你不能使用它们作为实际的主机地址:它们被保留用于这个用途。

如果你的networking是192.168.1.0/24,那么你的networking地址是192.168.1.0,你的广播地址是192.168.1.255。

如果您的networking是192.168.0.0/16,那么您的networking地址将是192.168.0.0,您的广播地址将是192.168.255.255。

等等…

255.255.255.255是一个特殊的广播地址,意思是“这个networking”:它可以让你发送一个广播数据包到你连接的networking,而不用关心它的地址; 在此,类似于127.0.0.1,这是一个虚拟地址,意思是“本地主机”。

更多信息在这里: http : //en.wikipedia.org/wiki/Broadcast_address

为了补充Massimo在他的回答中所说的话:

255.255.255.255将被认为是物理层广播地址,而192.168.1.255将被认为是networking层广播地址。 ARP会生成物理层广播,而NetBIOS会生成networking层广播。

原则上,255.255.255.255是“全局”广播地址,这意味着IP栈应该将数据包发送到所有networking接口,并且configuration为转发广播的路由器应该发送它们。

在实践中,几乎没有路由器转发广播,而很多堆栈只是简单地将一个数据包副本发送到默认路由指向的接口。

子网广播地址用于select特定的接口。 在这两种情况下,这些都应映射到networking层广播地址(以太网的FF:FF:FF:FF:FF)。

一般来说,使用255.255.255.255是一个坏主意,因为有几个设置,默认路由的接口是错误的select。 明确select一个接口更好,但需要小心。

我的其他build议是使用多播,如果这对您的应用程序是有意义的。 与广播stream量相同的警告仍然适用,但是这可以让不感兴趣的主机快速识别您的数据包,并允许networkingpipe理员为您的协议设置特定的转发规则。