RFC 206

A User TELNET Description of an Initial Implementation

πŸ“… published August 1971, from ietf

RFC 206: A User TELNET πŸŽ€

  • RFC number: 206
  • Title: A User TELNET, Description of an Initial Implementation
  • Author: J. White, Computer Research Lab, UCSB
  • NIC number: 7176
  • Date: 9 August 1971
  • Series: Network Working Group
  • Category/status: not listed in this header
  • Obsoletes/updates: none listed in this header

Preface πŸ’–

okay so this one is from 1971 and it's giving vintage tech history πŸ•°οΈ The User TELNET described here was built inside UCSB's Online System by Mark Krilanovich. It makes teletype-compatible time-sharing systems on the Net reachable for Online System users. iconic ✨

Contents

                                                                   Page
   I.   Function...................................................  1
   II.  Invoking TELNET............................................  2
   III. The Virtual Teletype.......................................  5
   IV.  Returning to TELNET........................................ 11
   V.   Breaking TELNET Connections................................ 12
   VI.  Abnormal Network Conditions................................ 12

Figures

                                                                   Page
   Figure 1.  Network Sites........................................  4
   Figure 2.  TELNET Character Set.................................  6
   Figure 3.  Connect Error Codes.................................. 13
   Figure 4.  Input Error Codes.................................... 13
   Figure 5.  Output Error Codes................................... 14

I. Function ✨

okay bestie, so this program's whole job is making an Online System terminal appear to any teletype-compatible, time-sharing system on the Network, like it's plugged in directly to that system πŸ”Œ An OLS user runs it from their terminal, dials up a system at another site, and uses it like a local user there. no cap, it's giving magic trick energy πŸͺ„

The program does three main things:

  1. it resolves keyboard and display device incompatibilities
  2. performs character set transformations, and
  3. makes its presence and that of the Network transparent to the user.

This program is called a User TELNET. It works with a second program called a Server TELNET, which runs at the site whose system is being used. There's a Server TELNET at every site whose system can be reached from the Net. Same deal on the other side: a User TELNET has to exist at a site before that site's users can get to remote systems πŸ’…

Both User and Server TELNETs get onto the Net through their own NCPs. They follow a Network-standard protocol that covers the handshake for connecting the two parties, plus the format of the data sent over the pair of Network connections between them. The User TELNET hides all of that protocol stuff from its users, so they never have to think about it 🫢

The TELNET protocol is built around a virtual teletype that uses a 7-bit ASCII character set. So the main job of a User TELNET is letting its users 'hit' every key on that virtual teletype πŸ“ If the user's keyboard is actually a teletype, the mapping is super simple. At UCSB the input device is an OLS keyboard, which is nothing like a teletype, so the mapping gets more complicated πŸ™ˆ

The Server TELNET's main job is the reverse: it maps the keys on the virtual teletype onto the keys its local users can actually press. If their keyboards are teletypes, that's easy. Other setups can get really complex 😭

A similar set of mappings turns output from the remote system into something the user's output device can display. At UCSB that device is usually a storage scope.


II. Invoking TELNET πŸŽ€

this section and the ones after it describe a preliminary version of the User TELNET (we'll just call it TELNET from here) that's running in the Online System right now. This first version doesn't have all the services a final version needs, and it doesn't have all the nice extras the next version will bring. It's a first pass and it's getting upgraded soon 🌸

TELNET is reached from NET, which is a subsystem of OLS, just like MOLSF and COL. Users are prohibited from loading NET by default. To get access for your user number, you just have to contact the Computer Center ✨ Once that's sorted, NET loads with this key sequence:

KEYBOARD ENTRY          OLS QUERY/RESPONSE
SYST                    WORK AREAS UPDATED
LOAD NET                LOAD NET
RETURN                  FILE LOADED

You can also get NET by specifying the system name 'NET' at login.

Once you're in NET, you start TELNET by going to Level II Real and hitting LOG. TELNET asks for a site number. Type the number in decimal (the site numbers are listed in Figure 1), then hit RETURN. Next TELNET asks for the Server TELNET's socket number. By convention it's usually 1, but sometimes a different socket is the right one. Either way, type the socket number in decimal and hit RETURN πŸ¦‹ The whole conversation goes like this:

KEYBOARD ENTRY          OLS QUERY/RESPONSE
II LOG                  FOREIGN SITE NO. = (site number)
site number RETURN      FOREIGN SCK NO. = 1
1 RETURN

When you hit that second RETURN, TELNET tries to reach the Server TELNET you picked and sets up a duplex connection for you. Once it's connected, TELNET wipes the tube and moves the carriage to the upper left-hand corner of the screen. From that point on you're basically connected to the remote system, and TELNET starts mapping your keypresses into their virtual-teletype versions while the incoming text gets transformed and shown on the scope 🌈 If the remote system sends a login message, that's the first thing you'll see. Either way, log in the way that system expects you to ✨

Figure 1. Network Sites

Institution     Location        Computer        Site    Site #  Site #
                                                Name    (HEX)   (DEC)
------------------------------------------------------------------------
UCLA            Los Angeles     Sigma-7         UCLA    01        1

UCLA            Los Angeles     IBM 360/91      UCL1    41       65

Stanford Research
Institute       Menlo Park      PDP-10          SRI0    02        2

Stanford Research
Institute       Menlo Park      PDP-15          SRI1    42       66

UCSB            Santa Barbara   IBM 360/75      UCSB    03        3

University of   Salt Lake City,
Utah            Utah            PDP-10          UTAH    04        4

Bolt, Beranek,  Cambridge,
and Newman      Mass.           PDP-10          BBN0    05        5

Bolt, Beranek,  Cambridge,
and Newman      Mass.           DDP-516         BBN1    45       69

MIT             Cambridge,
                Mass.           GE 645          MIT0    06        6

MIT             Cambridge,
                Mass.           PDP-10          MIT1    46       70

Rand
Corporation     Santa Monica    IBM 1800        RAND    07        7
                                (IBM 360/65)

System Development
Corporation     Santa Monica    DDP-516         SDC     08        8
                                (IBM 360/67)

Harvard         Cambridge,
University      Mass.           PDP-10          HRV0    09        9

Harvard         Cambridge,
University      Mass.           PDP-1           HRV1    49       73
Lincoln         Lexington,
Laboratory (MIT)Mass.           IBM 360/67      LINO    0A       10

Lincoln         Lexington,
Laboratory (MIT)Mass.           TX2             LIN1    4A       74

Stanford
University      Stanford        PDP-10          STAN    0B       11

University of   Urbana, Ill.    PDP-11          ILl     0C       12
Illinois

Case Western
Resevrve        Cleveland,
University      Ohio            PDP-10          CASE    0D       13

Carnegie-Mellon Pittsburgh,
University      Pa.             PDP-10          CARN    0E       14

Burroughs       Paoli, Pa.      B-6500          BURR    0F       15
                                (Illiac IV)

III. The Virtual Teletype πŸ¦‹

this section is where the magic happens ✨ It defines how TELNET maps the OLS keyboard onto the virtual teletype's character set, and how it maps that same character set onto the characters the user's storage scope can show. All of that lives in Figure 2. Here's one line from the figure, line 11:

For line 11: The key labeled 'LF' (meaning 'Line Feed') on the virtual teletype, sometimes referred to as 'control-J', is struck by pressing either SUB, CASE J, or [1] on an OLS keyboard. TELNET sends to the remote system an 8-bit character with the value X'0A'. Whenever 'LF' is received from the foreign system, TELNET displays it by rolling the carriage down one line.

So CASE is the stand-in for the CNTRL key on a teletype. For example, 'control-C' is the key pair 'CASE C' πŸ’… Ngl, the difference is that on a teletype you hold CNTRL while you hit 'C', but on the OLS you hit CASE and then 'C' one after the other. 'CASE A' through 'CASE Z' each have a matching key on the upper keyboard, and that key sits in the same spot as its lower-keyboard counterpart. So LS is the equivalent of CASE A 🫢

TELNET lets the user send both upper- and lower-case letters. Hitting 'A' sends a lowercase 'A', and holding SHIFT while hitting 'A' sends an uppercase 'A'. The catch is that OLS can't display lowercase on the storage scope, so TELNET turns lowercase letters into uppercase before showing them πŸ™ˆ

Four virtual teletype keys, 'ENQ', 'ACK', 'BEL', and 'NAK', get special treatment on the display. Two lines at the top of the display area are reserved for them. Whenever TELNET gets one of those characters from the remote system, it shows it in its assigned spot inside that two-line field. These four always go at the top of the display, no matter where the user's cursor is on the scope, and then TELNET puts the cursor back where it was πŸ’–

Storage scopes and teletypes are different in a few ways. A scope is way quieter than a teletype 🀫 But the sound of a teletype carriage coming back is often a useful cue, usually meaning the system accepted your last line of input. To replace that cue, TELNET draws an underline ('_') at the left edge of the next line whenever it gets a carriage return (CR) from the remote system ✨

Figure 2. TELNET Character Set

To  |              | Also     |Push  |   Or    |Code Sent  |Upon receipt
Send| (Explanation)| Known as |Either|         |is (in hex)|Displayed as

Okay bestie, here's the whole TELNET character grid πŸ“ It's giant but so pretty, and every single cell matters ✨

----+--------------+----------+------+---------+-----------+------------
NUL |NULL          |    ^@    | [2]  |         |    00     |
    |              |          |      |         |           |
SOH |Start of      |  [3]^A   | LS   |[4]CASE A|    01     |
    |     Heading  |          |      |         |           |
    |              |          |      |         |           |
STX |Start of Text |    ^B    | ATAN | CASE B  |    02     |
    |              |          |      |         |           |
ETX |End of Text   |    ^C    | LOG  | CASE C  |    03     |
    |              |          |      |         |           |
EOT |End of        |          |      |         |           |
    |  Transmission|    ^D    | REFL | CASE D  |    04     |
    |              |          |      |         |           |
ENQ |Enquiry       |    ^E    |  [4] | CASE E  |    05     | [5] <ENQ>
    |              |          |      |         |           |
ACK |Acknowledge   |    ^F    |  UP  | CASE F  |    06     | <ACK>
    |              |          |      |         |           |
BEL |Bell          |    ^G    | DOWN | CASE G  |    07     | <BELL>
BS  |Backspace     |    ^H    | EVAL | CASE H  |    08     |
    |              |          |      |         |           |
HT  |Horizontal    |          |      |         |           |
    |Tab.          |    ^I    | INV  | CASE I, |    09     |
    |              |          |      |   TAB   |           |
    |              |          |      |         |           |
LF  |Line Feed     |    ^J    | SUB  | CASE J, |    0A     | Carriage
    |              |          |      |   [1]   |           | rolled down
    |              |          |      |         |           |
VT  |Vertical Tab. |    ^K    | MAX  | CASE K  |    0B     |
    |              |          |      |         |           |
FF  |Form Feed     |    ^L    | MOD  | CASE L  |    0C     |
    |              |          |      |         |           |
CR  |Carriage      |          |      |         |           |
    |     Return   |    ^M    | DEL  | CASE M, |    0D     |[6]Carriage
    |              |          |      |   RETURN|           |   returned
    |              |          |      |         |           |
SO  |Shift Out     |    ^N    | ARG  | CASE N  |    0E     |
    |              |          |      |         |           |
SI  |Shift In      |    ^O    | DIFF | CASE O  |    0F     |
    |              |          |      |         |           |
DLE |Data Link     |          |      |         |           |
    |       Escape |    ^P    | SUM  | CASE P  |    10     |
    |              |          |      |         |           |
DC1 |Device        |          |      |         |           |
    |    Control 1 |    ^Q    | [7]  | CASE Q  |    11     |
    |              |          |      |         |           |
DC2 |Device        |          |      |         |           |
    |    Control 2 |    ^R    | [8]  | CASE R  |    12     |
    |              |          |      |         |           |
DC3 |Device        |          |      |         |           |
    |    Control 3 |    ^S    |  RS  | CASE S  |    13     |
    |              |          |      |         |           |
DC4 |Device        |          |      |         |           |
    |    Control 4 |    ^T    |  SQ  | CASE T  |    14     |
    |              |          |      |         |           |
NAK |Negative      |          |      |         |           |
    | Acknowledge  |    ^U    | CONJ | CASE U  |    15     | <NAK>
    |              |          |      |         |           |
SYN |Synchronous   |          |      |         |           |
    |    Idle      |    ^V    | EXP  | CASE V  |    16     |
    |              |          |      |         |           |
ETB |End of        |          |      |         |           |
    |  Transmission|          |      |         |           |
    |  Block       |    ^W    | [9]  | CASE W  |    17     |
    |              |          |      |         |           |
CAN |Cancel        |    ^X    | COS  | CASE X  |    18     |
EM  |End of Medium |    ^Y    | SQRT | CASE Y  |    19     |
    |              |          |      |         |           |
SUB | Substitute   |    ^Z    | SIN  | CASE Z  |    1A     |
    |              |          |      |         |           |
ESC | Escape       |Alt Mode, |  NEG |         |    1B     |
    |              |    ^[    |      |         |           |
    |              |          |      |         |           |
FS  | File         |    ^     | PROD |         |    1C     |
    | Separator    |          |      |         |           |
    |              |          |      |         |           |
GS  | Group        |    ^]    | SORT |         |    1D     |
    | Separator    |          |      |         |           |
    |              |          |      |         |           |
RS  | Record       |    ^^    | CONV |         |    1E     |
    | Separator    |          |      |         |           |
    |              |          |      |         |           |
US  | Unit         |    ^<-   | PWR  |         |    1F     |
    | Separator    |          |      |         |           |
    |              |          |      |         |           |
SP  | Space        |          |SPACE |         |    20     |blank
    |              |          |      |         |           |
!   | Exclamation  |          |  !   |         |    21     | !
    |   Point      |          |      |         |           |
    |              |          |      |         |           |
"   | Quotation    |Diaeresis |  "   |         |    22     | "
    |   Marks      |          |      |         |           |
    |              |          |      |         |           |
#   | Number Sign  |          |  #   |         |    23     | #
    |              |          |      |         |           |
$   | Dollar Sign  |          |  $   |         |    24     | $
    |              |          |      |         |           |
%   | Percent      |          |  %   |         |    25     | %
    |              |          |      |         |           |
&   | Ampersand    |          |  &   |         |    26     | &
    |              |          |      |         |           |
'   | Apostrophe   |Acute     |  '   |         |    27     | '
    |              | Accent,  |      |         |           |
    |              | Closing  |      |         |           |
    |              | Single   |      |         |           |
    |              |   Quote  |      |         |           |
    |              |          |      |         |           |
(   | Opening      |          |      |         |    28     | (
    |   Parenthesis|          |  (   |         |           |
    |              |          |      |         |           |
)   | Closing      |          |      |         |    29     | (
    |   Parenthesis|          |  (   |         |           |
    |              |          |      |         |           |
*   | Asterick     |          |  *   |         |    2A     | *
+   | Plus         |          |  +   |         |    2B     | +
    |              |          |      |         |           |
,   | Comma        |Cedilla   |  ,   |         |    2C     | ,
    |              |          |      |         |           |
-   | Hyphen       |Minus     |  -   |         |    2D     | -
    |              |          |      |         |           |
.   | Period       |Decimal   |  .   |         |    2E     | .
    |              |  Point   |      |         |           |
    |              |          |      |         |           |
/   | Slant        |          |  /   |         |    2F     | /
    |              |          |      |         |           |
:   | Colon        |          |  :   |         |    3A     | :
    |              |          |      |         |           |
;   | Semicolon    |          |  ;   |         |    3B     | ;
    |              |          |      |         |           |
<   | Less than    |          |  <   |         |    3C     | <
    |              |          |      |         |           |
=   | Equals       |          |  =   |         |    3D     | =
    |              |          |      |         |           |
>   | Greater than |          |  >   |         |    3E     | >
    |              |          |      |         |           |
?   | Question Mark|          |  ?   |         |    3F     | ?
    |              |          |      |         |           |
@   | Commercial At|          |  @   |         |    40     | @
    |              |          |      |         |           |
[   | Opening      |          |  [   |         |    5B     | [
    | Bracket      |          |      |         |           |
    |              |          |      |         |           |
\   | Reverse Slant|          |CASE /|         |    5C     | \
    |              |          |      |         |           |
]   | Closing      |          |  ]   |         |    5D     | ]
    | Bracket      |          |      |         |           |
    |              |          |      |         |           |
^   | Circumflex   |          |  ^   |   ^     |    5E     | ^
    |              |          |      |         |           |
_   | Underline    |          | <-   |   _     |    5F     | _
    |              |          |      |         |           |
`   | Grave Accent | Opening  |CASE `|         |    60     |`
    |              | single   |      |         |           |
    |              | quote    |      |         |           |
    |              |          |      |         |           |
{   | Opening Brace|          |CASE (|         |    7B     | {
    |              |          |      |         |           |
|   | Vertical Line|          |  |   |         |    7C     | |
    |              |          |      |         |           |
}   | Closing Brace|          |CASE )|         |    7D     | }
~   | Tilde        | Overline,|  -   |         |    7E     | ~
    |              | General  |      |         |           |
    |              | Accent   |      |         |           |
    |              |          |      |         |           |
DEL | Delete       | Rubout   | BACK |         |    7F     |
    |              |          |      |         |           |
0-9 | Numerics     |          | 0-9  |         |   30-39   | 0-9
    |              |          |      |         |           |
A-Z | Upper Case   |          |SHIFT |         |   41-5A   | A-Z
    | Alphabetics  |          |[9]   |         |           |
    |              |          | A-Z  |         |           |
    |              |          |      |         |           |
a-z | Lower Case   |          |      |         |   61-7A   | A-Z
    | Alphabetics  |          | A-Z  |         |           |
    |              |          |      |         |           |

Now the footnotes, which are the key to decoding all those little superscripts πŸ” Don't skip them, they're the cheat sheet πŸ’…

   Table Notes

      [1] Down arrow
      [2] Superscript 1
      [3] Superscript 2
      [4] Circle with Dot in the Middle
      [5] Superscript 3
      [6] Superscript 6
      [7] Circle with Plus (+) in the Middle
      [8] Circle with Slash (/) in the Middle
      [9] Superscript 5

   Notes for Figure 2.  TELNET Character Set

   Superscript 1 - All of the following keys send NULL:

                   SET, CLR, cent sign, Superscript 0-9

   Superscript 2 - '^A' is read 'Control A'.  Same for '^B', '^C', etc.

   Superscript 3 - ENQ, ACK, BEL, and NAK are displayed as '<ENQ>',
                   '<ACK>', '<BELL>', and '<NAK>', respectively, in an
                   area at the top of the screen reserved especially for
                   those characters.

   Superscript 4 - ^A is sent by hitting th keys 'CASE' and 'A' in turn.
                   Same for ^B, ^C, etc.

   Superscript 5 - Upper case 'A' is  sent by holding down the SHIFT key
                   while 'A' is struck.  Same for upper case 'B', 'C',
                   etc.

Superscript 6 is the little footnote marker, and it's about CR πŸŽ€. Hitting CR also puts an underline _ in the left margin. That stands in for the noisy clunk a teletype carriage makes when it returns, which was a super handy cue back then πŸ–¨οΈ

A storage scope is also way faster than a teletype πŸ’¨ But that speed can be a little chaotic. When a system spits out a whole pile of lines without waiting for you, the display can wrap from the bottom of the scope back to the top and start writing over itself before you've finished reading 😭 When that happens, there's a trick that makes sense once you've read Section IV 🫢 Hit II before the display wraps onto itself, and the display will stop. Once you've read everything, erase the scope and hit LOG, and the display resumes ✨

If you hit ERASE while you're in TELNET, it does its usual job 🧽 but it has no effect on the remote system πŸ™…β€β™€οΈ There's a quirk in the current TELNET implementation, though. ERASE also suspends the display of incoming text until you strike another key on the virtual teletype. So be careful about erasing the scope while you're waiting on a response from the remote system πŸ‘€ If you do get stuck, you can get out of it by following ERASE with NUL on the virtual teletype πŸ’…

IV. Returning to TELNET ✨

You can escape from TELNET (and therefore from the remote system you're attached to) at any time by pressing a level key, like I, II, ..., SYST, TYPE, or LIST, or by hitting RESET πŸšͺ Whenever you want to come back, hit II LOG (on NET) again, and you'll pick up on your remote system exactly where you left off πŸ¦‹ The second time you press 'II LOG', TELNET won't ask you for a site number like before. It notices you're already connected to a remote system and just resumes from where it left off πŸ’–

After you escape and before you return, you can do pretty much anything else on the Online System, like changing systems, as long as you don't log out 🌸 You still keep the option of coming back to TELNET later and continuing with the remote system you're connected to. This is actually a neat trick for getting a hard copy of part of your conversation with the remote system πŸ–¨οΈ Bring your system to the point where you want a listing, escape from TELNET by hitting 'TYPE SEL' 1,4 RETURN', which selects the line printer as a secondary output device, then return to TELNET by pressing 'II LOG'. From then on, everything sent to and from the remote system gets recorded for printing later 🧾 Just know that if you log off OLS while you're escaped from TELNET, the system will automatically break the TELNET connection for you ⚠️

V. Breaking TELNET Connections

At any time while you're in contact with TELNET, after the connection to the remote system is established, you can end that connection by hitting 'CON RETURN' πŸ“ž TELNET will respond with 'SOCKETS PURGED'. The next time you call TELNET (that is, the next time you type 'II LOG'), you'll get the original prompt asking for a remote site number again πŸ”„ From there you're free to connect to a different foreign system 🌈

Breaking a network connection like this is NOT the same as logging out of the remote system. Some Server TELNETs may log you off when they detect the broken connection, while others may leave you logged on 😬 Know the conventions of the systems you use, and when it makes sense, log yourself off before you break the connection.

Oh, and 'I DEL RETURN' will also end a TELNET connection 🧹 But it closes all the other connections you've set up using the Level I operators too, so use it with care πŸ’€

VI. Abnormal Network Conditions

While you're in TELNET and attached to a remote system, TELNET keeps an eye on your Network connections πŸ‘€ If it notices anything abnormal, it stops monitoring and prints a message in this form:

{CONNECT}
{INPUT}         ERROR - CODE = n
{OUTPUT}

Here, n is one of the values listed in Figures 3-5 πŸ”’ A CONNECT error can happen during TELNET's first attempt to set up connections to the remote system. An INPUT error can pop up when TELNET tries to pull incoming data off the NET πŸ“₯ And an OUTPUT error can show up while TELNET is trying to push your outgoing data onto the Net πŸ“€

Figure 3. Connect Error Codes

4      -        A previous invocation of TELNET left a local receive
                socket open; the  send socket is closed.  Hit _'I DEL
                RETURN'_.

8      -        A previous invocation of TELNET aborted, and _'I DEL
                RETURN'_ failed to close the Network connections.
                The remote site is probably dead.

12      -       All communication paths between UCSB and the
                specified remote site are in use.

16      -       UCSB's NCP is running at capacity or is drained or
                stopped.

20      -       The connection attempt was refused by the remote
                site.

28      -       No such remote site.

36      -       Remote site was discovered to be dead.

44      -       The Operator has stopped or reset the NCP.

60      -       Either the specified remote site is not accepting
                input from the net, or there was a failure in the
                subnet.

68      -       The specified remote site has broken all existing
                connections to UCSB.

72      -       The remote site is known to be dead.

Figure 4. Input Error Codes

8       -       Connections to the server TELNET at the remote site
                have been broken.

16      -       Connections to the Server TELNET at the remote site
                are being broken.

52      -       An interrupt was sent by the remote system.  Resume
                by hitting _LOG_.

Figure 5. Output Error Codes

8       -       Connections to the Server TELNET at the remote site
                have been broken.

16      -       Connections to the Server TELNET at the remote site
                are being broken.

20      -       same as 8.

36      -       Remote site has died.

44      -       The Operator has stopped or reset the NCP.

52      -       An interrupt was sent by the remote system.  Resume
                by hitting _LOG_.

60      -       Either the remote site has stopped accepting input
                from the Net or  there was a failure in the subnet.

64      -       same as 60.

68      -       The remote site has broken all existing connections
                to UCSB.
πŸ“¦ where this page comes from