[ih] History of 127/8 as localhost/loopback addresses?

John Gilmore gnu at toad.com
Sat Jan 2 01:38:43 PST 2021


I am in the process of sorting out various ways that the IPv4 unicast
address space was historically constrained to allow fewer than the 2^32
available IP addresses.  One question that came up was how we ended up
with 16,777,216 loopback addresses in IPv4.

History questions:

Was there a host-software-accessible loopback or localhost function in
the ARPANET or in NCP?  How was it invoked?

When TCP/IP was being designed, where did the concept of a loopback
function come from?  How did it merge with the "connect to a port
on the local host, without having to figure out its IP address" function
that 127/8 eventually got used for?

Did Jon Postel or other IP designers have the localhost function in mind
for 127 when he first reserved it back in 1981?  Was 127 used this way
prior to 1986?  Did Jon or others discuss this use prior to then?

Who, if anyone, argued for having more than a single loopback address?
Was there discussion of whether a full Class-A network was needed for
the loopback function?  Why was a Class-C network not used?  Is there an
explanation for why so many addresses were ultimately assigned to that
function?

And, fast-forwarding into the 1990s:  When IPv6 was designed, why was
this design decision revised?  Who made the decision to allocate a
single IPv6 localhost address?  Was that controversial?

Thanks for the memories!

Researching in the first thousand RFC's reveals:

The first mention of any kind of loopback in the RFC series seems to be
in June 1984 in RFC 900.  In that Assigned Numbers RFC, loopback appears
as an Ethernet frame type 0x9000, assigned for Larry Garlick of Xerox.
This refers to a specific kind of packet sent on 10-megabit Ethernet
v2.0 networks to test connectivity among hosts.

In RFC 907 of July 1984, the SATNET Host Access Protocol has a specific
bit assigned as the "Loopback Bit", and also defines a remote loopback
request/response message and function.  (This is for setting a mode
in which ALL traffic is looped from transmit to receive side of an
interface -- not for looping an individual packet or TCP connection.)

In the evolution of IP Multicast from RFC 966 in December 1985 to RFC
988 in July 1986, a new parameter specified whether multicast packets
would or would not be "looped-back" to their sending host.

In September 1981, in RFC 790, Jon Postel first indicated that IP
network number 127 was "reserved", without explicitly stating for what.
This was repeated in all the Assigned Numbers RFCs through RFC 960
(December 1985); then in RFC 990 (November 1986), Jon and Joyce Reynolds
assigned it for loopback, stating that:

  The class A network number 127 is assigned the "loopback"
  function, that is, a datagram sent by a higher level protocol
  to a network 127 address should loop back inside the host.  No
  datagram "sent" to a network 127 address should ever appear on
  any network anywhere.

By the Host Requirements RFC 1122 in October 1989, the spec was
restated to:

  { 127, <any> }

  Internal host loopback address.  Addresses of this form
  MUST NOT appear outside a host.

The first mention of the specific address "127.0.0.1" in RFCs is in May
1993 in RFC 1459 (as an example dotted decimal address that one might
use in the IRC protocol).  The RFCs contain no explanation of how the
whole specified range of 16 million loopback addresses was narrowed in
many peoples' minds to the single "localhost" address 127.0.0.1.
("Localhost" does not appear in the first thousand RFC's.)

	John


More information about the Internet-history mailing list