by Darius Kazemi, July 16 2019
Further ICP consideration
RFC-197 is titled “Initial Connection Protocol—Reviewed”. It's authored by Arie Shoshani of SDC and Eric Harslem of RAND, and dated July 14, 1971.
The technical content
One action item coming out of the meeting at SJCC was that the Initial Connection Protocol had a bunch of errors in it and thus a cleanup committee was assigned to fix it up.
RFC-165 was the sort of initial knee-jerk output of the committee, published just a week after the SJCC meeting. This RFC is the more refined output of that cleanup committee, with a two-month turnaround (not bad!).
A big change is that this new ICP being proposed supports both simplex (one-way data transfer) and duplex (two-way simultaneous data transfer) connections. The idea is the initiating host messages its recipient saying “I would like to open a connection on a particular socket and send you some data, please either accept or refuse.” This is a much simpler process than a duplex connection setup, which requires a handshake and some back-and-forth to establish 4 sockets total (send and receive sockets on both sides).
They also offer a simplified duplex connection process as compared to earlier RFCs. The main improvement is that no data or memory allocation happens on the initial connection to the well-known socket; instead what happens is the well-known socket will immediately send back a different socket to connect to.
This new ICP also offers fewer restrictions on what sockets are reserved for connections. As previously defined, your input socket needed to be an even number and your output socket needed to be an odd number, and they needed to be sequential numbers. The numbers no longer need to be sequential, and in fact even/odd doesn't make a difference in this protocol.
The authors also suggest a change to the Network Control Program that would make the ICP simpler overall.
They also note that, right now, “CLS” (the “close” command) is used for closing an open connection, rejecting a request for a connection, and temporarily refusing a connection due to a memory allocation issue. The authors suggest that this be separated into three different commands.
How to follow this blog
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.