365 RFCs

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

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

Edge cases

RFC-57 is called “Thoughts and Reflections on NWG/RFC #54” and is authored by Mike Kraley and John Newkirk of Harvard University. It's dated June 19th, 1970.

The technical content

As the title suggests, this document is related to RFC-54, although RFC-48 also plays a big role.

To jog your memory if you've been reading along with this blog, RFC-54 is the first ever submission of a formal specification as an RFC, and the authors of this RFC were co-authors on that document. RFC-54 was an attempt at a truly-really-definitely-official host-host protocol, which is the basic language that computers on the network use to talk to each other. This document is kind of an addendum to that host-host protocol. It contains ideas that arose during the writing of the protocol but were untested or under-discussed so they felt they should leave it out of the official protocol and instead discuss it in this separate document.

First, the authors distinguish between a “real error” and an “overflow condition”. Basically a real error is when there is an actual bug in the software or hardware that causes a problem. The idea there is someone messed up in their implementation and they need to fix it. An “overflow condition” is when, for example, there's a traffic jam on the network and messages can't be sent. Nobody did anything wrong here. There were simply too many people using the ARPANET at one time.

Specifically, in RFC-54 an overflow condition can trigger an error message that looks like a real error! So the programmer who gets the error message might waste a bunch of time looking for bugs in their code when really the problem was just congestion on the network.

They go on to specify a bunch of error types and error metadata that would make error messages far more verbose and useful for debugging.

The other section of the document proposes a solution for when a remote computer crashes. It needs a way to come back online and say, “hey, I had crashed but I'm back now, please don't forget about me.” These are provided through a proposed pair of RESET and RESET REPLY messages that broadcast out to the network when coming back from a crash or manual reset.

Analysis

Both of these proposals seem reasonable. If I were reading this RFC in June 1970 I would give it my vote of approval.

I had to laugh a bit at this paragraph:

Overflow does not require serious consideration if it is a significantly rare occurrence. We do not believe this will be the case, and we further believe that its absence will be an unnecessary restriction upon the user.

What an amazing double negative! My translation: “None of this will matter if traffic jams are going to be rare occurrences on the network, but we are pretty certain that there are going to be a ton of traffic jams so please listen to us.”

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, Feb 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.

A bit of a hit-and-run

RFC-56 is by Ed Belove and Dave Black of Harvard University, and Bob Flegel and Lamar G. Farquar of University of Utah. It's dated June 1970 (no more specific date than that). It's titled “Third Level Protocol: Logger Protocol”.

The technical content

This is outlining something called a “logger protocol” but it doesn't seem to have anything to do with “logging” in the modern sense of keeping automated statistics and notes on what is happening with a computer program.

Instead this is a way “to allow a user teletype to communicate with a foreign monitor”. I assume this is using “monitor” in its operating systems sense from this era: a monitor is a piece of software deep in the core of an operating system that keeps an eye out (“monitors”) for what programs are doing.

It proposes, among other things:

  • the network should adopt USASCII for communication for all remote connections
  • the previously-specified interrupt (<INT>) command should be used as a “panic button” for breaking out of programs (what you'd use ctrl-c for in many modern consoles)
    • every local host (or local teletype?) would choose its own seldom-used character that would then be mapped to the <INT>
    • due to an edge case involving special character collisions, you'd have to custom map characters on a foreign-host by foreign-host basis

Analysis

This is an odd RFC. It seems out of touch with the rest of the series in tone, style, jargon, and also content. Broadly, and ask risk of sounding harsh, this RFC seems entirely irrelevant to the discourse in the NWG at the moment of publication. What this RFC is proposing is adding an extra layer of complexity on top of the Host-Host protocol in order to accomplish precisely what, to my reading, the Host-Host protocol was designed for. The only thing it really would do in addition to the base protocol is make the whole thing more restrictive in terms of local implementations, and would in fact require local implementations to know ahead of time certain information about their remote host (such as what its 'break' character is). This may have made some amount of sense a year prior when there was no consensus, but this is coming right after 3 months of painstaking consensus-building.

The fact that these authors would never author another RFC does seem to corroborate that this was a bit of a hit-and-run.

(Another David Black would co-author RFC 2474 in 1998 but it seems from his online resume that he is not the same David Black who was at Harvard in 1970.)

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, Feb 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.

Squishy amoebas

RFC-55 is by Newkirk, Kraley, Postel, and Crocker. This is the same set of authors as RFC-54 but in reverse order; I assume they are using academic convention and as such it's the Harvard group that is the primary author of this RFC. But maybe not! I could easily imagine the group just agreeing to swap author positions between the two RFCs for the sake of equity. It's dated June 19th, 1970 and titled “A Prototypical Implementation of the NCP”.

The technical content

This document is an example implementation of a Network Control Program. Basically it's the program on the HOST machine that negotiates between the network and the operating system.

This document is emphatically NOT a specification.

There is, of course, absolutely no requirement to implement anything which is contained in this document. The only rigid rules which an NCP must conform to are stated in NWG/RFC#54. This description is intended only as an example, not as a model.

This is because the authors can't know what the internals of every single computer that attempts to connect to ARPANET will look like. But they feel it is a good idea to at least provide an example that people could look to. (And they are right.)

They define a set of basic assumptions about the computer they are describing in this paper. This theoretical computer is a time-shared computer with multiple users. Individual programs are run by specific users. Programs have their own internal “ports” for data to flow in and out (for example, a port might connect a program to a file in memory so it can write to that file). A port can have a socket attached to it; this socket is the port's interface to the network.

Next they define a set of pseudocode type commands for the NCP. Things like CONNECT my socket to a foreign socket, TRANSMIT data over the connection, CLOSE the connection. These are defined in a fairly detailed way, with arguments to the commands defined and various status codes enumerated.

Then they provide a kind of block-level system understanding (with accompanying diagram) of the NCP. There's an input buffer and an output buffer as described at length in the intro to RFC-54. There's a sub-program that interprets inputs from the network and shunts them to the right place (this is an error so do xyz with it, this is a message for the user so do abc with it). There's another sub-program that prioritizes different messages to be sent as output to the network (control messages take priority over regular data). And the system call interpreter is a sub-program that interprets input from the local user and does various things with it.

Next they provide descriptions of the data tables for the program, outlining how important data about the network is stored by the NCP. This includes records of which links are free to use, which HOSTs are online, which connections are active, etc. You may recall from my RFC-44 post that Edgar Codd of IBM was in the process of inventing the modern relational database at this time. This kind of thing in a modern system would be stored in a database, but here it just lives in a series of data structures (a small difference but worth noting for historical context).

Analysis

Of note is a note in the document that says “[s]quishy amoeba-like objects” (!!!) in the diagram represent component programs. The amoeba-like objects were transcribed as boxes in the RFC transcription process, but here are my photos of the two accompanying diagrams for the RFC. These are from my visit to the archives of the Computer History Museum.

the flow chart is full of amoeba-looking blobs instead of rectangles

the flow chart is full of amoeba-looking blobs instead of rectangles

I've been fascinated by the biological nature of many of these early internet drawings. I was almost wondering if I was projecting my interpretations onto the drawings but right here in the document the original authors claim the figures are “squishy” and “amoeba-like”! I assume this is to show that these programs have indefinite conceptual boundaries, whereas the queues are a well-defined data structure and as such get a well-defined shape.

I've also noticed that some time in the past maybe ten RFCs, the writing convention has changed and what was once a HOST (all caps) is now known as a Host (title case). I will probably use Host from here on to keep parity with the convention for the documents.

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, Feb 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.

A proffering

RFC-54 has a whopping four authors. To date we've seen a maximum of two listed on one RFC. They are: Steve Crocker, Jon Postel, and two newcomers to the series, John Newkirk and Mike Kraley of Harvard. Recall that Harvard was added to the distribution list in RFC-52. This is dated June 18, 1970 and titled “An Official Protocol Proffering” (say that five times fast).

The technical content

This is the promised first-ever attempt at an official protocol being published as an RFC. Per the rules laid out in RFC-53, they give a deadline for comment of July 13th 1970, a little less than a month after the date of this RFC (so probably about 3 full weeks for people to respond once they've received this RFC in the mail).

The first section is an overview and defense of the concepts in the document.

They have decided to single out “only network-wide issues” for an official standard that people will be forced to adopt. They still want to let everything on the HOST side be as open to interpretation as possible. As long as you speak the lingua franca of the ARPANET in public, the ARPANET doesn't care what language you use at home.

In the course of designing this current protocol, we have come to understand that flow control is more complex than we imagined.

By “flow control” they mean controlling network traffic so it doesn't get backed up. I was wondering why they seemed to assume up to this point that it would be a trivial solution; of course I am reading these documents with literally half a century of hindsight. Now we finally see them bump into these problems.

The basic proposal is that when a HOST A wants to send data to HOST B, it is up to B to maintain a memory buffer and let A know how much buffer space remains. And A is supposed to respect that. A physical analogy: suppose you want to ship 1000 crates of goods to a warehouse, but they have a limited number of storage bays. So you say “I want to send you 1000 crates of goods” and they reply “we only have room for 50 crates today”, and then you decide whether to send them 50 crates or just cancel sending entirely because it's not worth it to you.

The authors claim that this algorithm simplifies some of the existing designs for flow control, so there will be fewer commands over the network to keep track of. They would like to keep this initial version of flow control as simple as possible, even at the cost of being probably too conservative in how much data is sent over the network. They are open to future protocols that are more complex but I get the sense that they just want this thing to ship, you know?

They also propose two meetings, one at UCLA and one at Harvard, for people to attend with any questions they have about the protocol. They specify that they want at most one programmer from each institution to attend.

The second section is more of a technical specification.

First they define a “connection” as “a simplex communication path [...] between two processes”. In other words, a connection is a one-way flow of data between two different computer programs over the network.

The main purpose of this protocol is to establish how connections are created, how flow control is to work in an open connection, and how they are terminated.

The way a connection is opened is through two “sockets”. A socket has a unique ID known throughout the network and corresponds to a particular program running on a particular HOST. You open a connection saying “I want this socket to connect to that socket”, which is another way of saying “I want this program on my computer to connect to that program on your computer.” (A close analogue to a socket today would be a combination of an IP address and a port number.)

Every connection gets its own link. This is in contrast to earlier proposals of “multiplexing systems” (like RFC-38) where multiple connections could share the same link. (Maybe you recall from my RFC-11 post that multiplexing is when you combine one or more signals in such a way that you can send them over the same communication channel but detangle them from one another on receipt.)

When a socket is in use it is reserved. Basically only one program can't talk to multiple other programs on the network at the same time. Connections and their attendant sockets are one-to-one.

The final section lays out some more general thoughts.

They identify three areas where future protocols might improve on this one: better flow control, error handling, and what to do when a computer is only part-time connected to the network.

They “suggest that hosts come onto the network gingerly.” Specifically they recommend that a HOST talk to its own sockets first as a test mechanism; then it should talk to a HOST that is known to be working well; then it can try talking to all HOSTs. The folks at UCLA offer to be the test case for anyone who wants it.

Apparently local sites have already been using the IMP as a kind of local router! “For example, Harvard is connecting its PDP-1 to its PDP-10 via an IMP”. That's pretty cool. They beseech people doing this to use caution so as not to like, bring down the entire ARPANET by accident.

Analysis

I suspect one reason there are four authors on this is to both have a lot of eyes look at this first official specification attempt, and also to show that two very different institutions (UCLA and Harvard) are on board with it. You know, for once it's not just those zany kids Crocker and Postel at UCLA coming up with this stuff!

One question I have is: how are sockets “known throughout the network”? Partly it's by convention. Even numbered sockets are assumed to be for receiving data; odd numbered sockets are assumed to be for sending data. But beyond that I'm not sure how everyone is supposed to know about everyone else's socket IDs.

Everything about this particular protocol proposal screams “simple” to me. It's relatively easy to implement. It's not maximally efficient but it gets the job done. I like it a lot. It's frankly the first proposal I've seen here that I believe I would not have pushed back on had I been one of these original NWG members.

I sort of assumed that this kind of thing would be literally the first thing we'd see in like RFC-1, but over the past 14 months of RFCs, we have seen proposals of medium complexity (like the original HOST-HOST protocol) all the way up to extremely high complexity (DEL, NIL).

It took them more than a year to arrive at something simple!

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, Feb 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.

Making things official

RFC-53 is by Steve Crocker, titled “An Official Protocol Mechanism”, and dated June 9th, 1970.

The technical content

This document sets up some rules for how the “official” Host-Host protocol will be distributed. These rules emerged from conversations at the Spring Joint Computer Conference the month prior in Atlantic City.

Protocol documents will live at the Network Information Center at the Stanford Research Institute. Proposals for and changes to the protocol will be distributed as RFCs. Feedback is solicited for all proposals and changes, but there will be a cutoff date indicated on the documents. If there is substantial acceptance by the community, the proposal will be sent to ARPA for final approval or disapproval. In the case of substantial criticism, it's considered a dead proposal or change.

If ARPA approves the protocol or change, the document is added to the NIC at SRI.

Analysis

This is the first inkling of RFCs being an official source of specifications and standards, and the first attempt to lay out a process more formal than “we'll all discuss things together, please be open with your thoughts.”

Further reading

The SRI NIC would eventually become the body that assigned domain names and IP addresses, led by Elizabeth “Jake” Feinler for many years. Here is a brief overview of its role, and here is a much meatier paper written by Feinler on its history.

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, Feb 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.

More universities

RFC-52 is titled “Updated Distribution List”, and is authored by Jon Postel and Steve Crocker of UCLA. The date is July 1st, 1970, though I think that is wrong (see below).

The technical content

This adds the following institutions to the RFC distribution list:

  • the MERIT Computer Network, a program coordinated between several Michigan universities
  • Harvard University
  • University of Illinois
  • Case University (it has only recently become “Case Western” and was probably better known to this group at the time by its pre-merger name, Case Institute of Technology)

Analysis

Several individuals are shuffled around and the contact of some of the computer scientists and engineers is replaced with the contact of their administrative assistants. I think this indicates that their hands were very full with this and other projects.

If you've been paying attention to the dates, there was a flurry of RFCs in March and April, and one single RFC in May! I think this is due to maybe burnout or just everyone going into heads-down working mode after the Spring Joint Computer Conference at the beginning of May.

The RFC is dated July 1st 1970 but I think its true date is June 1st 1970. My main reason is the next half dozen RFCs are from June, and that I've spotted errors like this with dates elsewhere in the early RFC series.

Further reading

Here is a history of the MERIT network (PDF), provided by the institution itself.

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, Feb 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.

NIL

RFC-51 (PDF link!) only exists in the official archive in its scanned form. It's titled “Proposal for a Network Interchange Language” and is authored by Michel Elie, dated May 4th 1970.

The technical content

This paper outlines the Network Interchange Language. Spoilers: like the Decode/Encode Language, it was never implemented. It is an alternative proposal to Crocker's Network Control Program, and in fact is wider in scope than DEL was.

NIL is supposed to be both the network's interface with the operating system and a high-level representation of things “to express the front end part of an interactive system”. DEL was, if my reading is correct, a front end / interactive layer that could be layered on top of something like NCP. NIL aims to do what NCP and DEL combined would do.

I am mostly skipping describing the technical details of this paper, for reasons outlined in the next section.

Analysis

I will readily admit that I'm out of my depth on this RFC. It's highly abstract and mathematical. I imagine its complexity is among the reasons that it was never implemented by the ARPANET teams!

The document oscillates between high level concepts and low-level minutiae (lists of specific control operations) but never provides a concrete example to the reader. Compare this to DEL as described in RFC-5, which provides plenty of sample code. DEL just seemed a lot more concrete and understandable than NIL. While there is not much writing on either of the two systems, DEL has been written about more often. I believe this is because it's more understandable as a concept.

There is an interesting use of “front end” in this paper, referring to the client-side interactive elements. I didn't know this term was this old.

Further reading

In the introduction, Elie says the idea for NIL derives from something called UNCOL. UNCOL was proposed in 1958 and never implemented. It was meant to be an intermediate language for compiler compatibility. Basically the idea is to make it so that you can compile programs written in many programming languages on many different computer hardware architectures. I know very little about compilers personally, but the LLVM IR is an example of something similar to UNCOL that today's programmers end up dealing with a lot.

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, Feb 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.

Converging on a protocol

RFC-50 is by Harslen and Heafner of RAND, dated April 30th, 1970. It's titled “Comments on the Meyer Proposal” and is mostly further commentary on RFC-46 and RFC-47.

The technical content

The authors generally support everything proposed in RFC-46.

They also agree with Crocker that dynamic reconnection will be necessary at some point in the future.

There's further disagreement on the “should sockets have extra data to distinguish them from other sockets” front. These authors are in favor, Crocker is against.

As I mentioned in my post about RFC-49, Crocker and Meyer both believe that the data sent around the network should be freeform rather than structured. The authors of this RFC disagree, instead siding with Enrico Ancona from Lincoln Lab that there should be typed messages and that ASCII should be enforced.

There are a few other agreements and disagreements listed here too but I won't go into details.

Analysis

This document represents an informal “vote” from RAND on all the contentious issues so far in establishing the new HOST-HOST protocol. It's interesting that while there isn't anything like a formal voting process in place, there does seem to be a kind of ad-hoc voting going on. Or at least “here's my two cents” from all the major players. As Crocker has become more and more a kind of de facto leader of the Network Working Group at large, it seems like it's becoming incumbent upon him to digest all this feedback in time for the Spring Joint Computer Conference happening in a matter of mere 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 a Mozilla Fellow and I do a lot of work on the decentralized web with both ActivityPub and the Dat Project.

by Darius Kazemi, Feb 18 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.

Levels

RFC-49 is by Edwin W. Meyer, Jr. of MIT's Project MAC. It's dated April 25th, 1970 and titled “Conversations with Steve Crocker (UCLA)”.

The technical content

This document is a summary of two telephone conversations between Meyer, Crocker, and Thomas P. Skinner (also of Project MAC).

First off, Meyer explains that Crocker believes dynamic reconnection will eventually be accepted as necessary by everyone, which is consistent with Crocker's assertions in RFC-48. Crocker allowed dynamic reconnection to be temporarily set aside in the interest of cooperation with the other participants.

Next, Meyer talks about the interrupt (INT) command on the network. This was proposed by Meyer in RFC-46, Crocker supported it in RFC-48, and now Meyer is expanding on it a little bit and giving some more rationale for it. The details have already mostly been covered in previous RFCs.

There is some splitting hairs of whether including certain identifiers on sockets would be duplicating unnecessary information or not.

The fundamental design idea is repeated that the Network Control Program (basically, how you encode messages to send to the IMP) needs to send freeform data around. There will be no formal restrictions on character encoding or on message length.

Once again, preferences on how to deal with “word boundaries” (which I described in a little detail in yesterday's article are put forth.

Next we have a horrible name collision, as the document simultaneously refers to RFCs as Request For Comment and Request For Connection. It leads to a “who's on first” kind of situation where sometimes an RFC is a paper document and sometimes an RFC is a command that is sent over the network. Anyway, they talk about how they have now been convinced that a request for connection shouldn't be immediately rejected if a socket is busy; rather it should be queued for a little bit of time, and if the socket clears up in that time, it will be accepted.

The User Control and Communication protocol (UCC) that Meyer discussed in RFC-46 is (rightly, in my opinion) shot down by Crocker as far too complex. If you'll recall, this is supposed to be a way for a computer at one physical site to request that a computer at a different site start up a process/program. There is a significant discussion of several possible implementations of this idea. The main issue seems to be that they are highly concerned with keeping implementation of different “levels” of the network distinct. For example, Crocker offered a potential solution but Meyer and Skinner rejected it because caused a kind of leakage into the NCP level of things that should remain elsewhere. (The NCP is supposed to be fast, so the less responsibility it has, the better.)

Analysis

In addition to the tension in not causing overlap between different “levels” of the network, there is also a tension in keeping things standardized versus letting everyone do what they want. According to this document, Crocker proposed that everyone could implement their own UCC or UCC-type thing. Project MAC wants everyone on the same network software so every computer can talk to every other computer. These tensions are not resolved in this document.

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, Feb 17 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.

Plateaus

RFC-48 is by Jon Postel and Steve Crocker. It's dated April 21st, 1970 and poetically titled “A Possible Protocol Plateau”. This RFC is their attempt to synthesize the suggestions and comments from everyone in the Network Working Group over the last month or so. They have about ten days to settle the matter before they present their paper at the Spring Joint Computer Conference in Atlantic City.

The technical content

The paper tries to enumerate the various concerns brought up by the group.

The first concern is around padding of messages. The basic problem is: if my HOST's hardware is only capable of sending whole “word” messages (so perhaps messages that are multiples of 8 bits in length), what do you do when you want to send a message that is like 12 bits in length (which is halfway between 8 and 16 bits)? The IMP was built assuming that messages would be sent in these kind of round numbers, but that's not actually the case. It would be an expensive and inconvenient hardware fix to change how the IMP works so various software-level solutions are discussed. Postel and Crocker have no strong preferences as to which of these are used.

The next concern is reconnection (which is not “my modem hung up and I have to reconnect” but rather the process of connecting processes and peripherals to each other and then again and again). Specifically, Crocker's “dynamic reconnection” proposal in RFC-33 has been pushed back on very hard by multiple people at multiple institutions over the last month. The authors acknowledge this:

A very large population of networkers has beat upon us for including dynamic reconnection in the protocol. We felt it might be of interest to relate how it came to be included.

The authors then compare the standard literature on the problem of reconnection to the actual implementations, strongly implying that the theoretical literature doesn't help much in the real world.

There is a three-page defense of the idea of dynamic reconnection, along with a slight modification to how it was originally proposed. The section concludes: “We are agreed that reconnection should not be required in the initial protocol, and we will offer it later as an optional and experimental tool.”

(As a reader I was not expecting this capitulation at the end of a thorough and impassioned and long defense!)

The next issue is whether links and connections should be tightly coupled, basically whether a connection (which is a software construct) should be tied to a specific link (which is a hybrid software/hardware construct). The original proposal had them tied to one another; two working group members suggested decoupling them. The author say they can't picture a solid reason why decoupling would be useful so they suggest that the link and the connection remain coupled in the interest of simplicity.

Another issue is the error messages proposed in RFC-40. The authors agree that error messages are good and they should have them. However, they suggest some tweaks on the basis that certain things tagged as “errors” in the proposal aren't “true errors” and so should probably send a different kind of message.

They also recommend that error messages be logged locally on the server and only optionally sent back to the user. Their worry is error messages will just clog up a system that is by definition already having problems. Also they are confident that the IMPs will generate very few errors, with most errors coming from HOSTs or NCPs (the software interface between the HOST and the IMP).

The next issue is figuring out ways to debug when something goes wrong on the network. They suggest reserving link 255 (the highest link) for these messages and sending an ECO (“echo”) request to a HOST. The idea is you send a brief message, and if the HOST is online, it sends a copy of the message back (hence “echo”).

To address issues of experimentation, they suggest that links 2 through 31 be used for regular network communication, with links 32 through 255 reserved for, basically, messing around and testing new network protocol stuff. They reject the idea of typed messages proposed in RFC-42

The next part is in relation to questions about sockets and ports on HOSTs brought up by working group members. The authors remind the other implementers that they fully intend for HOSTs to be idiosyncratic and any implication that the internal systems of a HOST should work one way or another is just a convenient illustration and not meant to be taken as a requirement.

The next part is a little mind-blowing. They designed the network assuming that important signals would all be, you know, encoded as data. And therefore able to be assigned an ASCII character. Turns out that some hardware (model 37 TTY's and the IBM 2741) communicates the concept of a hardware interrupt (“drop what you are doing and pay attention to the next message”) as a “long space” AKA just 250 milliseconds of silence. I like to save my editorializing for the Analysis section of these blog posts but: WHAT??? This is so weird to me. It's like your mom saying “if I don't hear from you for 24 hours I'm going to assume you've been murdered.” Moms shouldn't do this, and neither should computers.

Anyway, this necessitates a special interrupt command, which they then propose.

They reject a broadcasting feature proposed by RAND because they fail to see the use of it. (Understandably, because RAND did not provide a use case in RFC-39.) And they reject what they see as another over-complicating feature from Meyer in RFC-46.

And finally they admit that “AEN” (Another Eight-bit Number) is probably a really bad name. They are open to replacements.

The remainder of the paper lays out a suggested implementation on the HOST side of the NCP and other entities but the authors note

that this material is offered only to provide clues as to what the implementation difficulties might be and not to impose any particular discipline.

Analysis

The authors are very clear (and have been since day one) that HOSTs are essentially allowed to do whatever they want as long as they play nice with the IMPs and the rest of the network. This is one key to what makes ARPANET different from networks that predate it, which were communications between nearly identical computers.

It shows what an experimental network ARPANET was that they suggest the group dedicate 87.5% of the network capacity to experimentation and only the remainder to basic communication!

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.