RFC 206
A User TELNET Description of an Initial Implementation
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:
- it resolves keyboard and display device incompatibilities
- performs character set transformations, and
- 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
- ietf: rfc206 1971-08
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms