MORE INFORMATION
Telnet is best understood in the context of a user with a
simple terminal using the local Telnet program (known as the client program) to
run a logon session on a remote computer where the user's communications needs
are handled by a Telnet server program.
It should be emphasized that
the Telnet server can pass on the data it has received from the client to many
other types of processes including a remote logon server. This is described in
RFC854 and was first published in 1983.
The Network Virtual Terminal
Communication is established using TCP/IP and is based on a
Network Virtual Terminal (NVT). On the client, the Telnet program is
responsible for translating incoming NVT codes to codes understood by the
client's display device as well as for translating client-generated keyboard
codes into outgoing NVT codes.
The NVT uses 7-bit codes for
characters. The display device, referred to as a printer in the RFC, is only
required to display the standard printing ASCII characters represented by 7-bit
codes and to recognize and process certain control codes. The 7-bit characters
are transmitted as 8-bit bytes with the most significant bit set to zero. An
end-of-line is transmitted as a carriage return (CR) followed by a line feed
(LF). If you want to transmit an actual carriage return, this is transmitted as
a carriage return followed by a NUL (all bits zero) character.
NVT
ASCII is used by many other Internet protocols like SMTP and FTP.
The
following control codes are required to be understood by the NVT.
|
NULL | NUL | 0 | No operation |
Line Feed | LF | 10 | Moves the printer to the next print line, keeping the same
horizontal position. |
Carriage Return | CR | 13 | Moves the printer to the left margin of the current line. |
The following further control codes are optional
but should have the indicated defined effect on the display.
|
BELL | BEL | 7 | Produces an audible or visible signal (which does NOT move the
print head. |
Back Space | BS | 8 | Moves the print head one character position towards the left
margin. (On a printing device, this mechanism was commonly used to form
composite characters by printing two basic characters on top of each
other.) |
Horizontal Tab | HT | 9 | Moves the printer to the next horizontal tab stop. It remains
unspecified how either party determines or establishes where such tab stops are
located. |
Vertical Tab | VT | 11 | Moves the printer to the next vertical tab stop. It remains
unspecified how either party determines or establishes where such tab stops are
located. |
Form Feed | FF | 12 | Moves the printer to the top of the next page, keeping the same
horizontal position. (On visual displays, this commonly clears the screen and
moves the cursor to the top left corner.) |
The NVT keyboard is specified as being capable of generating
all 128 ASCII codes by using keys, key combinations, or key sequences.
Commands
The Telnet protocol uses various commands to control the
client-server connection. These commands are transmitted within the data
stream. The commands are distinguished from the data by setting the most
significant bit to 1. (Remember that data is transmitted as 7-bits with the
eighth bit set to 0) Commands are always introduced by the Interpret as command
(IAC) character.
Here is the complete set of commands:
|
SE | 240 | End of subnegotiation parameters | |
NOP | 241 | No operation | |
DM | 242 | Data mark | Indicates the position of a Synch event within the data stream.
This should always be accompanied by a TCP urgent notification. |
BRK | 243 | Break | Indicates that the "break" or "attention" key was hi. |
IP | 244 | Suspend | Interrupt or abort the process to which the NVT is
connected. |
AO | 245 | Abort output | Allows the current process to run to completion but does not
send its output to the user. |
AYT | 246 | Are you there | Send back to the NVT some visible evidence that the AYT was
received. |
EC | 247 | Erase character | The receiver should delete the last preceding undeleted
character from the data stream. |
EL | 248 | Erase line | Delete characters from the data stream back to but not
including the previous CRLF. |
GA | 249 | Go ahead | Under certain circumstances used to tell the other end that it
can transmit. |
SB | 250 | Subnegotiation | Subnegotiation of the indicated option follows. |
WILL | 251 | will | Indicates the desire to begin performing, or confirmation that
you are now performing, the indicated option. |
WONT | 252 | wont | Indicates the refusal to perform, or continue performing, the
indicated option. |
DO | 253 | do | Indicates the request that the other party perform, or
confirmation that you are expecting the other party to perform, the indicated
option. |
DONT | 254 | dont | Indicates the demand that the other party stop performing, or
confirmation that you are no longer expecting the other party to perform, the
indicated option. | |
IAC | 255 | Interpret as command | Interpret as a command |
Telnet Options
Options give the client and server a common view of the
connection. They can be negotiated at any time during the connection by the use
of commands. They are described in separate RFCs.
The following are
examples of common options:
|
3 | suppress go ahead | 858 |
5 | status | 859 |
1 | echo | 857 |
6 | timing mark | 860 |
24 | terminal type | 1091 |
31 | window size | 1073 |
32 | terminal speed | 1079 |
33 | remote flow control | 1372 |
34 | linemode | 1184 |
36 | environment variables | 1408 |
Either end of a Telnet conversation can locally or
remotely enable or disable an option. The initiator sends a 3-byte command of
the form:
IAC | Type of Operation | Option |
The response is of the same form. Operation is one of:
|
WILL | 251 | Sender wants to do something. |
DO | 252 | Sender wants the other end to do something. |
WONT | 253 | Sender does not want to do something. |
DONT | 254 | Sender wants the other not to do something. |
Associated with each of the these commands are
various possible responses:
|
WILL DO | The sender would like to use a certain facility if the receiver
can handle it. | Option is now in effect. |
WILL DONT | Receiver says it cannot support the option. | Option is not in effect. |
DO WILL | The sender says it can handle traffic from the sender if the
sender wishes to use a certain option. | Option is now in effect. |
DO WONT | Receiver says it cannot support the option. | Option is not in effect. |
WONT DONT | Option disabled. | DONT is only valid response. |
DONT WONT | Option disabled. | WONT is only valid response. |
For example, if the sender wants the other end to
suppress go-ahead, it would send the byte sequence:
The final byte of the 3-byte sequence identifies the required
action.
Some option's values need to be communicated after support
of the option has been agreed. This is done using sub-option negotiation.
Values are negotiated using value query commands and responses in the following
form:
and
For example, if the client wants to identify the
terminal type to the server, the following exchange might take place:
CLIENT | | IAC | WILL | Terminal Type |
SERVER | | IAC | DO | Terminal Type |
CLIENT | | IAC | SB | Terminal Type | 1 | IAC | SE |
SERVER | | IAC | SB | Terminal Type | 0 | V | T | 2 | 2 | 0 | IAC | SE |
The first exchange establishes that terminal type
(option number 24) is handled, the server then enquires of the client what
value it wishes to associate with the terminal type.
The sequence
SB,24,1 implies sub-option negotiation for option type 24, value required (1).
The IAC,SE sequence indicates the end of this request.
The response
IAC,SB,24,0,'V'... implies sub-option negotiation for option type 24, value
supplied (0), the IAC,SE sequence indicates the end of the response (and the
supplied value).
The encoding of the value is specific to the option
but a sequence of characters, as shown above, is common.
Descriptions of Telnet Options
Many of those listed are self-evident, but some call for more
information.
Suppress Go Ahead
The original Telnet implementation defaulted to half duplex
operation. This means that data traffic could only go in one direction at a
time and specific action is required to indicate the end of traffic in one
direction and that traffic may now start in the other direction. [This similar
to the use of "roger" and "over" by amateur and CB radio operators.] The
specific action is the inclusion of a GA character in the data stream.
Modern links normally allow bi-directional operation and the
"suppress go ahead" option is enabled.
Echo
The echo option is enabled, usually by the server, to indicate
that the server echos every character it receives. A combination of "suppress
go ahead" and "echo" is called character-at-a-time mode meaning that each
character is separately transmitted and echoed.
There is an
understanding known as kludge-line mode, which means that if either "suppress
go ahead" or "echo" is enabled but not both, then Telnet operates in
line-at-a-time mode meaning that complete lines are assembled at each end and
transmitted in one "go".
Linemode
This option replaces and supersedes the line mode kludge.
Remote Flow Control
This option controls where the special flow control effects of
Ctrl+S or Ctrl+Q are implemented.
Telnet Control Functions
The Telnet protocol includes a number of control functions. These
are initiated in response to conditions detected by the client (usually certain
special keys or key combinations) or server. The detected condition causes a
special character to be incorporated in the data stream.
Interrupt Process
This is used by the client to cause the suspension or termination
of the server process. Typically, the user types Ctrl+C on the keyboard. An IP
(244) character is included in the data stream.
Abort Output
This is used to suppress the transmission of remote process
output. An AO (238) character is included in the data stream.
Are You There
This is used to trigger a visible response from the other end of
the connection to confirm the operation of the link and the remote process. An
AYT (246) character is incorporated in the data stream.
Erase character
This is sent to the display to tell it to delete the immediately
preceding character from the display. An EC (247) character is incorporated in
the data stream.
Erase line
This option causes the deletion of the current line of input. An
EL (248) character is incorporated in the data stream.
Data Mark
Some control functions such as AO and IP require immediate action
and this may cause difficulties if data is held in buffers awaiting input
requests from a (possibly misbehaving) remote process. To work around this
problem, a DM (242) character is sent in a TCP Urgent segment, this tells the
receiver to examine the data stream for "interesting" characters such as IP,
AO, and AYT. This is known as the Telnet synchronization mechanism.
A DM
not in a TCP Urgent segment has no effect.
The Telnet Command
On Windows NT and most UNIX systems, a Telnet session can be
initiated using the Telnet command. Most users simply type:
However, if the user just types
telnet,
then various options and subcommands are available.
The following is
an example of a Telnet session from sfuclnt to sfusrvr.
C:\>telnet
Microsoft (R) Windows NT (TM) Version 4.00 (Build 1381)
Welcome to Microsoft Telnet Client
Telnet Client Build 5.00.99034.1
Escape Character is 'CTRL+]'
Microsoft Telnet> open sfusrvr
**** The screen will clear and the following information is displayed:
Microsoft (R) Windows NT (TM) Version 4.00 (Build 1381)
Welcome to Microsoft Telnet Service
Telnet Server Build 5.00.99034.1
login: sfu
password: ********
**** The screen will clear again and the following information is displayed:
*===============================================================
Welcome to Microsoft Telnet Server.
*===============================================================
C:\>