365 RFCs

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

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

NASA graphics

RFC-126 is titled “Ames Graphics Facilities at Ames Research Center” and authored by John McConnell of the NASA Ames Research Center. It's dated April 1971, with no date but presumably was submitted alongside RFC-125 on April 18th.

The technical content

The author is providing, for informational purposes, a description of the graphics facilities available at Ames on their IBM 360/67. Devices available include:

They are trying to create a front-end that simplifies access to all of these diverse devices.

Analysis

A “storage tube” CRT is a monitor where you can write an image to it and then you don't have to constantly update the image to keep it on the screen. The tube itself “remembers” the image you've sent it and continuously displays the image as long as it has power.

Further reading

Hardcopy Camera on the SC4020, showing a computer the size of 5 refrigerators side by side being operated by a woman.

Hardcopy Camera on the SC4020, June 1968. © Science and Technology Facilities Council, available from http://www.chilton-computing.org.uk/

The SC4020 was a massive machine that I am only just now learning about. As best I can tell, it's a multimedia production machine, capable of acting as a printer or creating animated films and who knows what else! There is a massive history of the SC4020 at Chilton Computing that I'm going to have to devour at a later date.

You can read about and see some poorly scanned ARDS storage tube CRT systems in this military supply documenation from 1967.

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 both ActivityPub and the Dat Project. You can support my work via my Patreon.

by Darius Kazemi, May 5 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 late reply from NASA

RFC-125 is titled “Response to RFC 86: Proposal for Network Standard Format for a Graphics Data Stream” and authored by John McConnell of the NASA Ames Research Center. It's dated April 18th, 1971.

The technical content

This document is a reply to RFC-86, which is a proposal for a network graphics language that is similar in a lot of ways to modern 2D HTML canvas API. This reply comes three months after that RFC was published.

The author likes the basic idea of that RFC, but wants more “mode primitives” that are separate from the drawing primitives. This way you can apply a “mode primitive” to a drawing which modifies the behavior of the drawing primitives, allowing you to take advantage of features unique to a given graphics device, and allowing for the flexibility to support any new features that don't even exist yet.

For example, you could provide a “dashed line mode” and if the graphics device doesn't support those, it would just default to a solid line. A blink primitive is proposed, which is amusing.

The author also takes “strong exception” to the fact that character rendering on the display system ignores characters like a newline. This is understandable: when I'm working with modern 2D canvas systems I always hate when I can't just send a \n to a text field and have it behave the way I expect. Instead I end up having to calculate where the next line should begin manually, which is pretty much the exact situation that the author of this RFC wants to avoid.

The author would also like control over character size and orientation.

He would also like a “display list pointer”, which is an iterator that always points to the next drawing primitive that needs to be rendered.

He also proposes some ideas for remote interaction with graphics, like the ability to send information such as “the mouse is pointing at X,Y right now and the user has clicked” over the network.

Further reading

This is the first appearance of NASA in the RFC series. The Ames Research Center was founded in 1939 for government aeronautics research under the auspices of the National Advisory Committee for Aeronautics, but in 1958 it was transferred to NASA after NACA was dissolved. It remains a NASA research center to this day.

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 both ActivityPub and the Dat Project. You can support my work via my Patreon.

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

Found a typo

RFC-124 is titled “Typographical Error in RFC 107” and is authored by John Melvin of the Network Information Center on April 19th, 1971.

The technical content

This document reports an error in RFC-107. On page 7, an “RTS” should be an “STR”. Curiously, this error is not present in the current version of RFC-107 that is on file! This suggests that it was corrected at some point and then entered into the permanent record that we have today.

Analysis

Amusingly, this correction contains two errors in it! “Catagories” is a misspelling, and it says it updates RFC-106, when in fact it updates RFC-107 as in the title!

Further reading

The RFC Editors keep a record of every error in every RFC in their Errata. This is because RFCs are considered permanent once published, so you can't go back and edit them, you can only provide error reports.

I have, in fact, filed an Errata report for this early Errata.

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 both ActivityPub and the Dat Project. You can support my work via my Patreon.

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

Leading by example

RFC-123 is titled “A Proferred Official ICP”, authored by Steve Crocker of UCLA on April 20th, 1971.

The technical content

This is an attempt at an official Initial Connection Protocol. This protocol has been referenced in previous RFCs (RFC-66 and RFC-80), but even then the protocol has only been sketched out. A full specification hasn't existed in the RFC series up until now.

The ICP is a third-level protocol, which means it's on a higher level of abstraction than the Host-Host protocol or the IMPs. It can be used for Telnet to log in to a remote server, or other uses like connecting directly to something like the Simple-Minded File System of RFC-122.

Initial connections are established between a local socket and a remote socket, and a byte size is communicated on that initial connection. Recall that popular computers in 1971 had all sorts of native byte sizes they worked in — this protocol supports byte lengths of up to 255 bits! Along with the remote socket number, the site number for the remote host needs to be sent along as well. Also, the sum of the local socket and the foreign socket must be odd, which I believe is related to the common network practice of send sockets being odd and receive sockets being even. An odd number plus an even number is always an odd number, so “the sum of these two sockets must be odd” is just a terse way to say “one even and one odd, please”.

As in many other third-level protocols before this, the general procedure goes:

  • remote host is always listening on a “well-advertised” socket (meaning the listen socket is written down in a reference manual and doesn't ever change)
  • local host sends a request to connect
  • remote host sends back a new socket for local host to connect to
  • local host then connects to that new socket on the remote, which frees up the “well-advertised” socket for the next new user to come along

Analysis

This is published as an RFC with the intent for it to be discussed (and ideally adopted) at the May NWG meeting at the Spring Joint Computer Conference.

This is also an example of Steve Crocker practicing what he preaches: he asked people to submit papers in advance of the NWG meeting, and he's leading by example doing exactly that.

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 both ActivityPub and the Dat Project. You can support my work via my Patreon.

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

Simple-minded

RFC-122 is titled “Network Specifications for UCSB's Simple-Minded File System”. It's authored by James E. White of UC Santa Barbara on April 26th, 1971.

The technical content

UCSB offers storage for users who want it via something called their Simple-Minded File System (SMFS). Storage is provided on IBM 2316 disk packs, each of which is essentially a hard drive that offers about 29 MB of storage space. There are 16 of these in two IBM 2314 direct access storage facilities, which allow external users to address and access data on an array of up to 8 of the drives. There are daily tape backups.

For now only one drive is available for Network use, with UCSB planning to provide up to four drives for the next year.

UCSB makes no claims to have a ton of file storage; even by 1971 standards this isn't a ton of storage space. But in the spirit of sharing resources they are happy to provide what they have.

SMFS can support up to ten simultaneous Network users. It is still operating under an older Host-Host standard so programmers will need to use that version of the protocol for now.

To connect to SMFS you send a connection request to Site 3, socket x'401' (that's hex, it would be socket 1025 in decimal), where SMFS is always listening for incoming requests using the Initial Connection Protocol (referenced in RFC-66 and RFC-93), whereupon it shunts the user to a new socket for their connection, so that it can maintain x'401' open for new connections from other users. As with other protocols, there is a receive socket 'n' and a send socket 'n+1'. This particular pattern of socket allotment really seems to have taken ARPANET by storm.

SMFS allows for storage of binary files between 1 bit and 25 million bits in length. Each file has a filename of 1 to 36 characters in length. Supported characters are A to Z (upper case only), the digits 0 through 9, and a blank space. Lower case letters are essentially converted to upper case, that is to say, the filenames are case insensitive. Curiously, the file system supports both ASCII and EBCDIC naming. I suppose this makes sense, since UCSB is using IBM 360 systems, which use the slightly less popular EBCDIC, and they understand that to reach the rest of the network, ASCII compatibility for file names will be very helpful.

Incredibly, the network file store offers three access levels: fully public, read-only, and read/edit. This is essentially identical to what is offered on network documents today (like a Google Spreadsheet). The way this is accomplished is through a password system. Public documents require no special permissions. You can lock down a file and provide an “access password” to users you want to have read-only access. Or you can provide a “modification password”, which allows users to edit the file. The document even suggests that “a group of users can be given access to a file while a single individual retains the exclusive right to modify it.”

SMFS has internal mechanisms that handle access collisions — when two users want to access or modify the same file at the same time. It accomplishes this by simply “locking” the file to the first user who asked for access and delaying access to the second user until the first is done with their work.

The first step in creating a file on SMFS is asking for a filename, specifying the amount of size that is to be allocated to it, and any passwords associated. If the name isn't already taken and there is space, then the space and the filename are reserved. SMFS adds a little bit of overhead to each file space allocated as insurance (overhead varies depending on how the user connects, there are interesting details in section V.A. of the document that I won't go into here).

Next the system offers two ways of writing a file — one essentially concatenates new data, while the other replaces any data that is there.

There is a function for retrieving files where you can ask for a filename and the number of bits you'd like to retrieve from it. What's interesting to me about this is you can just repeat the request successively asking for, say, 100 bits at a time, and it assumes that you want the next 100 bits in the file with each request. Once you reach the end, it terminates the connection. So not only do you not need to know how big a file is to retrieve it, you don't even have to ask for the metadata about the file size—you can just whack it with retrieve requests until you have the whole file. (There is an option to “format” your file by SMFS, which then does cause SMFS to supply the length metadata.)

Since SMFS is sequential-access rather than random-access, you can't just say “give me bits 25 through 28 of this 100 bit long file.” You have to say “give me the first 25 bits”, throw away that data, then say “give me the next 25 bits” and throw away everything but the first 3 bits, then close your connection. SMFS offers a way to say “give me the first 25 bits but don't actually give them to me, I am only asking you to do this to move your counter to position 25”. This is provided so as not to clog up the network with unnecessary data transfers and is called “spacing a file”.

Deletion and file renaming operations are also provided. Interestingly, they recommend that if you're going to rewrite a whole time, it might make sense to do a kind of remote swap so that if the connection fails you don't end up with a corrupt file. This uses both deletion and renaming. Their suggestion, if you want to overwrite a file called, say, MYFILE:

  • upload the new contents of MYFILE to a file called MYFILETEMP
  • confirm that MYFILETEMP is correct
  • delete MYFILE
  • rename MYFILETEMP to MYFILE

This adds the extra confirmation step, and then at that point you're just reassigning metadata so there's no need to worry about dropped network connections corrupting your data.

The remainder of the document discusses the actual bit fields and headers and status messages and error messages that programmers need to know if they're going to communicate with SMFS.

Analysis

I just want to point out that “send a host-host connection request to socket 1025 at site 3” is really similar to what happens on the internet today. “Site 3” is designated with that number because it's a number that everyone has agreed represents UC Santa Barbara, and as such it's hard-wired into the network of IMPs so that when you ask it to send information to site 3, it starts moving it towards a computer in Santa Barbara, California. In the modern internet instead of a site number, this is a domain name or, ultimately, an IP address. There is a complex network of things that are not so unlike the old IMPs that route your message to its destination when you request a specific IP. When you make a request via, say, a web browser, you assume that the device at the IP you're talking to is listening on port 80 (if it's an HTTP request), and then you assume that it speaks the language of HTTP so you can do your initial connection. So “send an HTTP request to 1.2.3.4:80” is the modern equivalent of “send a Host-Host request to 3:1025”.

At one point the author states that “there is no restriction on the contents” of files hosted at UCSB. I am pretty sure that was a file-format policy, as in arbitrary bits can be stored regardless of formatting, and not some kind of commentary on free speech.

Further reading

This is all eerily similar to work I very occasionally do in the Dat ecosystem. Though it differs in all sorts of ways, Dat is, ultimately, a network file storage protocol like this one.

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 both ActivityPub and the Dat Project. You can support my work via my Patreon.

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

On-line operators

RFC-121 is titled “Network On-line Operators” and authored by Mark Krilanovich of the Computer Research Lab at UCSB. It's dated April 21st, 1971, the same day as RFC-119 and RFC-120.

The technical content

This document is similar to RFCs 119 and 120 in that it documents an interface to the network that is “higher level” (more abstract and ideally easier to use) than the Network Control Program (NCP). In particular this document defines commands that a user of the UCSB On-Line System can enter in order to connect to remote hosts on the ARPANET.

Analysis

It makes sense that RFCs 119, 120, and 121 were published together as they are all documentation for what seems like the exact same system, but implemented in three different programming environments.

Further reading

This brief guide to the Culler-Fried On-Line System (eventually just called the “On-Line System”) is worth a read. It's important to note that “on-line” did not mean “on the internet” back then, because again, there was no internet! “On-line” simply meant that you were directly interfacing with a computer through an interactive terminal of some kind. A personal computer today, with no internet attached to it, would still be considered “on-line” by 1969 standards.

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 both ActivityPub and the Dat Project. You can support my work via my Patreon.

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

PL1 subroutines

RFC-120 is titled “Network PL1 Subprograms” and authored by Mark Krilanovich of the Computer Research Lab at UCSB. It's dated April 21st, 1971.

The technical content

This document was published on the same day as RFC-119, and it's essentially the exact same document but for a different programming language. Where RFC-119 detailed Fortran subroutines for talking to the network, this document details PL1 subroutines for talking to the network.

It's essentially identical to RFC-119 but for a different programming language.

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 both ActivityPub and the Dat Project. You can support my work via my Patreon.

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

Fortran subroutines

RFC-119 (PDF with images) is titled “Network Fortran Subprograms” and authored by Mark Krilanovich of the Computer Research Lab at UCSB. It's dated April 21st, 1971.

The technical content

This document contains Fortran programs that are currently in use at UCSB. The programs allow Fortran programs compiled at UCSB to access the ARPANET. These programs live in between the user and the Network Control Program (NCP), so in modern terms they are like a library that provides programmers easy to access network drivers, and the NCP itself is the network drivers.

Fortran programs that use the network (at least in this scheme) have access to a “completion code variable”, one for each open network socket. The variable contains both the ID for the socket, and the current state of the socket. So it may indicate something like “socket 1473 is listening.”

This RFC describes how to open a local socket and connect to a foreign socket (a process that is connected to a program running on some network host), how to listen for foreign connections, how to accept a connection that you've been listening for, how to close a socket, how to send and receive data, how to check the status of a local socket, how to get the ID of a socket associated with a completion code variable, how to send or receive text/terminal data (so, not binary data), and a handful of other functions.

Each subprogram is documented with definitions for the parameters passed to the subprogram (what you might think of as parameters to a function), and what seem to be exhaustive lists of potential error and status codes that could be returned, where applicable.

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 both ActivityPub and the Dat Project. You can support my work via my Patreon.

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

One hundred copies

RFC-118 is titled “Recommendations for Facility Documentation” and authored on April 16, 1971 by Richard Watson of SRI.

The technical content

This RFC describes the kind of information that people need in order to make a service available on the network. Broadly there are two categories of this information: system programming documentation for the people implementing the service, and user manual type documentation for the end users of the service.

For user manuals, the basic information will be made available by the site providing the service being used, but individual local sites will need to have a short manual on hand explaining any quirks that the remote service would have no way to know about. For example, if the local site uses a weird terminal that requires unusual keystrokes to send an interrupt, that should be documented locally.

The NIC asks any facility that intends to provide a service to the network to send to the NIC 100 copies of each manual and every subsequent manual update.

Analysis

I think the main thing here is that there were only about a dozen sites connected to the network in April 1971, and the NIC is planning for up to 100 sites. Whether that is a plan for 100 physical facilities or 100 hosts is not something I can determine. ARPANET had approximately 100 hosts by March 1977, distributed across approximately 40 IMPs. No telling how many physical sites that correlated to but probably a number between 40 and 100. So this is a case of NIC planning for growth that would be at least six years out if not more.

Further reading

These maps of ARPANET at different times are pretty cool.

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 both ActivityPub and the Dat Project. You can support my work via my Patreon.

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

Glitches the Cleaning Committee missed

RFC-117 is titled “Some Comments on the Official Protocol”. It's authored by Johnny Wong of UCLA and dated April 7, 1971.

The technical content

It seems that Wong is writing this RFC due to his personal experience attempting to implement an NCP using the protocol as currently documented. He's found that when it comes to actual implementation there are some gaps in the documentation and would like some things clarified.

First off, error messages are not fully described. Approximately half of the common failure states do not have a defined error message for them. And further, while every site has been asked to document how their own error messages work, “no one has done that so far” for the simple reason that while documentation was requested, there were no specifics asked for. So the individual sites have no idea what information to provide on their error messages.

Wong rightly points out that without good error messages, debugging is extremely difficult to do, so the defintion of error messages should be prioritized. He provides a suggestion for information that should be provided in every error case he can think of, which varies contextually depending on the type of error

In addition to errors on the Host-Host level (level two), there are error conditions on the IMP level (level one) that “cause difficulty in the implementation of the Protocol.” These involve various kinds of major failure including an IMP simply dying or rebooting mid-transmission. This can cause errors in the routing table. Wong offers a solution to this which involved a network-wide reset signal being sent out every time a new NCP comes online.

Further reading

Johnny Wong was a graduate student at UCLA at the time of writing this RFC. He was either just finishing his Master's or just beginning his PhD. He studied computer networking for most of his career and was computer science faculty at the University of Waterloo for many decades. His faculty page details his research interests and his personal page provides more biographical information.

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 both ActivityPub and the Dat Project. You can support my work via my Patreon.

Enter your email to subscribe to updates.