Network 10This article wouldn't be possible without the help of Landon Rodgers and the many fine people of #pdp-10.
I was recently watching Keith Packard’s talk on the “political history” of X, and I took notice that he says he used ITS on “net 10” (or as we know it, 10.0.0.0/8), before it was re-purposed for private addressing. This took me a bit by surprise, because I never knew a world without private addressing. What was net 10 used for? Let’s find out!
ARPANET, IMPs and NCP
Before the Internet, there was ARPANET. The history of ARPANET has been better told by many before, so to keep it brief, it was a network of computer systems for the US military and universities. It kept growing and connecting to other networks, then we have the Internet.
However, the Internet’s protocol (especially as we know it in IPv4 and IPv6) and its corresponding layer 4 protocols postdate ARPANET and the formation of the Internet itself. Instead, another protocol was used for network communications called the Network Control Program, or NCP for short. It provided layer 4 sockets, and had limitations like sockets being unidirectional; you thus had an odd and even port being used for each direction, which is why FTP is like the way it is today.
However, NCP is actually the predecessor for TCP/IP. What was used for addressing on networks before IP? The answer is actually hardware – an Interface Message Processor, which ran the lower layer network software, and connected to the hosts via an 1822 interface and to other kinds of line for connecting to other IMPs. These provide addressing, packet processing, and routing for the host, somewhat reminiscent of current embedded systems handing off network processing to another system. The IMPs were defined from the beginning of ARPANET in the 1960’s.
Internet Protocol, ITS, and 1822L
Of course, the old ARPANET protocols wouldn’t last forever. The birth of the modern Internet was the “flag day” when NCP was shut off and replaced by IP. However, it raises questions of how the transition from NCP to TCP/IP was handled. If you look at 4.2BSD’s /etc/networks file, you can see arpanet is used as network 10, in a list of network prefixes. It’s also worth noting that there is a relatively strict adherence to “traditional” classful networks, where the first few bits indicate the size of the network.
This is a bit weird because we know 10.0.0.0/8 is a private network, yet here, it’s implicated to be public – what gives? One resource that might prove to be further helpful are HOSTS.TXT files. These provide a fascinating glimpse into what the networks of the world looked like at the time; many network stacks would have consumed these directly, as it was what was used before DNS. Looking at the 1983/01/09 version that only had NCP, we can see networks like ARPANET and BBN-RCC being assigned 10 and 3, respectively.
When we look at the IP version of the list from 1983/05/27, things look different. All the networks are addressed by IP, and curiously, it seems there was a scheme to migrate networks from their traditional pre-IP addresses to IP addresses.
For easing the transition, IMPs gained the ability to ability to participate on IP networks with the 1822L version of the IMPs, defined in RFC 802. These work by being sent IP datagrams whole, and still handle tasks like routing that we expect modern hosts with layer 2 protocols like Ethernet to handle.
This transitional IMP and mapping of addresses into the IP address space comes back to the mention of ITS. If you don’t know what ITS was, it was a very strange (debugger as shell, no user passwords, etc.) and innovative (Emacs and bitmapped and multiuser graphics terminals, in the 1970’s!) OS used on PDP-10s, known for its place as the birthplace of hacker culture as we know it at MIT. ITS supported Chaosnet and NCP (used by ARPANET and MILNET), and like most other systems of the era, used IMPs to get onto NCP-using networks. Although ITS was on the decline in the 80’s, it was extended to support IP using those 1822L IMPs. The network address for ITS was set using the traditional two values with matching IMP configuration, and it would appears as 10.x.0.y on IP, where y is the IMP number and x is the host number; explaining Packard’s comment.
The Masked Ball: Our Classless Society (Or: Network Classes, the End of ARPANET, and Private IP Networking)
Classful networking was the scheme used to subdivide the Internet address space, introduced as part of a revision of IP in 1981, part of RFC 791. Handing out an entire 0.0.0.0/8 to organizations on the network before was not sustainable, so classes were used to allocate smaller networks. Many very early IP implementations rely purely on the class of the network to determine the size of its subnet.
However, very early on, you can start noticing “violations” of network classes. Most IP implementations by the mid-1980’s support subnetting outside of traditional classes. Having your entire corporate network on a single subnet once networks grew large enough, especially before the invention of switches, was very impractical. Organizations would then carve their classful allocation into smaller ones (for example, one per office) that can be routed.
It’s helpful to think of classes less as for routing, but for the class of network, in a somewhat meta sense. This is because the Internet really is a meta-network, a network of networks, including networks like ARPANET. Eventually, the de-facto conventions behind classless routing and eventually assignment were defined as RFC 1519 in 1993.
ARPANET was eventually phased out, as systems were moved to other networks like NSFNet (which had picked the TCP/IP protocol suite that ARPANET had migrated to). The hosts file for 1990/05/21 still has ARPANET and a few straggler systems on it, but by 1990/08/02, it disappeared.
Eventually, as computer networks became more widespread beyond being attached to the Internet, there were use cases for IP on private, non-routable networks. To avoid the risk of conflicts with publicly used or available subnets, RFC 1918 was defined, using the then recently freed ARPANET address space under an IANA reassignment.