The telnet protocol and its basic NVT (Network Virtual Terminal) specification were designed to enable communication between a wide variety of different terminals and computers. They were designed in a way that aimed to solve compatibility issues by introducing a set of common basic commands and data types that will be shared by all telnet clients and servers.
However, resorting to the lowest common denominator meant that all special, advanced capabilities of either the server or the terminal were not used. Thus the common protocol is very basic.
To improve this situation, the creators of telnet added a set of various "telnet options" that the telnet host and the telnet client can negotiate. This flexible mechanism still maintains the basic protocl, but enables more advanced, sophisticated communication between devices that can support it.
Most Telnet options are used for the purpose of improving the efficiency of how data is transferred between devices. For example, by default the NVT assumes half-duplex operation, which means that each device needs to use the "Go Ahead" command after each transmission. However, virtually all hardware devices now support full-duplex communication, so devices will usually agree to use the "Suppress Go Ahead" option to eliminate the need to send this character and thus improve communication rate.
The specification of the telnet options and the way to use them are described in RFC's 854 and 855. The options themselves are described and maintained in IANA documents, like all other TCP/IP parameters. They can be found here.
This is the list of options:
| Code | HEX code | Option |
|---|---|---|
| 0 | 0 | TRANSMIT-BINARY, Binary Transmission. |
| 1 | 1 | ECHO, Echo. |
| 2 | 2 | Reconnection. |
| 3 | 3 | SUPPRESS-GO-AHEAD, Suppress Go Ahead. |
| 4 | 4 | Approx Message Size Negotiation. |
| 5 | 5 | STATUS. |
| 6 | 6 | TIMING-MARK, Timing Mark |
| 7 | 7 | RCTE, Remote Controlled Trans and Echo. |
| 8 | 8 | Output Line Width. |
| 9 | 9 | Output Page Size. |
| 10 | A | NAOCRD, Negotiate About Output Carriage-Return Disposition. |
| 11 | B | NAOHTS, Negotiate About Output Horizontal Tabstops. |
| 12 | C | NAOHTD, Negotiate About Output Horizontal Tab Disposition. |
| 13 | D | NAOFFD, Negotiate About Output Formfeed Disposition. |
| 14 | E | NAOVTS, Negotiate About Vertical Tabstops. |
| 15 | F | NAOVTD, Negotiate About Output Vertcial Tab Disposition. |
| 16 | 10 | NAOLFD, Negotiate About Output Linefeed Disposition. |
| 17 | 11 | Extended ASCII. |
| 18 | 12 | LOGOUT, Logout. |
| 19 | 13 | BM, Byte Macro. |
| 20 | 14 | Data Entry Terminal. |
| 21 | 15 | SUPDUP. |
| 22 | 16 | SUPDUP-OUTPUT, SUPDUP Output. |
| 23 | 17 | SEND-LOCATION, Send Location. |
| 24 | 18 | TERMINAL-TYPE, Terminal Type. |
| 25 | 19 | END-OF-RECORD, End of Record. |
| 26 | 1A | TUID, TACACS User Identification. |
| 27 | 1B | OUTMRK, Output Marking. |
| 28 | 1C | TTYLOC, Terminal Location Number. |
| 29 | 1D | Telnet 3270 Regime. |
| 30 | X.3 PAD. | 1E |
| 31 | 1F | NAWS, Negotiate About Window Size. |
| 32 | 20 | Terminal Speed. |
| 33 | 21 | Remote Flow Control. |
| 34 | 22 | Linemode. |
| 35 | 23 | X Display Location. |
| 36 | 24 | Environment Option. |
| 37 | 25 | AUTHENTICATION, Authentication Option. |
| 38 | 26 | Encryption Option. |
| 39 | 27 | New Environment Option. |
| 40 | 28 | TN3270E. |
| 41 | 29 | XAUTH. |
| 42 | 2A | CHARSET. |
| 43 | 2B | RSP, Telnet Remote Serial Port. |
| 44 | 2C | Com Port Control Option |
| 45 | 2D | Telnet Suppress Local Echo |
| 46 | 2E | Telnet Start TLS |
| 47 | 2F | KERMIT |
| 48 | 30 | SEND-URL |
| 49 | 31 | FORWARD_X |
| 50 - 137 |
32-89 | |
| 138 | 8A | TELOPT PRAGMA LOGON |
| 139 | 8B | TELOPT SSPI LOGON |
| 140 | 8C | TELOPT PRAGMA HEARTBEAT |
| 141 - 254 | 8D-FE | |
| 255 | FF | EXOPL, Extended-Options-List. |