[Opensim-users] NAT & Corporate Firewall
Simon Slavin
s.slavin at lancaster.ac.uk
Fri Apr 1 11:59:16 UTC 2011
On 1 Apr 2011, at 12:43am, Justin Clark-Casey wrote:
> Some people on Stack Overflow think that IPAddress.Any means listen on all NICs (http://stackoverflow.com/questions/1777629/how-to-listen-on-multiple-ip-addresses). But my reading of the MS SDK reference above means that it only binds to one. Anybody able to comment on this?
Stack Overflow is right. My reading of that SDK page is that it's wrong, and should be corrected, but other MS documentation is clearer on what '::Any' means, for example
http://msdn.microsoft.com/en-us/library/system.net.ipaddress.any.aspx
Returning to the standards, IP address 0.0.0.0 is reserved for specific purposes for both sending and receiving. It's called the 'anonymous' address (for historical reasons) or the 'broadcast' address (for current reasons).
If a computer SENDS a packet to 0.0.0.0 then it is multibroadcasting: sending one message to every computer that can hear it. This is done most often to announce the (un)availability of a service, for instance that a printer service has come online. Sending to address 0.0.0.0 is done by, for example, DHCP and zeroconf (what Apple calls 'Bonjour'). Things like routers are usually set up to drop packets SENT to 0.0.0.0 so that you don't announce to the entire world what address your printer can be found on.
When a computer LISTENS to the network interface bound to 0.0.0.0 then it is telling its TCP stack that it doesn't care which network interface a message comes in on, it wants it anyway. Almost every Internet application does this, especially now many have both Ethernet sockets and WiFi capabilities: an app doesn't care what its user is using right now, it just wants to 'use the internet'. Under normal circumstances the only programs which /don't/ listen on 0.0.0.0 are techie programs like network utilities, or a web server on a gateway computer which needs to present a web site to internal users and make sure it isn't available to external users.
I tried to find an RFC to point to as reference but nothing seems to spell this out. The nearest thing i could find was RFC950.
Simon.
More information about the Opensim-users
mailing list