[ih] The history of "This" 0.0.0.0/8 network?

Dave Taht dave at taht.net
Tue Feb 12 10:23:42 PST 2019


Grant Taylor <internet-history at gtaylor.tnetconsulting.net> writes:

> On 2/11/19 1:21 PM, Dave Taht wrote:
>> As part of an upcoming internet draft, I'd wanted to be able to coherently 
>> discuss the origin and original use cases of the "this" network "0" 
>> in Arpanet to early ipv4 transition days, and thus far I haven't found 
>> much information on it.
>
> I have a few comments.  Feel free to ignore them.  Please correct me if 
> you can.  I'd love to learn from someone else's work.
>
>   - To me, "0.0.0.0" represents and as such implies IPv4.  So "early 
> IPv4 transition days" sounds like the transition /to/ IPv4.  Yet 0.0.0.0 
> is an IPv4 address to me.  So what are we transitioning from and to?
>
> Admittedly I'm not familiar with the addressing that was used on ARPAnet 
> prior to IPv4.  But I suspect that it's addressing did not take the form 
> of 0.0.0.0.
>
> Aside:  Perhaps it's time to go back and re-read Where Wizards Stay Up 
> Late again, but this time from the eyes of an amateur network engineer 
> instead of a history student.


I loved that book. It needs a sequel. Multiple sequels. One tidbit from
that book I'd love to track down - it said paul buran wrote 11?13? 14? -
can't remember- *books* about packet processing, and yet these have
vanished from the internet. Whenever I struggle on something - like the
whol bufferbloat thing - I fantasize that scribbled in the margin of
book 13 was the answer to my problem.

>
>   - I guess there is some difference in the single IP address of 0.0.0.0 
> and any of the 16,777,215 other IPv4 address in the 0/8 network.
>
>   - It's my understanding that zero is frequently used when the proper 
> value is unknown.
>
>   - As such, the zero network (0/8) is used when the proper network 
> address is unknown.

What we see nowadays is 0.0.0.0/32 is used for useful stuff. 0.0.0.0/8,
by history and by extension (including the 4.2 BSD broadcast gaff), is
unused.

However, 0.0.0.1 - 0.255.255.254 *does work* as a real address with a
very simple patch to linux.

 static inline bool ipv4_is_local_multicast(__be32 addr)
@@ -67,7 +71,7 @@ static inline bool ipv4_is_all_snoopers(__be32 addr)

 static inline bool ipv4_is_zeronet(__be32 addr)
 {
-       return (addr & htonl(0xff000000)) == htonl(0x00000000);
+       return (addr == 0);
 }

Boom. arp works, address assignement via dhcp works, it works as
an address on everything patched.

So trying to find the cases where that address range wouldn't work is
on my mind. Clearly 0.0.0.0/32 is special, but...

>
>   - Similarly, the zero host address is used when the proper host 
> address is unknown.
>
>   - Thus combining the zero network and zero host, you get 0.0.0.0 as 
> the IPv4 address.
>
>   - I think it's important to distinguish sending /from/ and sending 
> /to/ the 0.0.0.0 address or network.  (That being said, I don't recall 
> anything that sends /to/ the 0.0.0.0 address.)
>
>   - It's important to distinguish things, like ARP, that use the 0.0.0.0 
> address as part of their payload, which has nothing to do with the L2 
> broadcast addressing.  (I.e. ARP using broadcast Ethernet frames.)
>
>   - To me (and others that I talk to) the zeroth address has a high 
> collision (at least in reused concepts) with subnetting.

The zeroth address is another long standing problem. Since cidr, and
4.2BSD's retirement, zeroth should be a usable address.

>
>   - How does the first and last address within a subnet become special?

Explicit checks in the OS.

>
>   - How does the first and last subnetwork within a network become special?
>
>   - I would be very interested in learning more about how 0.0.0.0, or 
> the zeroth IP was apparently also used as a broadcast address.
>
> But after recent discussions with friends and colleagues, I realized 
> that I can't satisfactorily explain (at least to myself) what the 
> network (or zeroth) address is.  I think I had always taken it for 
> granted that the network and broadcast were to be not used by client 
> devices as they had special meaning to the network.
>
> I can satisfactorily (at least to myself) explain what the broadcast 
> (last) address is and what it's used for.  But the network (or zeroth) 
> address is more difficult.
>
> I know that (older?) BSD network stacks could overload the network and 
> broadcast IPs.  Why was using separate network and broadcast address 
> preferred over the older BSD method of using a single address for both.

Good question. But the issue died with BSD 4.2

>
> Sorry if this has turned into a ramble.  There have been a lot of 
> scattered thoughts that have sort of collided together over the last few 
> months and aggregate around the zeroth / first IP in a subnet, and they 
> all seem related in some way that I can't satisfactorily explain.
>
>> I'm curious if there is a reference on it somewhere?
>
> I too would like to find and read the origination (or references there 
> to).  Please share what you find, or let us know where we will be able 
> to find your work when you're finished.



More information about the Internet-history mailing list