| 1 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|---|
| 2 | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head profile="http://dublincore.org/documents/2008/08/04/dc-html/">
|
|---|
| 3 | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|---|
| 4 | <meta name="robots" content="index,follow">
|
|---|
| 5 | <meta name="creator" content="rfcmarkup version 1.101">
|
|---|
| 6 | <link rel="schema.DC" href="http://purl.org/dc/elements/1.1/">
|
|---|
| 7 | <meta name="DC.Relation.Replaces" content="rfc764">
|
|---|
| 8 | <meta name="DC.Identifier" content="urn:ietf:rfc:854">
|
|---|
| 9 | <meta name="DC.Date.Issued" content="May, 1983">
|
|---|
| 10 | <meta name="DC.Creator" content="Postel, J.">
|
|---|
| 11 | <meta name="DC.Creator" content="Reynolds, J.K.">
|
|---|
| 12 | <meta name="DC.Description.Abstract" content="This is the specification of the Telnet protocol used for remote\nterminal access in the ARPA Internet. The purpose of the TELNET\nProtocol is to provide a fairly general, bi-directional, eight-bit\nbyte oriented communications facility. Its primary goal is to allow a\nstandard method of interfacing terminal devices and terminal-oriented\nprocesses to each other. It is envisioned that the protocol may also\nbe used for terminal-terminal communication ("linking") and process-\nprocess communication (distributed computation). This RFC specifies a\nstandard for the ARPA Internet community. Hosts on the ARPA Internet\nare expected to adopt and implement this standard. Obsoletes NIC\n18639.">
|
|---|
| 13 | <meta name="DC.Title" content="Telnet Protocol Specification">
|
|---|
| 14 |
|
|---|
| 15 | <link rel="icon" href="http://tools.ietf.org/images/rfc.png" type="image/png">
|
|---|
| 16 | <link rel="shortcut icon" href="http://tools.ietf.org/images/rfc.png" type="image/png">
|
|---|
| 17 | <title>RFC 854 - Telnet Protocol Specification</title>
|
|---|
| 18 |
|
|---|
| 19 |
|
|---|
| 20 | <style type="text/css">
|
|---|
| 21 | body {
|
|---|
| 22 | margin: 0px 8px;
|
|---|
| 23 | font-size: 1em;
|
|---|
| 24 | }
|
|---|
| 25 | h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
|
|---|
| 26 | font-weight: bold;
|
|---|
| 27 | line-height: 0pt;
|
|---|
| 28 | display: inline;
|
|---|
| 29 | white-space: pre;
|
|---|
| 30 | font-family: monospace;
|
|---|
| 31 | font-size: 1em;
|
|---|
| 32 | font-weight: bold;
|
|---|
| 33 | }
|
|---|
| 34 | pre {
|
|---|
| 35 | font-size: 1em;
|
|---|
| 36 | margin-top: 0px;
|
|---|
| 37 | margin-bottom: 0px;
|
|---|
| 38 | }
|
|---|
| 39 | .pre {
|
|---|
| 40 | white-space: pre;
|
|---|
| 41 | font-family: monospace;
|
|---|
| 42 | }
|
|---|
| 43 | .header{
|
|---|
| 44 | font-weight: bold;
|
|---|
| 45 | }
|
|---|
| 46 | .newpage {
|
|---|
| 47 | page-break-before: always;
|
|---|
| 48 | }
|
|---|
| 49 | .invisible {
|
|---|
| 50 | text-decoration: none;
|
|---|
| 51 | color: white;
|
|---|
| 52 | }
|
|---|
| 53 | a.selflink {
|
|---|
| 54 | color: black;
|
|---|
| 55 | text-decoration: none;
|
|---|
| 56 | }
|
|---|
| 57 | @media print {
|
|---|
| 58 | body {
|
|---|
| 59 | font-family: monospace;
|
|---|
| 60 | font-size: 10.5pt;
|
|---|
| 61 | }
|
|---|
| 62 | h1, h2, h3, h4, h5, h6 {
|
|---|
| 63 | font-size: 1em;
|
|---|
| 64 | }
|
|---|
| 65 |
|
|---|
| 66 | a:link, a:visited {
|
|---|
| 67 | color: inherit;
|
|---|
| 68 | text-decoration: none;
|
|---|
| 69 | }
|
|---|
| 70 | .noprint {
|
|---|
| 71 | display: none;
|
|---|
| 72 | }
|
|---|
| 73 | }
|
|---|
| 74 | @media screen {
|
|---|
| 75 | .grey, .grey a:link, .grey a:visited {
|
|---|
| 76 | color: #777;
|
|---|
| 77 | }
|
|---|
| 78 | .docinfo {
|
|---|
| 79 | background-color: #EEE;
|
|---|
| 80 | }
|
|---|
| 81 | .top {
|
|---|
| 82 | border-top: 7px solid #EEE;
|
|---|
| 83 | }
|
|---|
| 84 | .bgwhite { background-color: white; }
|
|---|
| 85 | .bgred { background-color: #F44; }
|
|---|
| 86 | .bggrey { background-color: #666; }
|
|---|
| 87 | .bgbrown { background-color: #840; }
|
|---|
| 88 | .bgorange { background-color: #FA0; }
|
|---|
| 89 | .bgyellow { background-color: #EE0; }
|
|---|
| 90 | .bgmagenta{ background-color: #F4F; }
|
|---|
| 91 | .bgblue { background-color: #66F; }
|
|---|
| 92 | .bgcyan { background-color: #4DD; }
|
|---|
| 93 | .bggreen { background-color: #4F4; }
|
|---|
| 94 |
|
|---|
| 95 | .legend { font-size: 90%; }
|
|---|
| 96 | .cplate { font-size: 70%; border: solid grey 1px; }
|
|---|
| 97 | }
|
|---|
| 98 | </style>
|
|---|
| 99 | <!--[if IE]>
|
|---|
| 100 | <style>
|
|---|
| 101 | body {
|
|---|
| 102 | font-size: 13px;
|
|---|
| 103 | margin: 10px 10px;
|
|---|
| 104 | }
|
|---|
| 105 | </style>
|
|---|
| 106 | <![endif]-->
|
|---|
| 107 |
|
|---|
| 108 | <script type="text/javascript"><!--
|
|---|
| 109 | function addHeaderTags() {
|
|---|
| 110 | var spans = document.getElementsByTagName("span");
|
|---|
| 111 | for (var i=0; i < spans.length; i++) {
|
|---|
| 112 | var elem = spans[i];
|
|---|
| 113 | if (elem) {
|
|---|
| 114 | var level = elem.getAttribute("class");
|
|---|
| 115 | if (level == "h1" || level == "h2" || level == "h3" || level == "h4" || level == "h5" || level == "h6") {
|
|---|
| 116 | elem.innerHTML = "<"+level+">"+elem.innerHTML+"</"+level+">";
|
|---|
| 117 | }
|
|---|
| 118 | }
|
|---|
| 119 | }
|
|---|
| 120 | }
|
|---|
| 121 | var legend_html = "Colour legend:<br /> <table> <tr><td>Unknown:</td> <td><span class='cplate bgwhite'> </span></td></tr> <tr><td>Draft:</td> <td><span class='cplate bgred'> </span></td></tr> <tr><td>Informational:</td> <td><span class='cplate bgorange'> </span></td></tr> <tr><td>Experimental:</td> <td><span class='cplate bgyellow'> </span></td></tr> <tr><td>Best Common Practice:</td><td><span class='cplate bgmagenta'> </span></td></tr> <tr><td>Proposed Standard:</td><td><span class='cplate bgblue'> </span></td></tr> <tr><td>Draft Standard:</td> <td><span class='cplate bgcyan'> </span></td></tr> <tr><td>Standard:</td> <td><span class='cplate bggreen'> </span></td></tr> <tr><td>Historic:</td> <td><span class='cplate bggrey'> </span></td></tr> <tr><td>Obsolete:</td> <td><span class='cplate bgbrown'> </span></td></tr> </table>";
|
|---|
| 122 | function showElem(id) {
|
|---|
| 123 | var elem = document.getElementById(id);
|
|---|
| 124 | elem.innerHTML = eval(id+"_html");
|
|---|
| 125 | elem.style.visibility='visible';
|
|---|
| 126 | }
|
|---|
| 127 | function hideElem(id) {
|
|---|
| 128 | var elem = document.getElementById(id);
|
|---|
| 129 | elem.style.visibility='hidden';
|
|---|
| 130 | elem.innerHTML = "";
|
|---|
| 131 | }
|
|---|
| 132 | // -->
|
|---|
| 133 | </script>
|
|---|
| 134 | </head>
|
|---|
| 135 | <body onload="addHeaderTags()">
|
|---|
| 136 | <div style="height: 13px;">
|
|---|
| 137 | <div onmouseover="this.style.cursor='pointer';" onclick="showElem('legend');" onmouseout="hideElem('legend')" style="height: 6px; position: absolute;" class="pre noprint docinfo bggreen" title="Click for colour legend."> </div>
|
|---|
| 138 | <div id="legend" class="docinfo noprint pre legend" style="position:absolute; top: 4px; left: 4ex; visibility:hidden; background-color: white; padding: 4px 9px 5px 7px; border: solid #345 1px; " onmouseover="showElem('legend');" onmouseout="hideElem('legend');">
|
|---|
| 139 | </div>
|
|---|
| 140 | </div>
|
|---|
| 141 | <span class="pre noprint docinfo top">[<a href="http://tools.ietf.org/html/" title="Document search and retrieval page">Docs</a>] [<a href="http://tools.ietf.org/rfc/rfc854.txt" title="Plaintext version of this document">txt</a>|<a href="http://tools.ietf.org/pdf/rfc854" title="PDF version of this document">pdf</a>] [<a href="http://www.rfc-editor.org/errata_search.php?rfc=854">Errata</a>] </span><br>
|
|---|
| 142 | <span class="pre noprint docinfo"> </span><br>
|
|---|
| 143 | <span class="pre noprint docinfo">Updated by: <a href="http://tools.ietf.org/html/rfc5198">5198</a> STANDARD</span><br>
|
|---|
| 144 | <span class="pre noprint docinfo"> <span style="color: #C00;">Errata Exist</span></span><br>
|
|---|
| 145 | <pre>Network Working Group J. Postel
|
|---|
| 146 | Request for Comments: 854 J. Reynolds
|
|---|
| 147 | ISI
|
|---|
| 148 | Obsoletes: NIC 18639 May 1983
|
|---|
| 149 |
|
|---|
| 150 | <span class="h1"><h1>TELNET PROTOCOL SPECIFICATION</h1></span>
|
|---|
| 151 |
|
|---|
| 152 |
|
|---|
| 153 | This RFC specifies a standard for the ARPA Internet community. Hosts on
|
|---|
| 154 | the ARPA Internet are expected to adopt and implement this standard.
|
|---|
| 155 |
|
|---|
| 156 | INTRODUCTION
|
|---|
| 157 |
|
|---|
| 158 | The purpose of the TELNET Protocol is to provide a fairly general,
|
|---|
| 159 | bi-directional, eight-bit byte oriented communications facility. Its
|
|---|
| 160 | primary goal is to allow a standard method of interfacing terminal
|
|---|
| 161 | devices and terminal-oriented processes to each other. It is
|
|---|
| 162 | envisioned that the protocol may also be used for terminal-terminal
|
|---|
| 163 | communication ("linking") and process-process communication
|
|---|
| 164 | (distributed computation).
|
|---|
| 165 |
|
|---|
| 166 | GENERAL CONSIDERATIONS
|
|---|
| 167 |
|
|---|
| 168 | A TELNET connection is a Transmission Control Protocol (TCP)
|
|---|
| 169 | connection used to transmit data with interspersed TELNET control
|
|---|
| 170 | information.
|
|---|
| 171 |
|
|---|
| 172 | The TELNET Protocol is built upon three main ideas: first, the
|
|---|
| 173 | concept of a "Network Virtual Terminal"; second, the principle of
|
|---|
| 174 | negotiated options; and third, a symmetric view of terminals and
|
|---|
| 175 | processes.
|
|---|
| 176 |
|
|---|
| 177 | 1. When a TELNET connection is first established, each end is
|
|---|
| 178 | assumed to originate and terminate at a "Network Virtual Terminal",
|
|---|
| 179 | or NVT. An NVT is an imaginary device which provides a standard,
|
|---|
| 180 | network-wide, intermediate representation of a canonical terminal.
|
|---|
| 181 | This eliminates the need for "server" and "user" hosts to keep
|
|---|
| 182 | information about the characteristics of each other's terminals and
|
|---|
| 183 | terminal handling conventions. All hosts, both user and server, map
|
|---|
| 184 | their local device characteristics and conventions so as to appear to
|
|---|
| 185 | be dealing with an NVT over the network, and each can assume a
|
|---|
| 186 | similar mapping by the other party. The NVT is intended to strike a
|
|---|
| 187 | balance between being overly restricted (not providing hosts a rich
|
|---|
| 188 | enough vocabulary for mapping into their local character sets), and
|
|---|
| 189 | being overly inclusive (penalizing users with modest terminals).
|
|---|
| 190 |
|
|---|
| 191 | NOTE: The "user" host is the host to which the physical terminal
|
|---|
| 192 | is normally attached, and the "server" host is the host which is
|
|---|
| 193 | normally providing some service. As an alternate point of view,
|
|---|
| 194 |
|
|---|
| 195 |
|
|---|
| 196 |
|
|---|
| 197 |
|
|---|
| 198 | <span class="grey">Postel & Reynolds [Page 1]</span>
|
|---|
| 199 | </pre><!--NewPage--><pre class="newpage"><a name="page-2" id="page-2" href="#page-2" class="invisible"> </a>
|
|---|
| 200 | <span class="grey"><a href="http://tools.ietf.org/html/rfc854">RFC 854</a> May 1983</span>
|
|---|
| 201 |
|
|---|
| 202 |
|
|---|
| 203 | applicable even in terminal-to-terminal or process-to-process
|
|---|
| 204 | communications, the "user" host is the host which initiated the
|
|---|
| 205 | communication.
|
|---|
| 206 |
|
|---|
| 207 | 2. The principle of negotiated options takes cognizance of the fact
|
|---|
| 208 | that many hosts will wish to provide additional services over and
|
|---|
| 209 | above those available within an NVT, and many users will have
|
|---|
| 210 | sophisticated terminals and would like to have elegant, rather than
|
|---|
| 211 | minimal, services. Independent of, but structured within the TELNET
|
|---|
| 212 | Protocol are various "options" that will be sanctioned and may be
|
|---|
| 213 | used with the "DO, DON'T, WILL, WON'T" structure (discussed below) to
|
|---|
| 214 | allow a user and server to agree to use a more elaborate (or perhaps
|
|---|
| 215 | just different) set of conventions for their TELNET connection. Such
|
|---|
| 216 | options could include changing the character set, the echo mode, etc.
|
|---|
| 217 |
|
|---|
| 218 | The basic strategy for setting up the use of options is to have
|
|---|
| 219 | either party (or both) initiate a request that some option take
|
|---|
| 220 | effect. The other party may then either accept or reject the
|
|---|
| 221 | request. If the request is accepted the option immediately takes
|
|---|
| 222 | effect; if it is rejected the associated aspect of the connection
|
|---|
| 223 | remains as specified for an NVT. Clearly, a party may always refuse
|
|---|
| 224 | a request to enable, and must never refuse a request to disable some
|
|---|
| 225 | option since all parties must be prepared to support the NVT.
|
|---|
| 226 |
|
|---|
| 227 | The syntax of option negotiation has been set up so that if both
|
|---|
| 228 | parties request an option simultaneously, each will see the other's
|
|---|
| 229 | request as the positive acknowledgment of its own.
|
|---|
| 230 |
|
|---|
| 231 | 3. The symmetry of the negotiation syntax can potentially lead to
|
|---|
| 232 | nonterminating acknowledgment loops -- each party seeing the incoming
|
|---|
| 233 | commands not as acknowledgments but as new requests which must be
|
|---|
| 234 | acknowledged. To prevent such loops, the following rules prevail:
|
|---|
| 235 |
|
|---|
| 236 | a. Parties may only request a change in option status; i.e., a
|
|---|
| 237 | party may not send out a "request" merely to announce what mode it
|
|---|
| 238 | is in.
|
|---|
| 239 |
|
|---|
| 240 | b. If a party receives what appears to be a request to enter some
|
|---|
| 241 | mode it is already in, the request should not be acknowledged.
|
|---|
| 242 | This non-response is essential to prevent endless loops in the
|
|---|
| 243 | negotiation. It is required that a response be sent to requests
|
|---|
| 244 | for a change of mode -- even if the mode is not changed.
|
|---|
| 245 |
|
|---|
| 246 | c. Whenever one party sends an option command to a second party,
|
|---|
| 247 | whether as a request or an acknowledgment, and use of the option
|
|---|
| 248 | will have any effect on the processing of the data being sent from
|
|---|
| 249 | the first party to the second, then the command must be inserted
|
|---|
| 250 | in the data stream at the point where it is desired that it take
|
|---|
| 251 |
|
|---|
| 252 |
|
|---|
| 253 | <span class="grey">Postel & Reynolds [Page 2]</span>
|
|---|
| 254 | </pre><!--NewPage--><pre class="newpage"><a name="page-3" id="page-3" href="#page-3" class="invisible"> </a>
|
|---|
| 255 | <span class="grey"><a href="http://tools.ietf.org/html/rfc854">RFC 854</a> May 1983</span>
|
|---|
| 256 |
|
|---|
| 257 |
|
|---|
| 258 | effect. (It should be noted that some time will elapse between
|
|---|
| 259 | the transmission of a request and the receipt of an
|
|---|
| 260 | acknowledgment, which may be negative. Thus, a host may wish to
|
|---|
| 261 | buffer data, after requesting an option, until it learns whether
|
|---|
| 262 | the request is accepted or rejected, in order to hide the
|
|---|
| 263 | "uncertainty period" from the user.)
|
|---|
| 264 |
|
|---|
| 265 | Option requests are likely to flurry back and forth when a TELNET
|
|---|
| 266 | connection is first established, as each party attempts to get the
|
|---|
| 267 | best possible service from the other party. Beyond that, however,
|
|---|
| 268 | options can be used to dynamically modify the characteristics of the
|
|---|
| 269 | connection to suit changing local conditions. For example, the NVT,
|
|---|
| 270 | as will be explained later, uses a transmission discipline well
|
|---|
| 271 | suited to the many "line at a time" applications such as BASIC, but
|
|---|
| 272 | poorly suited to the many "character at a time" applications such as
|
|---|
| 273 | NLS. A server might elect to devote the extra processor overhead
|
|---|
| 274 | required for a "character at a time" discipline when it was suitable
|
|---|
| 275 | for the local process and would negotiate an appropriate option.
|
|---|
| 276 | However, rather than then being permanently burdened with the extra
|
|---|
| 277 | processing overhead, it could switch (i.e., negotiate) back to NVT
|
|---|
| 278 | when the detailed control was no longer necessary.
|
|---|
| 279 |
|
|---|
| 280 | It is possible for requests initiated by processes to stimulate a
|
|---|
| 281 | nonterminating request loop if the process responds to a rejection by
|
|---|
| 282 | merely re-requesting the option. To prevent such loops from
|
|---|
| 283 | occurring, rejected requests should not be repeated until something
|
|---|
| 284 | changes. Operationally, this can mean the process is running a
|
|---|
| 285 | different program, or the user has given another command, or whatever
|
|---|
| 286 | makes sense in the context of the given process and the given option.
|
|---|
| 287 | A good rule of thumb is that a re-request should only occur as a
|
|---|
| 288 | result of subsequent information from the other end of the connection
|
|---|
| 289 | or when demanded by local human intervention.
|
|---|
| 290 |
|
|---|
| 291 | Option designers should not feel constrained by the somewhat limited
|
|---|
| 292 | syntax available for option negotiation. The intent of the simple
|
|---|
| 293 | syntax is to make it easy to have options -- since it is
|
|---|
| 294 | correspondingly easy to profess ignorance about them. If some
|
|---|
| 295 | particular option requires a richer negotiation structure than
|
|---|
| 296 | possible within "DO, DON'T, WILL, WON'T", the proper tack is to use
|
|---|
| 297 | "DO, DON'T, WILL, WON'T" to establish that both parties understand
|
|---|
| 298 | the option, and once this is accomplished a more exotic syntax can be
|
|---|
| 299 | used freely. For example, a party might send a request to alter
|
|---|
| 300 | (establish) line length. If it is accepted, then a different syntax
|
|---|
| 301 | can be used for actually negotiating the line length -- such a
|
|---|
| 302 | "sub-negotiation" might include fields for minimum allowable, maximum
|
|---|
| 303 | allowable and desired line lengths. The important concept is that
|
|---|
| 304 |
|
|---|
| 305 |
|
|---|
| 306 |
|
|---|
| 307 |
|
|---|
| 308 | <span class="grey">Postel & Reynolds [Page 3]</span>
|
|---|
| 309 | </pre><!--NewPage--><pre class="newpage"><a name="page-4" id="page-4" href="#page-4" class="invisible"> </a>
|
|---|
| 310 | <span class="grey"><a href="http://tools.ietf.org/html/rfc854">RFC 854</a> May 1983</span>
|
|---|
| 311 |
|
|---|
| 312 |
|
|---|
| 313 | such expanded negotiations should never begin until some prior
|
|---|
| 314 | (standard) negotiation has established that both parties are capable
|
|---|
| 315 | of parsing the expanded syntax.
|
|---|
| 316 |
|
|---|
| 317 | In summary, WILL XXX is sent, by either party, to indicate that
|
|---|
| 318 | party's desire (offer) to begin performing option XXX, DO XXX and
|
|---|
| 319 | DON'T XXX being its positive and negative acknowledgments; similarly,
|
|---|
| 320 | DO XXX is sent to indicate a desire (request) that the other party
|
|---|
| 321 | (i.e., the recipient of the DO) begin performing option XXX, WILL XXX
|
|---|
| 322 | and WON'T XXX being the positive and negative acknowledgments. Since
|
|---|
| 323 | the NVT is what is left when no options are enabled, the DON'T and
|
|---|
| 324 | WON'T responses are guaranteed to leave the connection in a state
|
|---|
| 325 | which both ends can handle. Thus, all hosts may implement their
|
|---|
| 326 | TELNET processes to be totally unaware of options that are not
|
|---|
| 327 | supported, simply returning a rejection to (i.e., refusing) any
|
|---|
| 328 | option request that cannot be understood.
|
|---|
| 329 |
|
|---|
| 330 | As much as possible, the TELNET protocol has been made server-user
|
|---|
| 331 | symmetrical so that it easily and naturally covers the user-user
|
|---|
| 332 | (linking) and server-server (cooperating processes) cases. It is
|
|---|
| 333 | hoped, but not absolutely required, that options will further this
|
|---|
| 334 | intent. In any case, it is explicitly acknowledged that symmetry is
|
|---|
| 335 | an operating principle rather than an ironclad rule.
|
|---|
| 336 |
|
|---|
| 337 | A companion document, "TELNET Option Specifications," should be
|
|---|
| 338 | consulted for information about the procedure for establishing new
|
|---|
| 339 | options.
|
|---|
| 340 |
|
|---|
| 341 | THE NETWORK VIRTUAL TERMINAL
|
|---|
| 342 |
|
|---|
| 343 | The Network Virtual Terminal (NVT) is a bi-directional character
|
|---|
| 344 | device. The NVT has a printer and a keyboard. The printer responds
|
|---|
| 345 | to incoming data and the keyboard produces outgoing data which is
|
|---|
| 346 | sent over the TELNET connection and, if "echoes" are desired, to the
|
|---|
| 347 | NVT's printer as well. "Echoes" will not be expected to traverse the
|
|---|
| 348 | network (although options exist to enable a "remote" echoing mode of
|
|---|
| 349 | operation, no host is required to implement this option). The code
|
|---|
| 350 | set is seven-bit USASCII in an eight-bit field, except as modified
|
|---|
| 351 | herein. Any code conversion and timing considerations are local
|
|---|
| 352 | problems and do not affect the NVT.
|
|---|
| 353 |
|
|---|
| 354 | TRANSMISSION OF DATA
|
|---|
| 355 |
|
|---|
| 356 | Although a TELNET connection through the network is intrinsically
|
|---|
| 357 | full duplex, the NVT is to be viewed as a half-duplex device
|
|---|
| 358 | operating in a line-buffered mode. That is, unless and until
|
|---|
| 359 |
|
|---|
| 360 |
|
|---|
| 361 |
|
|---|
| 362 |
|
|---|
| 363 | <span class="grey">Postel & Reynolds [Page 4]</span>
|
|---|
| 364 | </pre><!--NewPage--><pre class="newpage"><a name="page-5" id="page-5" href="#page-5" class="invisible"> </a>
|
|---|
| 365 | <span class="grey"><a href="http://tools.ietf.org/html/rfc854">RFC 854</a> May 1983</span>
|
|---|
| 366 |
|
|---|
| 367 |
|
|---|
| 368 | options are negotiated to the contrary, the following default
|
|---|
| 369 | conditions pertain to the transmission of data over the TELNET
|
|---|
| 370 | connection:
|
|---|
| 371 |
|
|---|
| 372 | 1) Insofar as the availability of local buffer space permits,
|
|---|
| 373 | data should be accumulated in the host where it is generated
|
|---|
| 374 | until a complete line of data is ready for transmission, or
|
|---|
| 375 | until some locally-defined explicit signal to transmit occurs.
|
|---|
| 376 | This signal could be generated either by a process or by a
|
|---|
| 377 | human user.
|
|---|
| 378 |
|
|---|
| 379 | The motivation for this rule is the high cost, to some hosts,
|
|---|
| 380 | of processing network input interrupts, coupled with the
|
|---|
| 381 | default NVT specification that "echoes" do not traverse the
|
|---|
| 382 | network. Thus, it is reasonable to buffer some amount of data
|
|---|
| 383 | at its source. Many systems take some processing action at the
|
|---|
| 384 | end of each input line (even line printers or card punches
|
|---|
| 385 | frequently tend to work this way), so the transmission should
|
|---|
| 386 | be triggered at the end of a line. On the other hand, a user
|
|---|
| 387 | or process may sometimes find it necessary or desirable to
|
|---|
| 388 | provide data which does not terminate at the end of a line;
|
|---|
| 389 | therefore implementers are cautioned to provide methods of
|
|---|
| 390 | locally signaling that all buffered data should be transmitted
|
|---|
| 391 | immediately.
|
|---|
| 392 |
|
|---|
| 393 | 2) When a process has completed sending data to an NVT printer
|
|---|
| 394 | and has no queued input from the NVT keyboard for further
|
|---|
| 395 | processing (i.e., when a process at one end of a TELNET
|
|---|
| 396 | connection cannot proceed without input from the other end),
|
|---|
| 397 | the process must transmit the TELNET Go Ahead (GA) command.
|
|---|
| 398 |
|
|---|
| 399 | This rule is not intended to require that the TELNET GA command
|
|---|
| 400 | be sent from a terminal at the end of each line, since server
|
|---|
| 401 | hosts do not normally require a special signal (in addition to
|
|---|
| 402 | end-of-line or other locally-defined characters) in order to
|
|---|
| 403 | commence processing. Rather, the TELNET GA is designed to help
|
|---|
| 404 | a user's local host operate a physically half duplex terminal
|
|---|
| 405 | which has a "lockable" keyboard such as the IBM 2741. A
|
|---|
| 406 | description of this type of terminal may help to explain the
|
|---|
| 407 | proper use of the GA command.
|
|---|
| 408 |
|
|---|
| 409 | The terminal-computer connection is always under control of
|
|---|
| 410 | either the user or the computer. Neither can unilaterally
|
|---|
| 411 | seize control from the other; rather the controlling end must
|
|---|
| 412 | relinguish its control explicitly. At the terminal end, the
|
|---|
| 413 | hardware is constructed so as to relinquish control each time
|
|---|
| 414 | that a "line" is terminated (i.e., when the "New Line" key is
|
|---|
| 415 | typed by the user). When this occurs, the attached (local)
|
|---|
| 416 |
|
|---|
| 417 |
|
|---|
| 418 | <span class="grey">Postel & Reynolds [Page 5]</span>
|
|---|
| 419 | </pre><!--NewPage--><pre class="newpage"><a name="page-6" id="page-6" href="#page-6" class="invisible"> </a>
|
|---|
| 420 | <span class="grey"><a href="http://tools.ietf.org/html/rfc854">RFC 854</a> May 1983</span>
|
|---|
| 421 |
|
|---|
| 422 |
|
|---|
| 423 | computer processes the input data, decides if output should be
|
|---|
| 424 | generated, and if not returns control to the terminal. If
|
|---|
| 425 | output should be generated, control is retained by the computer
|
|---|
| 426 | until all output has been transmitted.
|
|---|
| 427 |
|
|---|
| 428 | The difficulties of using this type of terminal through the
|
|---|
| 429 | network should be obvious. The "local" computer is no longer
|
|---|
| 430 | able to decide whether to retain control after seeing an
|
|---|
| 431 | end-of-line signal or not; this decision can only be made by
|
|---|
| 432 | the "remote" computer which is processing the data. Therefore,
|
|---|
| 433 | the TELNET GA command provides a mechanism whereby the "remote"
|
|---|
| 434 | (server) computer can signal the "local" (user) computer that
|
|---|
| 435 | it is time to pass control to the user of the terminal. It
|
|---|
| 436 | should be transmitted at those times, and only at those times,
|
|---|
| 437 | when the user should be given control of the terminal. Note
|
|---|
| 438 | that premature transmission of the GA command may result in the
|
|---|
| 439 | blocking of output, since the user is likely to assume that the
|
|---|
| 440 | transmitting system has paused, and therefore he will fail to
|
|---|
| 441 | turn the line around manually.
|
|---|
| 442 |
|
|---|
| 443 | The foregoing, of course, does not apply to the user-to-server
|
|---|
| 444 | direction of communication. In this direction, GAs may be sent at
|
|---|
| 445 | any time, but need not ever be sent. Also, if the TELNET
|
|---|
| 446 | connection is being used for process-to-process communication, GAs
|
|---|
| 447 | need not be sent in either direction. Finally, for
|
|---|
| 448 | terminal-to-terminal communication, GAs may be required in
|
|---|
| 449 | neither, one, or both directions. If a host plans to support
|
|---|
| 450 | terminal-to-terminal communication it is suggested that the host
|
|---|
| 451 | provide the user with a means of manually signaling that it is
|
|---|
| 452 | time for a GA to be sent over the TELNET connection; this,
|
|---|
| 453 | however, is not a requirement on the implementer of a TELNET
|
|---|
| 454 | process.
|
|---|
| 455 |
|
|---|
| 456 | Note that the symmetry of the TELNET model requires that there is
|
|---|
| 457 | an NVT at each end of the TELNET connection, at least
|
|---|
| 458 | conceptually.
|
|---|
| 459 |
|
|---|
| 460 | STANDARD REPRESENTATION OF CONTROL FUNCTIONS
|
|---|
| 461 |
|
|---|
| 462 | As stated in the Introduction to this document, the primary goal
|
|---|
| 463 | of the TELNET protocol is the provision of a standard interfacing
|
|---|
| 464 | of terminal devices and terminal-oriented processes through the
|
|---|
| 465 | network. Early experiences with this type of interconnection have
|
|---|
| 466 | shown that certain functions are implemented by most servers, but
|
|---|
| 467 | that the methods of invoking these functions differ widely. For a
|
|---|
| 468 | human user who interacts with several server systems, these
|
|---|
| 469 | differences are highly frustrating. TELNET, therefore, defines a
|
|---|
| 470 | standard representation for five of these functions, as described
|
|---|
| 471 |
|
|---|
| 472 |
|
|---|
| 473 | <span class="grey">Postel & Reynolds [Page 6]</span>
|
|---|
| 474 | </pre><!--NewPage--><pre class="newpage"><a name="page-7" id="page-7" href="#page-7" class="invisible"> </a>
|
|---|
| 475 | <span class="grey"><a href="http://tools.ietf.org/html/rfc854">RFC 854</a> May 1983</span>
|
|---|
| 476 |
|
|---|
| 477 |
|
|---|
| 478 | below. These standard representations have standard, but not
|
|---|
| 479 | required, meanings (with the exception that the Interrupt Process
|
|---|
| 480 | (IP) function may be required by other protocols which use
|
|---|
| 481 | TELNET); that is, a system which does not provide the function to
|
|---|
| 482 | local users need not provide it to network users and may treat the
|
|---|
| 483 | standard representation for the function as a No-operation. On
|
|---|
| 484 | the other hand, a system which does provide the function to a
|
|---|
| 485 | local user is obliged to provide the same function to a network
|
|---|
| 486 | user who transmits the standard representation for the function.
|
|---|
| 487 |
|
|---|
| 488 | Interrupt Process (IP)
|
|---|
| 489 |
|
|---|
| 490 | Many systems provide a function which suspends, interrupts,
|
|---|
| 491 | aborts, or terminates the operation of a user process. This
|
|---|
| 492 | function is frequently used when a user believes his process is
|
|---|
| 493 | in an unending loop, or when an unwanted process has been
|
|---|
| 494 | inadvertently activated. IP is the standard representation for
|
|---|
| 495 | invoking this function. It should be noted by implementers
|
|---|
| 496 | that IP may be required by other protocols which use TELNET,
|
|---|
| 497 | and therefore should be implemented if these other protocols
|
|---|
| 498 | are to be supported.
|
|---|
| 499 |
|
|---|
| 500 | Abort Output (AO)
|
|---|
| 501 |
|
|---|
| 502 | Many systems provide a function which allows a process, which
|
|---|
| 503 | is generating output, to run to completion (or to reach the
|
|---|
| 504 | same stopping point it would reach if running to completion)
|
|---|
| 505 | but without sending the output to the user's terminal.
|
|---|
| 506 | Further, this function typically clears any output already
|
|---|
| 507 | produced but not yet actually printed (or displayed) on the
|
|---|
| 508 | user's terminal. AO is the standard representation for
|
|---|
| 509 | invoking this function. For example, some subsystem might
|
|---|
| 510 | normally accept a user's command, send a long text string to
|
|---|
| 511 | the user's terminal in response, and finally signal readiness
|
|---|
| 512 | to accept the next command by sending a "prompt" character
|
|---|
| 513 | (preceded by <CR><LF>) to the user's terminal. If the AO were
|
|---|
| 514 | received during the transmission of the text string, a
|
|---|
| 515 | reasonable implementation would be to suppress the remainder of
|
|---|
| 516 | the text string, but transmit the prompt character and the
|
|---|
| 517 | preceding <CR><LF>. (This is possibly in distinction to the
|
|---|
| 518 | action which might be taken if an IP were received; the IP
|
|---|
| 519 | might cause suppression of the text string and an exit from the
|
|---|
| 520 | subsystem.)
|
|---|
| 521 |
|
|---|
| 522 | It should be noted, by server systems which provide this
|
|---|
| 523 | function, that there may be buffers external to the system (in
|
|---|
| 524 |
|
|---|
| 525 |
|
|---|
| 526 |
|
|---|
| 527 |
|
|---|
| 528 | <span class="grey">Postel & Reynolds [Page 7]</span>
|
|---|
| 529 | </pre><!--NewPage--><pre class="newpage"><a name="page-8" id="page-8" href="#page-8" class="invisible"> </a>
|
|---|
| 530 | <span class="grey"><a href="http://tools.ietf.org/html/rfc854">RFC 854</a> May 1983</span>
|
|---|
| 531 |
|
|---|
| 532 |
|
|---|
| 533 | the network and the user's local host) which should be cleared;
|
|---|
| 534 | the appropriate way to do this is to transmit the "Synch"
|
|---|
| 535 | signal (described below) to the user system.
|
|---|
| 536 |
|
|---|
| 537 | Are You There (AYT)
|
|---|
| 538 |
|
|---|
| 539 | Many systems provide a function which provides the user with
|
|---|
| 540 | some visible (e.g., printable) evidence that the system is
|
|---|
| 541 | still up and running. This function may be invoked by the user
|
|---|
| 542 | when the system is unexpectedly "silent" for a long time,
|
|---|
| 543 | because of the unanticipated (by the user) length of a
|
|---|
| 544 | computation, an unusually heavy system load, etc. AYT is the
|
|---|
| 545 | standard representation for invoking this function.
|
|---|
| 546 |
|
|---|
| 547 | Erase Character (EC)
|
|---|
| 548 |
|
|---|
| 549 | Many systems provide a function which deletes the last
|
|---|
| 550 | preceding undeleted character or "print position"* from the
|
|---|
| 551 | stream of data being supplied by the user. This function is
|
|---|
| 552 | typically used to edit keyboard input when typing mistakes are
|
|---|
| 553 | made. EC is the standard representation for invoking this
|
|---|
| 554 | function.
|
|---|
| 555 |
|
|---|
| 556 | *NOTE: A "print position" may contain several characters
|
|---|
| 557 | which are the result of overstrikes, or of sequences such as
|
|---|
| 558 | <char1> BS <char2>...
|
|---|
| 559 |
|
|---|
| 560 | Erase Line (EL)
|
|---|
| 561 |
|
|---|
| 562 | Many systems provide a function which deletes all the data in
|
|---|
| 563 | the current "line" of input. This function is typically used
|
|---|
| 564 | to edit keyboard input. EL is the standard representation for
|
|---|
| 565 | invoking this function.
|
|---|
| 566 |
|
|---|
| 567 | THE TELNET "SYNCH" SIGNAL
|
|---|
| 568 |
|
|---|
| 569 | Most time-sharing systems provide mechanisms which allow a
|
|---|
| 570 | terminal user to regain control of a "runaway" process; the IP and
|
|---|
| 571 | AO functions described above are examples of these mechanisms.
|
|---|
| 572 | Such systems, when used locally, have access to all of the signals
|
|---|
| 573 | supplied by the user, whether these are normal characters or
|
|---|
| 574 | special "out of band" signals such as those supplied by the
|
|---|
| 575 | teletype "BREAK" key or the IBM 2741 "ATTN" key. This is not
|
|---|
| 576 | necessarily true when terminals are connected to the system
|
|---|
| 577 | through the network; the network's flow control mechanisms may
|
|---|
| 578 | cause such a signal to be buffered elsewhere, for example in the
|
|---|
| 579 | user's host.
|
|---|
| 580 |
|
|---|
| 581 |
|
|---|
| 582 |
|
|---|
| 583 | <span class="grey">Postel & Reynolds [Page 8]</span>
|
|---|
| 584 | </pre><!--NewPage--><pre class="newpage"><a name="page-9" id="page-9" href="#page-9" class="invisible"> </a>
|
|---|
| 585 | <span class="grey"><a href="http://tools.ietf.org/html/rfc854">RFC 854</a> May 1983</span>
|
|---|
| 586 |
|
|---|
| 587 |
|
|---|
| 588 | To counter this problem, the TELNET "Synch" mechanism is
|
|---|
| 589 | introduced. A Synch signal consists of a TCP Urgent notification,
|
|---|
| 590 | coupled with the TELNET command DATA MARK. The Urgent
|
|---|
| 591 | notification, which is not subject to the flow control pertaining
|
|---|
| 592 | to the TELNET connection, is used to invoke special handling of
|
|---|
| 593 | the data stream by the process which receives it. In this mode,
|
|---|
| 594 | the data stream is immediately scanned for "interesting" signals
|
|---|
| 595 | as defined below, discarding intervening data. The TELNET command
|
|---|
| 596 | DATA MARK (DM) is the synchronizing mark in the data stream which
|
|---|
| 597 | indicates that any special signal has already occurred and the
|
|---|
| 598 | recipient can return to normal processing of the data stream.
|
|---|
| 599 |
|
|---|
| 600 | The Synch is sent via the TCP send operation with the Urgent
|
|---|
| 601 | flag set and the DM as the last (or only) data octet.
|
|---|
| 602 |
|
|---|
| 603 | When several Synchs are sent in rapid succession, the Urgent
|
|---|
| 604 | notifications may be merged. It is not possible to count Urgents
|
|---|
| 605 | since the number received will be less than or equal the number
|
|---|
| 606 | sent. When in normal mode, a DM is a no operation; when in urgent
|
|---|
| 607 | mode, it signals the end of the urgent processing.
|
|---|
| 608 |
|
|---|
| 609 | If TCP indicates the end of Urgent data before the DM is found,
|
|---|
| 610 | TELNET should continue the special handling of the data stream
|
|---|
| 611 | until the DM is found.
|
|---|
| 612 |
|
|---|
| 613 | If TCP indicates more Urgent data after the DM is found, it can
|
|---|
| 614 | only be because of a subsequent Synch. TELNET should continue
|
|---|
| 615 | the special handling of the data stream until another DM is
|
|---|
| 616 | found.
|
|---|
| 617 |
|
|---|
| 618 | "Interesting" signals are defined to be: the TELNET standard
|
|---|
| 619 | representations of IP, AO, and AYT (but not EC or EL); the local
|
|---|
| 620 | analogs of these standard representations (if any); all other
|
|---|
| 621 | TELNET commands; other site-defined signals which can be acted on
|
|---|
| 622 | without delaying the scan of the data stream.
|
|---|
| 623 |
|
|---|
| 624 | Since one effect of the SYNCH mechanism is the discarding of
|
|---|
| 625 | essentially all characters (except TELNET commands) between the
|
|---|
| 626 | sender of the Synch and its recipient, this mechanism is specified
|
|---|
| 627 | as the standard way to clear the data path when that is desired.
|
|---|
| 628 | For example, if a user at a terminal causes an AO to be
|
|---|
| 629 | transmitted, the server which receives the AO (if it provides that
|
|---|
| 630 | function at all) should return a Synch to the user.
|
|---|
| 631 |
|
|---|
| 632 | Finally, just as the TCP Urgent notification is needed at the
|
|---|
| 633 | TELNET level as an out-of-band signal, so other protocols which
|
|---|
| 634 | make use of TELNET may require a TELNET command which can be
|
|---|
| 635 | viewed as an out-of-band signal at a different level.
|
|---|
| 636 |
|
|---|
| 637 |
|
|---|
| 638 | <span class="grey">Postel & Reynolds [Page 9]</span>
|
|---|
| 639 | </pre><!--NewPage--><pre class="newpage"><a name="page-10" id="page-10" href="#page-10" class="invisible"> </a>
|
|---|
| 640 | <span class="grey"><a href="http://tools.ietf.org/html/rfc854">RFC 854</a> May 1983</span>
|
|---|
| 641 |
|
|---|
| 642 |
|
|---|
| 643 | By convention the sequence [IP, Synch] is to be used as such a
|
|---|
| 644 | signal. For example, suppose that some other protocol, which uses
|
|---|
| 645 | TELNET, defines the character string STOP analogously to the
|
|---|
| 646 | TELNET command AO. Imagine that a user of this protocol wishes a
|
|---|
| 647 | server to process the STOP string, but the connection is blocked
|
|---|
| 648 | because the server is processing other commands. The user should
|
|---|
| 649 | instruct his system to:
|
|---|
| 650 |
|
|---|
| 651 | 1. Send the TELNET IP character;
|
|---|
| 652 |
|
|---|
| 653 | 2. Send the TELNET SYNC sequence, that is:
|
|---|
| 654 |
|
|---|
| 655 | Send the Data Mark (DM) as the only character
|
|---|
| 656 | in a TCP urgent mode send operation.
|
|---|
| 657 |
|
|---|
| 658 | 3. Send the character string STOP; and
|
|---|
| 659 |
|
|---|
| 660 | 4. Send the other protocol's analog of the TELNET DM, if any.
|
|---|
| 661 |
|
|---|
| 662 | The user (or process acting on his behalf) must transmit the
|
|---|
| 663 | TELNET SYNCH sequence of step 2 above to ensure that the TELNET IP
|
|---|
| 664 | gets through to the server's TELNET interpreter.
|
|---|
| 665 |
|
|---|
| 666 | The Urgent should wake up the TELNET process; the IP should
|
|---|
| 667 | wake up the next higher level process.
|
|---|
| 668 |
|
|---|
| 669 | THE NVT PRINTER AND KEYBOARD
|
|---|
| 670 |
|
|---|
| 671 | The NVT printer has an unspecified carriage width and page length
|
|---|
| 672 | and can produce representations of all 95 USASCII graphics (codes
|
|---|
| 673 | 32 through 126). Of the 33 USASCII control codes (0 through 31
|
|---|
| 674 | and 127), and the 128 uncovered codes (128 through 255), the
|
|---|
| 675 | following have specified meaning to the NVT printer:
|
|---|
| 676 |
|
|---|
| 677 | NAME CODE MEANING
|
|---|
| 678 |
|
|---|
| 679 | NULL (NUL) 0 No Operation
|
|---|
| 680 | Line Feed (LF) 10 Moves the printer to the
|
|---|
| 681 | next print line, keeping the
|
|---|
| 682 | same horizontal position.
|
|---|
| 683 | Carriage Return (CR) 13 Moves the printer to the left
|
|---|
| 684 | margin of the current line.
|
|---|
| 685 |
|
|---|
| 686 |
|
|---|
| 687 |
|
|---|
| 688 |
|
|---|
| 689 |
|
|---|
| 690 |
|
|---|
| 691 |
|
|---|
| 692 |
|
|---|
| 693 | <span class="grey">Postel & Reynolds [Page 10]</span>
|
|---|
| 694 | </pre><!--NewPage--><pre class="newpage"><a name="page-11" id="page-11" href="#page-11" class="invisible"> </a>
|
|---|
| 695 | <span class="grey"><a href="http://tools.ietf.org/html/rfc854">RFC 854</a> May 1983</span>
|
|---|
| 696 |
|
|---|
| 697 |
|
|---|
| 698 | In addition, the following codes shall have defined, but not
|
|---|
| 699 | required, effects on the NVT printer. Neither end of a TELNET
|
|---|
| 700 | connection may assume that the other party will take, or will
|
|---|
| 701 | have taken, any particular action upon receipt or transmission
|
|---|
| 702 | of these:
|
|---|
| 703 |
|
|---|
| 704 | BELL (BEL) 7 Produces an audible or
|
|---|
| 705 | visible signal (which does
|
|---|
| 706 | NOT move the print head).
|
|---|
| 707 | Back Space (BS) 8 Moves the print head one
|
|---|
| 708 | character position towards
|
|---|
| 709 | the left margin.
|
|---|
| 710 | Horizontal Tab (HT) 9 Moves the printer to the
|
|---|
| 711 | next horizontal tab stop.
|
|---|
| 712 | It remains unspecified how
|
|---|
| 713 | either party determines or
|
|---|
| 714 | establishes where such tab
|
|---|
| 715 | stops are located.
|
|---|
| 716 | Vertical Tab (VT) 11 Moves the printer to the
|
|---|
| 717 | next vertical tab stop. It
|
|---|
| 718 | remains unspecified how
|
|---|
| 719 | either party determines or
|
|---|
| 720 | establishes where such tab
|
|---|
| 721 | stops are located.
|
|---|
| 722 | Form Feed (FF) 12 Moves the printer to the top
|
|---|
| 723 | of the next page, keeping
|
|---|
| 724 | the same horizontal position.
|
|---|
| 725 |
|
|---|
| 726 | All remaining codes do not cause the NVT printer to take any
|
|---|
| 727 | action.
|
|---|
| 728 |
|
|---|
| 729 | The sequence "CR LF", as defined, will cause the NVT to be
|
|---|
| 730 | positioned at the left margin of the next print line (as would,
|
|---|
| 731 | for example, the sequence "LF CR"). However, many systems and
|
|---|
| 732 | terminals do not treat CR and LF independently, and will have to
|
|---|
| 733 | go to some effort to simulate their effect. (For example, some
|
|---|
| 734 | terminals do not have a CR independent of the LF, but on such
|
|---|
| 735 | terminals it may be possible to simulate a CR by backspacing.)
|
|---|
| 736 | Therefore, the sequence "CR LF" must be treated as a single "new
|
|---|
| 737 | line" character and used whenever their combined action is
|
|---|
| 738 | intended; the sequence "CR NUL" must be used where a carriage
|
|---|
| 739 | return alone is actually desired; and the CR character must be
|
|---|
| 740 | avoided in other contexts. This rule gives assurance to systems
|
|---|
| 741 | which must decide whether to perform a "new line" function or a
|
|---|
| 742 | multiple-backspace that the TELNET stream contains a character
|
|---|
| 743 | following a CR that will allow a rational decision.
|
|---|
| 744 |
|
|---|
| 745 | Note that "CR LF" or "CR NUL" is required in both directions
|
|---|
| 746 |
|
|---|
| 747 |
|
|---|
| 748 | <span class="grey">Postel & Reynolds [Page 11]</span>
|
|---|
| 749 | </pre><!--NewPage--><pre class="newpage"><a name="page-12" id="page-12" href="#page-12" class="invisible"> </a>
|
|---|
| 750 | <span class="grey"><a href="http://tools.ietf.org/html/rfc854">RFC 854</a> May 1983</span>
|
|---|
| 751 |
|
|---|
| 752 |
|
|---|
| 753 | (in the default ASCII mode), to preserve the symmetry of the
|
|---|
| 754 | NVT model. Even though it may be known in some situations
|
|---|
| 755 | (e.g., with remote echo and suppress go ahead options in
|
|---|
| 756 | effect) that characters are not being sent to an actual
|
|---|
| 757 | printer, nonetheless, for the sake of consistency, the protocol
|
|---|
| 758 | requires that a NUL be inserted following a CR not followed by
|
|---|
| 759 | a LF in the data stream. The converse of this is that a NUL
|
|---|
| 760 | received in the data stream after a CR (in the absence of
|
|---|
| 761 | options negotiations which explicitly specify otherwise) should
|
|---|
| 762 | be stripped out prior to applying the NVT to local character
|
|---|
| 763 | set mapping.
|
|---|
| 764 |
|
|---|
| 765 | The NVT keyboard has keys, or key combinations, or key sequences,
|
|---|
| 766 | for generating all 128 USASCII codes. Note that although many
|
|---|
| 767 | have no effect on the NVT printer, the NVT keyboard is capable of
|
|---|
| 768 | generating them.
|
|---|
| 769 |
|
|---|
| 770 | In addition to these codes, the NVT keyboard shall be capable of
|
|---|
| 771 | generating the following additional codes which, except as noted,
|
|---|
| 772 | have defined, but not reguired, meanings. The actual code
|
|---|
| 773 | assignments for these "characters" are in the TELNET Command
|
|---|
| 774 | section, because they are viewed as being, in some sense, generic
|
|---|
| 775 | and should be available even when the data stream is interpreted
|
|---|
| 776 | as being some other character set.
|
|---|
| 777 |
|
|---|
| 778 | Synch
|
|---|
| 779 |
|
|---|
| 780 | This key allows the user to clear his data path to the other
|
|---|
| 781 | party. The activation of this key causes a DM (see command
|
|---|
| 782 | section) to be sent in the data stream and a TCP Urgent
|
|---|
| 783 | notification is associated with it. The pair DM-Urgent is to
|
|---|
| 784 | have required meaning as defined previously.
|
|---|
| 785 |
|
|---|
| 786 | Break (BRK)
|
|---|
| 787 |
|
|---|
| 788 | This code is provided because it is a signal outside the
|
|---|
| 789 | USASCII set which is currently given local meaning within many
|
|---|
| 790 | systems. It is intended to indicate that the Break Key or the
|
|---|
| 791 | Attention Key was hit. Note, however, that this is intended to
|
|---|
| 792 | provide a 129th code for systems which require it, not as a
|
|---|
| 793 | synonym for the IP standard representation.
|
|---|
| 794 |
|
|---|
| 795 | Interrupt Process (IP)
|
|---|
| 796 |
|
|---|
| 797 | Suspend, interrupt, abort or terminate the process to which the
|
|---|
| 798 | NVT is connected. Also, part of the out-of-band signal for
|
|---|
| 799 | other protocols which use TELNET.
|
|---|
| 800 |
|
|---|
| 801 |
|
|---|
| 802 |
|
|---|
| 803 | <span class="grey">Postel & Reynolds [Page 12]</span>
|
|---|
| 804 | </pre><!--NewPage--><pre class="newpage"><a name="page-13" id="page-13" href="#page-13" class="invisible"> </a>
|
|---|
| 805 | <span class="grey"><a href="http://tools.ietf.org/html/rfc854">RFC 854</a> May 1983</span>
|
|---|
| 806 |
|
|---|
| 807 |
|
|---|
| 808 | Abort Output (AO)
|
|---|
| 809 |
|
|---|
| 810 | Allow the current process to (appear to) run to completion, but
|
|---|
| 811 | do not send its output to the user. Also, send a Synch to the
|
|---|
| 812 | user.
|
|---|
| 813 |
|
|---|
| 814 | Are You There (AYT)
|
|---|
| 815 |
|
|---|
| 816 | Send back to the NVT some visible (i.e., printable) evidence
|
|---|
| 817 | that the AYT was received.
|
|---|
| 818 |
|
|---|
| 819 | Erase Character (EC)
|
|---|
| 820 |
|
|---|
| 821 | The recipient should delete the last preceding undeleted
|
|---|
| 822 | character or "print position" from the data stream.
|
|---|
| 823 |
|
|---|
| 824 | Erase Line (EL)
|
|---|
| 825 |
|
|---|
| 826 | The recipient should delete characters from the data stream
|
|---|
| 827 | back to, but not including, the last "CR LF" sequence sent over
|
|---|
| 828 | the TELNET connection.
|
|---|
| 829 |
|
|---|
| 830 | The spirit of these "extra" keys, and also the printer format
|
|---|
| 831 | effectors, is that they should represent a natural extension of
|
|---|
| 832 | the mapping that already must be done from "NVT" into "local".
|
|---|
| 833 | Just as the NVT data byte 68 (104 octal) should be mapped into
|
|---|
| 834 | whatever the local code for "uppercase D" is, so the EC character
|
|---|
| 835 | should be mapped into whatever the local "Erase Character"
|
|---|
| 836 | function is. Further, just as the mapping for 124 (174 octal) is
|
|---|
| 837 | somewhat arbitrary in an environment that has no "vertical bar"
|
|---|
| 838 | character, the EL character may have a somewhat arbitrary mapping
|
|---|
| 839 | (or none at all) if there is no local "Erase Line" facility.
|
|---|
| 840 | Similarly for format effectors: if the terminal actually does
|
|---|
| 841 | have a "Vertical Tab", then the mapping for VT is obvious, and
|
|---|
| 842 | only when the terminal does not have a vertical tab should the
|
|---|
| 843 | effect of VT be unpredictable.
|
|---|
| 844 |
|
|---|
| 845 | TELNET COMMAND STRUCTURE
|
|---|
| 846 |
|
|---|
| 847 | All TELNET commands consist of at least a two byte sequence: the
|
|---|
| 848 | "Interpret as Command" (IAC) escape character followed by the code
|
|---|
| 849 | for the command. The commands dealing with option negotiation are
|
|---|
| 850 | three byte sequences, the third byte being the code for the option
|
|---|
| 851 | referenced. This format was chosen so that as more comprehensive use
|
|---|
| 852 | of the "data space" is made -- by negotiations from the basic NVT, of
|
|---|
| 853 | course -- collisions of data bytes with reserved command values will
|
|---|
| 854 | be minimized, all such collisions requiring the inconvenience, and
|
|---|
| 855 |
|
|---|
| 856 |
|
|---|
| 857 |
|
|---|
| 858 | <span class="grey">Postel & Reynolds [Page 13]</span>
|
|---|
| 859 | </pre><!--NewPage--><pre class="newpage"><a name="page-14" id="page-14" href="#page-14" class="invisible"> </a>
|
|---|
| 860 | <span class="grey"><a href="http://tools.ietf.org/html/rfc854">RFC 854</a> May 1983</span>
|
|---|
| 861 |
|
|---|
| 862 |
|
|---|
| 863 | inefficiency, of "escaping" the data bytes into the stream. With the
|
|---|
| 864 | current set-up, only the IAC need be doubled to be sent as data, and
|
|---|
| 865 | the other 255 codes may be passed transparently.
|
|---|
| 866 |
|
|---|
| 867 | The following are the defined TELNET commands. Note that these codes
|
|---|
| 868 | and code sequences have the indicated meaning only when immediately
|
|---|
| 869 | preceded by an IAC.
|
|---|
| 870 |
|
|---|
| 871 | NAME CODE MEANING
|
|---|
| 872 |
|
|---|
| 873 | SE 240 End of subnegotiation parameters.
|
|---|
| 874 | NOP 241 No operation.
|
|---|
| 875 | Data Mark 242 The data stream portion of a Synch.
|
|---|
| 876 | This should always be accompanied
|
|---|
| 877 | by a TCP Urgent notification.
|
|---|
| 878 | Break 243 NVT character BRK.
|
|---|
| 879 | Interrupt Process 244 The function IP.
|
|---|
| 880 | Abort output 245 The function AO.
|
|---|
| 881 | Are You There 246 The function AYT.
|
|---|
| 882 | Erase character 247 The function EC.
|
|---|
| 883 | Erase Line 248 The function EL.
|
|---|
| 884 | Go ahead 249 The GA signal.
|
|---|
| 885 | SB 250 Indicates that what follows is
|
|---|
| 886 | subnegotiation of the indicated
|
|---|
| 887 | option.
|
|---|
| 888 | WILL (option code) 251 Indicates the desire to begin
|
|---|
| 889 | performing, or confirmation that
|
|---|
| 890 | you are now performing, the
|
|---|
| 891 | indicated option.
|
|---|
| 892 | WON'T (option code) 252 Indicates the refusal to perform,
|
|---|
| 893 | or continue performing, the
|
|---|
| 894 | indicated option.
|
|---|
| 895 | DO (option code) 253 Indicates the request that the
|
|---|
| 896 | other party perform, or
|
|---|
| 897 | confirmation that you are expecting
|
|---|
| 898 | the other party to perform, the
|
|---|
| 899 | indicated option.
|
|---|
| 900 | DON'T (option code) 254 Indicates the demand that the
|
|---|
| 901 | other party stop performing,
|
|---|
| 902 | or confirmation that you are no
|
|---|
| 903 | longer expecting the other party
|
|---|
| 904 | to perform, the indicated option.
|
|---|
| 905 | IAC 255 Data Byte 255.
|
|---|
| 906 |
|
|---|
| 907 |
|
|---|
| 908 |
|
|---|
| 909 |
|
|---|
| 910 |
|
|---|
| 911 |
|
|---|
| 912 |
|
|---|
| 913 | <span class="grey">Postel & Reynolds [Page 14]</span>
|
|---|
| 914 | </pre><!--NewPage--><pre class="newpage"><a name="page-15" id="page-15" href="#page-15" class="invisible"> </a>
|
|---|
| 915 | <span class="grey"><a href="http://tools.ietf.org/html/rfc854">RFC 854</a> May 1983</span>
|
|---|
| 916 |
|
|---|
| 917 |
|
|---|
| 918 | CONNECTION ESTABLISHMENT
|
|---|
| 919 |
|
|---|
| 920 | The TELNET TCP connection is established between the user's port U
|
|---|
| 921 | and the server's port L. The server listens on its well known port L
|
|---|
| 922 | for such connections. Since a TCP connection is full duplex and
|
|---|
| 923 | identified by the pair of ports, the server can engage in many
|
|---|
| 924 | simultaneous connections involving its port L and different user
|
|---|
| 925 | ports U.
|
|---|
| 926 |
|
|---|
| 927 | Port Assignment
|
|---|
| 928 |
|
|---|
| 929 | When used for remote user access to service hosts (i.e., remote
|
|---|
| 930 | terminal access) this protocol is assigned server port 23
|
|---|
| 931 | (27 octal). That is L=23.
|
|---|
| 932 |
|
|---|
| 933 |
|
|---|
| 934 |
|
|---|
| 935 |
|
|---|
| 936 |
|
|---|
| 937 |
|
|---|
| 938 |
|
|---|
| 939 |
|
|---|
| 940 |
|
|---|
| 941 |
|
|---|
| 942 |
|
|---|
| 943 |
|
|---|
| 944 |
|
|---|
| 945 |
|
|---|
| 946 |
|
|---|
| 947 |
|
|---|
| 948 |
|
|---|
| 949 |
|
|---|
| 950 |
|
|---|
| 951 |
|
|---|
| 952 |
|
|---|
| 953 |
|
|---|
| 954 |
|
|---|
| 955 |
|
|---|
| 956 |
|
|---|
| 957 |
|
|---|
| 958 |
|
|---|
| 959 |
|
|---|
| 960 |
|
|---|
| 961 |
|
|---|
| 962 |
|
|---|
| 963 |
|
|---|
| 964 |
|
|---|
| 965 |
|
|---|
| 966 |
|
|---|
| 967 |
|
|---|
| 968 | Postel & Reynolds [Page 15]
|
|---|
| 969 |
|
|---|
| 970 | </pre><br>
|
|---|
| 971 | <span class="noprint"><small><small>Html markup produced by rfcmarkup 1.101, available from
|
|---|
| 972 | <a href="http://tools.ietf.org/tools/rfcmarkup/">http://tools.ietf.org/tools/rfcmarkup/</a>
|
|---|
| 973 | </small></small></span>
|
|---|
| 974 |
|
|---|
| 975 | </body></html>
|
|---|