We're trying to debug some applications performing broadcast.
What is the difference between the broadcast address 255.255.255.255 and as e.g. reported by ifconfig, Bcast:192.168.1.255
We're trying to debug some applications performing broadcast.
What is the difference between the broadcast address 255.255.255.255 and as e.g. reported by ifconfig, Bcast:192.168.1.255
A broadcast address is always relative to a given network, there is no broadcast per se; when you have a network, you can compute its broadcast address by replacing all the host bits with 1s; simply put, the broadcast address is the highest numbered address you can have on the network, while the network address is the lowest one (with all host bits set to 0s); this is why you can't use either of them as actual host addresses: they are reserved for this use.
If your network is 192.168.1.0/24, then your network address will be 192.168.1.0 and your broadcast address will be 192.168.1.255.
If your network is 192.168.0.0/16, then your network address will be 192.168.0.0 and your broadcast address will be 192.168.255.255.
And so on...
255.255.255.255 is a special broadcast address, which means "this network": it lets you send a broadcast packet to the network you're connected to, without actually caring about its address; in this, is similar to 127.0.0.1, which is a virtual address meaning "local host".
More info here: http://en.wikipedia.org/wiki/Broadcast_address
To add to what Massimo has stated in his answer:
255.255.255.255 would be considered the phsyical layer broadcast address while 192.168.1.255 would be considered the network layer broadcast address. ARP would generate a physical layer broadcast, while NetBIOS would generate a network layer broadcast.
In principle, 255.255.255.255 is the "global" broadcast address, which means that the IP stack is supposed to send the packet to all network interfaces, and routers that are configured to forward broadcasts are supposed to send them on.
In practice, there are almost no routers forwarding broadcasts, and a lot of stacks simply send one copy of the packet to the interface where the default route points to.
The subnet broadcast address is used to select a specific interface. In both cases, these should be mapped to the network layer broadcast address (which would be FF:FF:FF:FF:FF:FF for Ethernet).
In general, using 255.255.255.255 is a bad idea, as there are several setups where the interface with the default route is exactly the wrong choice. Selecting an interface explicitly is better, but needs to be done carefully.
My other suggestion would be to use multicast, if that makes sense for your application. The same caveats as for broadcast traffic still apply, but this allows uninterested hosts to quickly identify your packets, and it allows network managers to set up specific forwarding rules for your protocol.
255.255.255.255 and 192.168.1.255 have identical effect if there are no subnets in the network. However, there is a difference when you have broken down your network into subnets. 255.255.255.255 (called as 'Limited-Broadcast') is used by a host to broadcast to all of its immediate neighbors i.e. all those interfaces on the local subnet.
Whereas, you would use 192.168.1.255 (called as 'Directed-Broadcast') to broadcast to all the interfaces on the entire LAN or WAN.
Also, 255.255.255.255 is used by a node to broadcast on subnet if it doesn't know about its network (or simply prior to it IP configuration) and is requesting for its dynamic IP from a DHCP server. Refer to 'RFC 919' for more details.