1971–1995

Line Mode

For twenty-four years the way to use the internet was to type at it. Not metaphorically: you opened a connection to a port, typed a line, pressed return, and the far end answered in text you could read. That worked because a command was a line of ASCII ending in a carriage return and a line feed, and it worked for file transfer, news, mail, menus, chat and the web alike. A keyboard was a sufficient client. Then it stopped, in two steps, and only the second one was impossible.

I spent 1994 and 1995 at Spry, in Seattle, the company that put Internet in a Box on a shelf. Part of my job was a crawler for Usenet news, and there is no way to write one of those without learning NNTP as lines, or to debug one without opening a connection to port 119 and typing at it until you can see what your program got wrong. That is what this page is: the thing I did at a terminal in 1994, and the reason a person cannot casually do it any more.

One terminal, six ports

Pick a protocol and type at it. The hint under the box is a line that will do something; everything else the grammar allows works too.

connected to
what this one shows
specified in

try:

typed so far

Six protocols, three shared ideas

They were designed by different people for different jobs across fifteen years, and they agree about three things. That agreement is why one pair of hands could drive all of them.

Each protocol: its port, the year of the specification quoted here, and the idea it contributes
protocolportyearwhat it contributes

The first idea: a command is a line of ASCII ending in CR LF. Two bytes with no glyph, which is why the wire column above is worth turning on — a five-character line costs seven bytes and the two extra are the reason the far end knows you have finished.

The second: a reply starts with three digits and the FIRST one is the category. FTP prints the five in its own standard, SMTP and NNTP use the same shape, and IRC calls it “the three digit numeric”. Four protocols, one idea about how to answer.

RFC 959's five reply classes, by first digit
codenamewhat it means

The third is the one worth building. A block of text ends with a line containing only a period — which immediately creates a problem, because the text might contain such a line. Switch to SMTP or NNTP above, start a data block, and type a line beginning with a period.

And then you could not

The same request, three times, twenty-four years apart. It degrades in two steps and only the second is impossible.

The same request in three eras: what you type, whether it works, and what comes back
yearwhat you typeresultwhat comes back
the first five bytes of a TLS record
can you type them

The first step was not impossible, it was ambiguous: one machine began answering for many names, so a request that did not carry the name reached the wrong site. You could still type it. You had to know to type more.

The second step is a different kind of thing. A handshake is not text and was never meant to be. There is no arrangement of keys that produces the byte 22, so the question is not whether you know the protocol. And the reason is a good one: everything above crosses the wire in the clear, including the password you typed into FTP.

What this page checked when it loaded

Each claim, whether it held, and the values behind it
claimheldmeasured

What is real here, and what is not

Nothing here opens a socket

There is no server at the other end of that terminal and no connection of any kind. The replies are written from each protocol’s own grammar as published, and a real server would differ in its greeting, its capabilities and most of its text. What is faithful is the SHAPE: the commands are the commands, the reply codes are real codes in their real classes, and the terminators are the terminators. A page that recorded real sessions would be more honest about the text and would need six servers still running six protocols, two of which are effectively gone.

The transparency rule is real code, not a description

Everything else here is a grammar written down. The doubling of a leading period is an actual transformation with an actual inverse, implemented and checked: twelve shapes of text including a line that is only a period, stuffed, sent through the wire form with its terminator, read back, and compared with the original. That is the one thing on this page you could take away and use.

Six protocols is a selection, and Archie was cut

The plan had a seventh, Archie, and it came out on research rather than for space. RFC 1580 is a guide to network tools rather than a specification, and it documents how a person reached Archie — a local client, a telnet login, or email — without defining a wire protocol of its own. A service you reached by logging in and typing at somebody else’s program is a different thing from a protocol with a grammar, and it would have been the only member of the six that could not answer the question this page asks.

The dates are the specifications, not the inventions

1971 is RFC 114, “A File Transfer Protocol”, dated 16 April 1971, which is where this era starts. 1995 is where it ends, and the end date moved during the build: the roster said 1994, which is when SSL 1.0 existed inside Netscape and was never released because it was broken. The first version an ordinary person could use was SSL 2.0, in Navigator 1.1, in February 1995. Ending the era at a version nobody could run would have been a nicer round number and a worse fact.

Line Mode is named after a browser this page does not simulate

CERN’s Line Mode Browser was written by Nicola Pellow during a student work placement and, in CERN’s own words, “By March 1991, a simple ‘Line-Mode’ browser was made available to users of CERN’s central computers.” It was the second browser there ever was and the first that ran on more than one kind of machine. It is the name because line mode is the real term for the thing this page is about — a screen you drive one line at a time — not because anything here reproduces that program. CERN built a faithful simulator of it in 2013 and this is not that.

What the neighbouring machine already covers

Winsock, on this same roster, gets to HTTP from underneath: it builds the dial-up link a layer at a time and then uses HTTP/0.9 narrowly, to show what a crawler misreads when there is no status line. That is the same protocol and a different question, and the overlap was checked rather than assumed before this page was built. This one is about the typing.

Sources