rfc-726

Remote Controlled Transmission and Echoing Telnet option

J. Postel, D. Crocker
date1977-03 streamLegacy statusPROPOSED STANDARD pages16 canonicalhttps://www.rfc-editor.org/rfc/rfc726 doi10.17487/RFC0726

Extracted elements (22)

design-rationale §4

RCTE is intentionally restricted to full-duplex hosts only. The Go-Ahead Telnet feature is fully adequate for half-duplex server hosts and RCTE should not be used with them. In a true character-at-a-time scenario the RCTE overhead is also not justified; it pays off only when input can be buffered into meaningful units.

design-rationale §4

RCTE reduces network traffic in both directions: server-to-user echoing is nearly eliminated, and user-to-server messages are reduced by buffering input into units delimited by break or transmission characters rather than sending each character individually, reducing host wake-ups.

design-rationale §4

RCTE was motivated by RFC 357 (Davidson), which identified echoing delay on satellite links for full-duplex hosts. By having the using host echo locally under server instruction, round-trip delays of thousands of miles per character are avoided while maintaining full server responsiveness and clean terminal output.

design-rationale §5

Transmission class resets are deliberately non-mandatory guidelines rather than hard constraints. The using host is always permitted to send a character at a time, and may transmit break characters without yet knowing they are break characters (type-ahead). When a transmission classes reset arrives mid-buffer, flushing the buffered text as a group is the simpler and probably adequate response rather than rescanning under the new scheme.

interoperability-note §2

RCTE functionally replaces both the Telnet Go-Ahead (IAC GA) mechanism and the Echo Telnet option. Implementations negotiating RCTE must simultaneously ensure Suppress-Go-Ahead is active and the Echo option is inactive. On exit from RCTE, echo mode must revert to the Telnet default (DON'T ECHO / WON'T ECHO), not whatever state was in force before RCTE was negotiated.

normative-requirement §5 REQUIRED

A break character requires the using host to transmit all text accumulated up to and including that character, and causes the using host to suspend print/discard processing on subsequent user input until a new IAC SB RCTE <cmd> IAC SE command is received from the serving host.

normative-requirement §5 RECOMMENDED

A transmission character recommends that the using host transmit all text accumulated up to and including its occurrence. Using hosts are discouraged (but not prohibited) from sending before a transmission character, in the interest of network efficiency.

normative-requirement §2 MUST NOT

Even-numbered <cmd> values greater than zero (right-most bit off) are in error and must be interpreted as equal to zero ('continue current behavior'). When the cmd is such an erroneous even value, the class bytes TC1/TC2 and BC1/BC2 must not be sent.

normative-requirement §2 MUST

Every IAC sent by the user host must be treated as a break character, except the sequence IAC IAC. This ensures Telnet commands always force a transmission boundary.

normative-requirement §2 MUST

If all bits are set in a subnegotiation argument byte such as TC2 or BC2, that byte must be preceded by an IAC flag byte, following the standard Telnet convention of doubling the escape character to use its value as data.

normative-requirement §2 MUST

On terminating use of the RCTE option, the echo mode must return to the default state: DON'T ECHO, WON'T ECHO.

normative-requirement §2 SHOULD

RCTE subnegotiation commands functionally replace the Go-Ahead (IAC GA) Telnet feature and the Echo (IAC ECHO) Telnet option. While RCTE is in use, the Suppress Go-Ahead option should be in force and the Echo option should not be in force.

normative-requirement §5 MUST

The serving host must send a break reset command for every break character transmitted by the using host (except at the start of an interaction), establishing a strict one-to-one correspondence. The server must also send an initial break reset command to establish break classes and echoing mode before receiving any data from the user.

normative-requirement §2 MUST

When the RCTE option is first initiated, no break classes and no transmission classes are in effect. No character is treated as a break or transmission character until the first break reset command is received from the server.

normative-requirement §5 SHOULD

When the user's input buffer fills and further text typed by the user would be lost, the using host should notify the user, for example by ringing the terminal bell.

protocol-element §2

Nine character classes are defined for break and transmission class bitmaps: 1=upper-case (A-Z), 2=lower-case (a-z), 3=digits (0-9), 4=format effectors (<BS><CR><LF><FF><HT><VT>), 5=non-format effector controls including <DEL> and <ESC>, 6=punctuation (.,;:?!), 7=brackets ({[(<>)]}), 8=special symbols ('"/%@$&#+-*=^_|~), 9=space. The sequence <cr><lf> counts as one character and is a single break when class 4 is set.

protocol-element §1

RCTE is assigned Telnet option code 7. Standard Telnet negotiation commands WILL/WON'T/DO/DON'T RCTE are defined: WILL RCTE requests or agrees to send terminal printer control instructions; DO RCTE requests or agrees to accept such instructions. The default state is WON'T RCTE / DON'T RCTE.

security-consideration §6

RCTE echo suppression (cmd bit 1 and/or bit 2) is used in practice to hide sensitive terminal input such as passwords from local display, as shown in the sample interaction where cmd value 7 suppresses all echo during password entry. However, RCTE provides no in-transit confidentiality; the suppressed text is still transmitted in plaintext over the network connection.

security

state-machine §5

Server-initiated resynchronization: server ensures output is flushed (e.g., via Timing Mark Option), sends AO; user flushes all pending user-to-server data, sends SYNCH (DM + INS), and enters initial state; server flushes data preceding DM, then sends a new break reset command. User-initiated resync: user discards buffered data, sends AO, enters step 1; server discards unsent buffered output, sends SYNCH followed by a new break reset command.

state-machine §5

The user Telnet printing control procedure cycles through four steps: (1) read from network—print data items, set classes on command receipt; (2) check terminal input buffer—if empty go to (3), else go to (4); (3) wait for terminal or network input—print spontaneous network data and loop, a network command here is an error; (4) process terminal items—print/skip non-break characters and return to (2), print/skip break characters and return to (1).

wire-format §2

The <cmd> byte uses five bit flags: bit 0 = act on other bits (1) vs. continue current behavior (0); bit 1 = skip (1) or print (0) break character; bit 2 = skip (1) or print (0) text up to break; bit 3 = reset break classes using the following BC1 BC2 bytes; bit 4 = reset transmission classes using TC1 TC2. Valid non-zero cmd values are always odd; even values greater than zero are errors. Class bytes BC and TC use 16-bit bitmaps with the rightmost bit of the second byte (BC2/TC2) representing class 1 and the leftmost bit of the first byte representing the currently undefined class 16.

wire-format §2

The RCTE subnegotiation format is IAC SB RCTE <cmd> [BC1 BC2] [TC1 TC2] IAC SE. <cmd> is a single 8-bit byte. BC1/BC2 (two bytes) optionally follow to specify new break character classes; TC1/TC2 (two bytes) optionally follow to specify new transmission classes. These optional fields are present only when the corresponding bits in <cmd> are set.