by Darius Kazemi, June 16 2019

In 2019 I'm reading one RFC a day in chronological order starting from the very first one. More on this project here. There is a table of contents for all my RFC posts.

Sockets, reconsidered

RFC-167 is titled “Socket Conventions Reconsidered” and authored by Abhay Bhushan of MIT Project MAC, Bob Metcalfe of Harvard, and Joel Winett of MIT Lincoln Laboratory. It's dated May 24th, 1971.

The technical content

The problem as laid out in this RFC is that there are two competing considerations for socket numbering as it currently exists:

The authors suggest doing neither of these and instead waiting for an overhaul of the Network Control Program (NCP) protocol.

According to the authors, “The socket number, as it is used in the current NCP Protocol is a small number with a big function.” They say that there is probably going to need to be “a substantially more powerful identification mechanism” in order to provide the kind of features that the Network demands, that can meet both criteria above: able to account for who is using what services, but also able to be processed by less powerful systems.

One of the main issues is that they want socket allocation to be both unique and repeatable: that is, if you connect one of your processes to a process on a remote server via a socket, they would like that socket to at least remain the same for “reconnection on a regular basis”, though they don't say how regular exactly. The authors say that this means socket allocation should be tied to access controls somehow, aka, sockets should be reservable by individual users.

A “bad way” is the naive solution: keep a list of sockets, their assigned users, and how long they have the socket reserved for. An alternative strategy they recommend is partitioning sockets at a host among its network users. So for example, maybe the first time a user connects to a host at UCLA, they are given a range of sockets that are “theirs” to use as they see fit.

Further reading

“A small number with a big function” is a problem that persists in one form or another on the internet to this day. This blog post is a history of the routing protocol BGP but it covers the history of IP address and routing table growth in detail. These days, an IP address plus a socket number acts as what a socket number (which included the site identifier, analogous to a modern IP address) did back in the ARPANET days.

How to follow this blog

You can subscribe to this blog's RSS feed or if you're on a federated ActivityPub social network like Mastodon or Pleroma you can search for the user “@365-rfcs@write.as” and follow it there.

About me

I'm Darius Kazemi. I'm an independent technologist and artist. I do a lot of work on the decentralized web with ActivityPub, including a Node.js reference implementation, an RSS-to-ActivityPub converter, and a fork of Mastodon, called Hometown. You can support my work via my Patreon.