We’re approaching the fifth anniversary of the World IPv6 Launch Day. This is reflects the day in which the Internet had a world-wide validation of the IPv6 protocol. IPv6 supports additional hosts, compared with the exhausted IPv4 address space. What led to this IP history, and why are we stuck with a 4 octet address space?
IP history is closely tied to the development of the ARPAnet. These experiments developed a resilient packet-switched network. This would forward messages and voice traffic for the military. There have been many versions of the Transmission Control Protocol/Internet Protocol (TCP/IP). Indeed it was only after January 1978 that the split of functions occurred. Joint development of TCP and IP led to some cross over in the protocols.
ARPAnet: The start of IP History
The original ARPAnet had a three octet address space, the first octet identifies an IMP (Interface Message Processor), the precursor of today’s Internet routers. The remaining ones identified a host connected to the IMP.
The original internet configuration would add an extra octet to identify the network. Network 10 defined the ARPAnet. This is why you see this as an example in so many IP diagrams and documents. The 10.0.0.0 address space is now part of the RFC1918 private address space, so we can all run our own ARPAnet now.
That was the original idea. Investigating other options happened. This is a basic tenet of good design.
When you see a good move, look for a better one” – Emanuel Lasker
So what else was looked at along the way?
One idea was related to using addresses in a similar fashion to telephone numbers. Hosts would be numbered in networks, and these networks could be numbered by prepending “country codes”. An initial implementation of this was IEN2. The Internet Experiment Notes (IEN) are documents that define the early standards of both ARPAnet and the Internet.
IEN2: Comments on Internet Protocol and TCP or:
Splitting TCP and IP
IP history could have taken a different turn at this point. IEN2 is the first document that properly documents the split of the TCP and IP layers, with a good description of why each needs elements that are separate. But the magic is in the addressing.
There is only a destination address, (no source address in the IP header), and this is extensible, with no apparent limit on size. Indeed, it appears that address would rotate through the space at each hop, which means that it has local significance only.
This would have been a nightmare to diagnose, as packet traces would reflect different IP addresses at each hop. The source address uses a similar encoding, but carried in the TCP header. (TCP needs to know both talkers in the conversation to ensure communication).
IEN5: Specification of Internet Transmission Control Protocol or:
Codifying the 24 bit-address
It is important to remember that a lot of the development went on in parallel. Conducting experiments led to lots of different ideas along the way. Validating what happened from the paperwork is sometimes an effort in futility. Especially when protocols had a single version number, covering both IP and TCP. In this document, this is coded as TCPv2.
This has an 8 bit network identifier and 24 bit host identifier for both source and destination address. This is actually the standard Class A notation used in the Internet for a long time before class-less addressing became much more common. This also has almost a fully fledged TCP implementation as well, with state diagrams and discussions of sequence number window collisions.
IEN28: Draft Internetwork Protocol Specification Version 2 or:
The Address Space that Never Was
This could have provided an alternate IP history. This version has an interesting address format. A variable length for both source and destination, each encoded with a 4 bit value (this provides for up to 15 octets of address). The first octet meant to encode the network, giving 256 networks. The remaining octets provided a uniquely addressable end-point. (A host could have more than one endpoint on a network. It could represent devices/systems behind it as separate IP addresses). Remember, this was at a time when the Internet was seen to interconnect disparate systems via gateways.
IPv2 could theoretically have networks with upto 5.192×1033 hosts on 256 networks, giving 1.329×1036 hosts. (And an implied assumption that you’ll never need more than 256 networks). This is just a few orders of magnitude smaller than the IPv6 address space (3.402×1038), as we’re just missing the 16th octet.
The encoding of the address is more akin to a telephone number, which would have different lengths in different regions of the globe. This would, for example, allow a gateway to use address information beyond the host length to denote a device on the other side of the gateway, as in a telephone number not only allowing you to dial an office, but also a specific extension within it.
Choosing this header format would have provided challenges. The main one of these would be the coding to breakout each of the addresses. This probably was the reason why although codified in the standard, there may not have been many implementations. This is a shame, as despite the challenges of variable length addresses, we may never have needed to have a migration to IPv6 until sometime in the future. (The length of the address could be extended by expanding the field supporting the length of the address.)
IEN41: Internet Protocol Specification (IPv4) or:
The Move to Standardise
IEN40 and IEN41 codified TCPv4 and IPv4 in June 1978. Three months later, revisions in IEN54 and IEN55 and again in February 1979 as IEN80 and IEN81 help stabilise the protocol. IEN88 documents the User Datagram Protocol (UDP) in May 1979. IEN111 and IEN112 in August 1979 provide the basis on which other protocols start to develop. This really marks the point of the stabilisation of the TCP and IP protocols, having matured for nearly a year.
Today is not IP History
Things could have been a lot different, but coding inertia and parallel development of IP and TCP meant IEN28 and the variable length addressing never came to pass. The start of an Internet with a 4 octet address space, and an assumption that the first octet will encode a network. This started the spread of the Internet. The start of the use of IP as the glue to link all connected devices for decades to come.
“it is very possible that … one machine would suffice to solve all the problems that are demanded of it from the whole country.” – Copeland, Jack (2006). Colossus: The Secrets of Bletchley Park’s Codebreaking Computers. Oxford University Press. p.109
Today the rise of mobile devices, and the Internet of Things is driving the need to connect more devices than ever. The assumption that the first octet only encodes the network has long since disappeared. Today, the IPv4 space has been exhausted.
So 33 years after 1979, we had the World IPv6 Launch [6 June 2012]. IPv6 provides more IP address space, with room to grow. It’s been almost five years since the global event. Where are we with IPv6 now? What is the IP future?
You might also want to read about the NCP address crunch, an interpretation of the NCP exhaustion prior to IPv4 implementation.