Subject: Re: 0.0.0.0 Weirdness?
To: None <current-users@NetBSD.ORG>
From: der Mouse <mouse@Rodents.Montreal.QC.CA>
List: current-users
Date: 06/23/1998 10:59:43
>> Has anyone else noticed that requests to 0.0.0.0 don't connect anymore?

> That doesn't sound like a problem.

...but it is, in that it's a deviation from long-standing BSD tradition.

> I don't think you can number a machine 0.

No, you can't.  But zero address bits mean "this" ("this network",
"this subnet", "this host"), so 0.0.0.0 means "this host, on this
subnet, on this network".  RFC-1122 3.2.1.3 says of this address

                 This host on this network.  MUST NOT be sent, except as
                 a source address as part of an initialization procedure
                 by which the host learns its own IP address.

This seems to support the contention that it should "work".  However,
RFC-1122 3.2.1.3 also says that

            When a host sends any datagram, the IP source address MUST
            be one of its own IP addresses (but not a broadcast or
            multicast address).

This seems to imply that even if it is permitted to use 0.0.0.0 as a
destination address, replies can never be received from it, in which
case a TCP connection cannot be established (though there are some UDP
protocols which will work if replies don't come from the address they
"ought to").  However, that section goes on to say

            A host MUST silently discard an incoming datagram that is
            not destined for the host.  An incoming datagram is destined
            for the host if the datagram's destination address field is:

            (1)  (one of) the host's IP address(es); or

            (2)  an IP broadcast address valid for the connected
                 network; or

            (3)  the address for a multicast group of which the host is
                 a member on the incoming physical interface.

Thus, while it is permitted for a host to generate a packet from one of
its real addresses to 0.0.0.0, when it receives that packet (from
itself) it is required to silently discard it, thus again preventing
any communication from being established (even UDP-based
communication).

A standards-conformance point of view thus seems to imply that 0.0.0.0
must not "work".  As a pragmatic matter, though, I can't see any harm
in it, unless it complicates some code somewhere.  Furthermore,
standards like RFC-1122 define communication *between* machines;
provided such packets never leak onto the wire, provided they exist
only on a single host, it's entirely an internal matter and inter-host
standards like RFC-1122 have no jurisdiction.

If there is a standard that specifies the semantics of the various APIs
involved (does a standard exist for sockets?), it may have something to
say about the issue.  I'm not familiar with any such, though.

For my money, then, this is a quality-of-implementation issue.  I'm not
sure whether I consider "0.0.0.0 works" as good or bad, though. :)

					der Mouse

			       mouse@rodents.montreal.qc.ca
		     7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B