365 RFCs

Commenting on one RFC a day in honor of the 50th anniversary of the first RFC.

by Darius Kazemi, Jan 27 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.

Adding Raytheon

RFC-27 is a revision of RFCs 10, 16, and 24, which build on RFC-3. All of these documents attempt to define the scope of an RFC. This one was authored by Steve Crocker on Dec 9th, 1969.

The technical content

This document is identical to RFC-24, except for a few typo corrections and the addition of Thomas O'Sullivan of Raytheon.

Analysis

Raytheon is an enormous U.S. defense contractor based in the Boston area. It was founded in 1922 by Laurence K. Marshall and Vannevar Bush. They started as an electronic parts manufacturer for household appliances. By World War II it turned out that their expertise was highly relevant to the manufacture of radar systems and from that point on, warfare was their main business. While they aren't particularly known for their advances in computing, it makes perfect sense that they would have been included in the early ARPANET discussions.

Further reading

If you are interested in computer history you probably know Bush from his article “As We May Think”, published in The Atlantic in the waning days of World War II. In that famous article, he laid out many basic computing ideas in front of a general audience for the first time, including concepts similar to hypertext and the desktop computer. He was an enormous influence on many of the people working on ARPANET, including Doug Engelbart and his lab at SRI.

Thomas O'Sullivan died in January 2007. I mention this mostly because his obituary references a scholarship fund in his name at Science Club for Girls, a really great educational nonprofit in the Boston area that I've had the pleasure of working with. This is me encouraging you to give them some money because hey, it would probably please O'Sullivan. It would certainly please me.

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Jan 26 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.

No RFC

RFC-26, like RFC-14, was never issued.

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Jan 25 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.

RFC-25 is by Steve Crocker, dated 30 October 1969, the day after the first message was sent over ARPANET. It's titled “No High Link Numbers”.

The technical content

Here is the full content of this short RFC:

Because it may be desirable to reserve one or more link numbers for instrumentation purposes, and because 256 link numbers are many more than are needed, we suggest that no link number over 63 be used. At UCLA, we will implement our tables to take advantage of this limitation. We also note that 32 may be even more realistic, but 64 is certainly sufficient.

This is UCLA suggesting that people avoid reserving links 64 through 255 because who knows what future usage of the network might be and we might as well leave those open for future uses.

Analysis

Note that this is a suggestion, not a specification! It's an example of the kind of early role RFCs played as a discussion mailing list before email was invented.

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Jan 24 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.

Adding MITRE

RFC-24 is a revision of RFCs 10 and 16, which build on RFC-3. All of these documents attempt to define the scope of an RFC. This one was authored by Steve Crocker on Nov 21, 1969, about a month after the first message was sent over the ARPANET.

The technical content

Here we finally lose the “seems to consist” language that amused me so much in previous RFCs. This is because they finally drop the idea of listing people affiliated with the Network Working Group. It now “consists of interested people from existing or potential ARPA network sites.”

The only other change is that Kim Fry of MITRE.

Analysis

Mitre was and continues to be a kind of think tank of think tanks. It's similar in a lot of ways to RAND. It is closely aligned with the funding apparatus of the US Department of Defense and was a key player in the US Air Force's SAGE project, which is the closest thing to a spiritual predecessor of ARPANET I could name and is the source of the “computer-filled war room leads to nuclear holocaust” image that's been prevalent in popular culture since the Cold War. Remember SDC? They originated as RAND's internal unit that worked on SAGE. That unit was spun out into SDC, which then did some of the earliest non-packet-switched network computing implementations.

Further reading

I happened across this article about MITRE's attempt to weaponize Chomskyan linguistics circa 1963!

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Jan 23 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.

The Computer History Museum has just this month made the scans of RFCs 1 through 9 available! The listing is here, and here is a direct link to the PDF.

While the RFC Editor site has scans of many early RFCs, they do not host scans of numbers 1 through 7, and this is the first I'm aware of these being made available online for public viewing.

These first nine RFCs number 98 scanned pages!

The missing cover page of RFC-2

The canonical version of RFC-2 states that the original cover page was missing and so they didn't know its title. There is an erratum filed on it from years later pointing out that it was named in RFC-3 so we do actually know that it was called “Host Software”. Well everyone, let me present to you.... THE MISSING COVER PAGE OF RFC-2:

A boring cover page that says "Host Software" and is formatted like every other RFC cover page of the era.

Exciting.

Typewriter art and hand diagrams

In my comments on RFC-1 I wondered if the typewriter art was an artifact of the transcription made in the 90s. Turns out, it was. Here is the normative version you can find online:

ASCII art blocks

Here is the original, along with a few other diagrams:

Some almost biological looking network diagrams.

There's something beautiful and almost biological about these drawings, presumably made by Steve Crocker. It looks like the kind of thing you see on the whiteboards at School for Poetic Computation!

This doesn't mean the early RFCs lack for typewriter art! Check out the art in RFC-2:

Some blocks and lines drawn with typewriter characters.

This is almost faithfully reproduced in the ASCII transcription from the 90s, but the original version is blockier and it's also got pen drawings overlaid on top to make the lines seem more like lines.

An interesting development for RFC-8

The hand written version of RFC-8 matches the version hosted on RFC Editor, with one important addition: there is also a full transcription provided by ARC! This is a contemporary transcription of a document that is really hard to read and would be a great source for an official, normative transcription of RFC-8 for the series (this is one of the only hand written RFCs that was not transcribed to machine readable text by the late 1990s).

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Jan 23 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.

Multiple messages

RFC-23 is dated October 16, 1969 and authored by George Gregg of UCSB.

Technical content

This RFC cautions that a HOST must have code in place to process multiple control messages at once. The idea being that when the control link is awaiting its RFNM (ready for next message) signal from the IMP, other control messages could be accumulating. As such, we can't assume one control message at a time being sent to a HOST. We need to have code that processes control messages until there are no more left to process.

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Jan 22 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.

Revisions

RFC-22 is an update to RFC-11. It is authored by Vint Cerf and dated October 17, 1969. Twelve days before the first message will be sent over the ARPANET!

Technical content

There is a new control message format that's been defined by UCLA. It does not conform to ASCII, as it's a control message and not plain text. Hooray.

There are now 9 control messages that can be sent over a control link (link 0 or 1, depending on the nature of the message, I think):

  • establish primary connection on link X
  • establish auxiliary connection on link Y related to link X (if you'll recall, this means that link X sends commands and link Y sends files and data and things)
  • acknowledge that we got your primary connection establishment message and are complying
  • acknowledge that we got your auxiliary connection establishment message and are complying
  • acknowledge that we got your primary connection establishment message and are NOT complying
  • acknowledge that we got your auxiliary connection establishment message and are NOT complying
  • message that says “please stop spamming link N, you are ruining things for everyone”
  • message warning you that we are about to close a link
  • message that says “ok you can go back to spamming link N”

Then the specific packing of bits (the header format) is laid out.

Analysis

In RFC-11, text commands (presumably in ASCII) like “OPENAUX” were supposed to be sent to say things like “open an auxiliary connection”. Now we just send some packed data with a special numerical code. This means we send far less data over the network in order to do basic things like establish connections. This new encoding is like an order of magnitude more efficient in terms of the number of bytes being sent around.

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Jan 21 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.

Meeting minutes

RFC-21 is meeting minutes from a Network Working Group meeting held on October 10, 1969. The RFC itself is dated October 17, 1969. Vint Cerf is once again listed as the author.

Technical content

The conversation is divided into three parts.

In part 1, they discuss revisions to BBN Report No. 1822. I am still unable to find a 1969 version of this report. I can only find a January 1976 revision that is significantly changed (the page numbers don't match up at all, for starters). The group discusses what to do if the IMP network is at maximum capacity, how to take advantage of some IMP quirks to aid in measuring ARPANET traffic, and reminding people that some of the numbers in the BBN document are in octcal (base 8) so when they see “type 10” that is really “type 8”.

In part 2 they tell us to disregard Déloche's RFC-11, and that new information will be coming in RFC-22. This is good. I didn't like RFC-11 very much.

In part 3 they tell us to keep an eye out for RFC-23, which will concern sending control messages over links.

Analysis

The meeting was attended by people from SDC, UCSB, and UCLA. Listed in the attendance list under UCLA is Jon Postel. I believe this is the first reference to Postel in an RFC. I mentioned this in my RFC-8 post but it bears repeating: Postel was the editor of the RFC series from almost the very beginning of the series until his untimely death in 1998. (He was not editor at this point because it was not a “series” or anything yet.) Postel was also in charge of top level domain assignment and IP addresses before ICANN was established right around the time of his death. For many years Postel essentially was the internet. There's a lot of information about him at USC's Postel Center and RFC-2468 is a remembrance of Postel by Vint Cerf... the author of this very RFC.

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Jan 20 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.

ASCII

RFC-20 is another Vint Cerf RFC, dated October 16, 1969. This is 13 days before the first message will be sent over the ARPANET.

I've been waiting for this RFC. I love this RFC.

Technical content

This requires a bit of background before I get into the RFC itself.

Character encoding

This RFC is about character encoding, so, what's character encoding?

Well, computers store numbers. That's all they do. Everything on a computer, when you drill down deep enough, is a number stored in memory somewhere. And yet we use computers to deal with written text all the time. This means that somewhere in the computer there has to be an understanding that the letter “A” is this number, “q” is that number, and so on. That's all a “character encoding” is.

The problem with ARPANET is that there was no guarantee that the letter “A” on one computer would be represented by the same number on another computer. So without some kind of agreed upon standard, I could be sending “hello” to your computer, but your computer would read it as “ifmmp”.

ASCII is the agreed-upon standard. It is the “American Standard Code for Information Interchange”, and was formalized as an information encoding standard in 1963 (although first proposed in 1961). The reason for ASCII goes back to Morse Code and telegraphs. Morse Code only allowed for uppercase A through Z and the numbers 0 through 9. There wasn't even a “period” allowed, which is why old-timey telegraph messages look like this:

THIS IS THE FIRST SENTENCE STOP THIS IS THE SECOND SENTENCE STOP

People wanted lowercase letters. They wanted punctuation. This led to many, many newer standards. Telegraph standards led to teletype standards which ended up getting used by computers (since teletype was a primary input/output device for computers before monitors and keyboards).

By 1963 there were over 60 different encodings used by computers. ASCII was developed to provide a standard for this. President Johnson signed a memorandum saying US federal computers needed to use ASCII to communicate in 1968. Since ARPA was a military network, ASCII was the only real choice for the job. From the memorandum:

All computers and related equipment configurations brought into the Federal Government inventory on and after July 1, 1969, must have the capability to use the Standard Code for Information Interchange and the formats prescribed by the magnetic tape and paper tape standards when these media are used.

The original content

This document is actually just a single paragraph written by Cerf. The remainder of the document is an attachment of what is presumably the official ASCII standard.

The part that Cerf writes explains that they are using the 7-bit ASCII encoding, meaning an ASCII character on an 8-bit computer looks like this in binary:

0010 0000

That first bit on the far left is always 0 (although if you look at the PDF scan, there is a margin note that says it's always 1?? either way the number is ignored). We have to store the number in 8 bits of memory because it's an 8-bit computer, meaning the smallest amount of data we can work with is 8 binary bits. So the first '0' is just cruft. We only care about the remaining 7 bits on the right. This lets us represent 128 different characters because there are 128 different combination of 0's and 1's you can make with 7 bits.

Importantly, different computers have to follow this standard for what everything means except for special characters such as the end-of-line character. (More on this in the “Analysis” section.)

The remainder of the RFC is the attached ASCII standard.

The attached standard

It's worth reading the scan of the document rather than the transcribed document that I link above, because the table is much clearer:

An image of the table

This table of values that says what number corresponds to what character. It's a little confusing at first because it doesn't just tell you the number straight away — in the interest of saving space and having it all printed out in a single sheet, it's a table where the columns represent the value of the first 3 binary bits and the rows are the last 4 binary bits. So the column labeled “100” and the row labeled “0110” give you 100 0110, which is the encoding for the letter capital “F”.

Interestingly, there is a pronunciation guide here! The anonymous government author takes care to note that ASCII is pronounced “AS-key” and USASCII as “you-SAS-key” (in the document itself an apostrophe is used to denote syllabic emphasis; I prefer caps).

Analysis

The choice of this encoding has made ASCII-compatible standards the language that computers use to communicate to this day.

Even casual internet users have probably encountered a URL with “%20” in it where there logically ought to be a space character. If we look at this RFC we see this:

   Column/Row  Symbol      Name

   2/0         SP          Space (Normally Non-Printing)

Hey would you look at that! Column 2, row 0 (2,0; 20!) is what stands for “space”. When you see that “%20”, it's because of this RFC, which exists because of some bureaucratic decisions made in the 1950s and 1960s.

Remember that whole thing about a HOST providing custom definitions for stuff like its end-of-line character? If you are a computer programmer you've almost certainly hated having to deal with different end-of-line encodings in different operating systems and documents. Well, by my analysis you are pretty much looking at the source of your problems when you read this RFC. My condolences.

Further reading

The Wikipedia article for ASCII is pretty good. This Engineering and Technology History Wiki is better.

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Jan 19 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.

Some suggestions

RFC-19 is by John E. Kreznar of Systems Development Corporation, dated Oct 9, 1969.

This RFC is two suggestions from Kreznar on how to reduce network congestion, somewhat in the spirit of RFC-18.

Technical content

His first suggestion seems to be to change how IMPs work so they consider the local state of the HOST machines when sending messages. So like if user A and B are logged into a HOST machine and the IMP has messages for them both, but user B is the one who is actively being addressed by the computer's memory, it would make sense to send the message for B first while user B's processes are in memory, then the message for A which the HOST machine could swap user A into its active memory. If the messages came in the reverse order there would be extra swapping, slowing down the computing experience for the users.

This seems like a really bad idea to me, since it would require the IMPs to have knowledge of the internal state of the HOST machines to some degree. That said, the internet has existed for literally my entire life and these folks were building it for the first time so... I'll let it slide.

The second suggestion is that maybe for transfer of large files between two HOSTs, the HOST could “lock” the program that it's running for the duration of the file transfer. Basically a way for both computers to say “we are going to prioritize this file transfer over anything else happening on the computer right now so we can quickly transfer the file between the two of us”. On a timeshare machine this would result in users who aren't involved in the file transfer having to wait for the transfer to complete before they can continue using the computer. That seems... also bad.

Analysis

Both of these ideas aren't great. But again, no internet exists yet so I can forgive bad ideas! The whole point of RFCs at this early stage is to get as many ideas out there as quickly as possible. And it seems to be working.

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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

Enter your email to subscribe to updates.