跳到主要内容

3. 远程登录 -- Telnet 协议 (Remote Login - TELNET Protocol)

3.1 简介 (INTRODUCTION)

Telnet 是用于远程登录的标准互联网应用协议。它提供编码规则, 将客户端 ("用户") 系统上的用户键盘/显示器与远程服务器系统上的命令解释器链接起来。Telnet 协议的一个子集也被纳入其他应用协议中, 例如 FTP 和 SMTP。

Telnet 使用单个 TCP 连接, 其正常数据流 ("网络虚拟终端 (Network Virtual Terminal, NVT)"模式) 是带有嵌入控制功能转义序列的 7 位 ASCII。Telnet 还允许协商许多可选模式和功能。

主要的 Telnet 规范在 RFC-854 [TELNET:1] 中, 而选项在许多其他 RFC 中定义。

3.2 协议逐步分析 (PROTOCOL WALK-THROUGH)

3.2.1 选项协商 (Option Negotiation)

每个 Telnet 实现必须 (MUST) 包含选项协商和子协商机制 [TELNET:2]。

主机必须 (MUST) 仔细遵循 RFC-854 的规则以避免选项协商循环。主机必须 (MUST) 拒绝 (即对 DO/WILL 回复 WONT/DONT) 不支持的选项。选项协商应该 (SHOULD) 在 Telnet 连接的整个生命周期内继续运行 (即使所有请求都被拒绝)。

如果所有选项协商都失败, Telnet 实现必须 (MUST) 默认为并支持 NVT。

3.2.2 Telnet Go-Ahead 功能 (Telnet Go-Ahead Function)

在从不发送 Telnet 命令 Go Ahead (GA) 的主机上, Telnet 服务器必须 (MUST) 尝试协商 Suppress Go Ahead 选项 (即发送"WILL Suppress Go Ahead")。用户或服务器 Telnet 必须 (MUST) 始终接受 Suppress Go Ahead 选项的协商。

当驱动对 GA 没有意义的全双工终端时, 用户 Telnet 实现可以 (MAY) 忽略 GA 命令。

3.2.3 控制功能 (Control Functions)

Telnet 命令列表已扩展为包含 EOR (记录结束), 代码为 239 [TELNET:9]。

用户和服务器 Telnet 可以 (MAY) 支持控制功能 EOR、EC、EL 和 Break, 并且必须 (MUST) 支持 AO、AYT、DM、IP、NOP、SB 和 SE。

主机必须 (MUST) 能够接收并忽略任何它不支持的 Telnet 控制功能。

3.2.4 Telnet "Synch" 信号 (Telnet "Synch" Signal)

当收到"紧急"TCP 数据时, 用户或服务器 Telnet 必须 (MUST) 丢弃所有数据 (Telnet 命令除外), 直到到达 DM (和紧急结束)。

当发送 Telnet IP (中断进程) 时, 用户 Telnet 应该 (SHOULD) 在其后跟随 Telnet "Synch"序列, 即作为 TCP 紧急数据发送序列"IAC IP IAC DM"。TCP 紧急指针指向 DM 八位字节。

当收到 Telnet AO 命令时, 服务器 Telnet 必须 (MUST) 向用户发送 Telnet "Synch"序列, 以刷新输出流。

3.2.5 NVT 打印机和键盘 (NVT Printer and Keyboard)

在 NVT 模式下, Telnet 不应 (SHOULD NOT) 发送高位为 1 的字符, 并且不得 (MUST NOT) 将其作为奇偶校验位发送。将高位传递给应用程序的实现应该 (SHOULD) 协商二进制模式 (参见第 3.2.6 节)。

3.2.6 Telnet 命令结构 (Telnet Command Structure)

由于选项可能出现在数据流中的任何位置, 要作为数据发送的 Telnet 转义字符 (称为 IAC, 值为 255) 必须 (MUST) 加倍。

3.2.7 Telnet 二进制选项 (Telnet Binary Option)

当二进制选项成功协商后, 允许任意 8 位字符。但是, 数据流必须 (MUST) 仍然扫描 IAC 字符, 任何嵌入的 Telnet 命令必须 (MUST) 被遵守, 等于 IAC 的数据字节必须 (MUST) 加倍。其他字符处理 (例如将 CR 替换为 CR NUL 或 CR LF) 不得 (MUST NOT) 进行。

3.2.8 Telnet 终端类型选项 (Telnet Terminal-Type Option)

终端类型选项必须 (MUST) 使用已分配号码 RFC [INTRO:5] 中官方定义的终端类型名称 (当它们对特定终端可用时)。但是, 终端类型选项的接收方必须 (MUST) 接受任何名称。

3.3 具体问题 (SPECIFIC ISSUES)

3.3.1 Telnet 行末约定 (Telnet End-of-Line Convention)

Telnet 协议将序列 CR LF 定义为"行末"。对于终端输入, 这对应于用户终端上按下命令完成或"行末"键; 在 ASCII 终端上, 这是 CR 键, 但也可能标记为"Return"或"Enter"。

当服务器 Telnet 从远程终端接收到 Telnet 行末序列 CR LF 作为输入时, 效果必须 (MUST) 与用户在本地终端上按下"行末"键相同。

用户 Telnet 必须 (MUST) 能够发送以下任何形式: CR LF、CR NUL 和 LF。ASCII 主机上的用户 Telnet 应该 (SHOULD) 有一个用户可控模式, 在用户按下"行末"键时发送 CR LF 或 CR NUL, 并且 CR LF 应该 (SHOULD) 是默认值。

Telnet 行末序列 CR LF 必须 (MUST) 用于发送非终端到计算机的 Telnet 数据 (例如, 服务器 Telnet 发送输出, 或 Telnet 协议纳入另一个应用协议)。

3.3.3 选项要求 (Option Requirements)

每个 Telnet 实现必须 (MUST) 支持二进制选项 [TELNET:3] 和 Suppress Go Ahead 选项 [TELNET:5], 并且应该 (SHOULD) 支持 Echo [TELNET:4]、Status [TELNET:6]、End-of-Record [TELNET:9] 和 Extended Options List [TELNET:8] 选项。

如果本地操作系统提供相应功能, 用户或服务器 Telnet 应该 (SHOULD) 支持窗口大小选项 [TELNET:12]。

3.3.4 选项发起 (Option Initiation)

当 Telnet 协议在客户端/服务器情况下使用时, 服务器应该 (SHOULD) 发起其期望的终端交互模式的协商。

客户端 (用户 Telnet) 应该 (SHOULD) 为用户提供启用和禁用选项协商发起的方法。

3.4 Telnet/用户接口 (TELNET/USER INTERFACE)

3.4.1 字符集透明性 (Character Set Transparency)

用户 Telnet 实现应该 (SHOULD) 能够发送或接收任何 7 位 ASCII 字符。在可能的情况下, 用户主机操作系统对这些字符的任何特殊字符解释应该 (SHOULD) 被绕过, 以便这些字符可以方便地在连接上发送和接收。

某个字符值必须 (MUST) 保留为"转义到命令模式"; 按照惯例, 加倍此字符允许将其作为数据输入。使用的特定字符应该 (SHOULD) 是用户可选择的。

3.4.2 Telnet 命令 (Telnet Commands)

用户 Telnet 程序必须 (MUST) 为用户提供输入任何 Telnet 控制功能 IP、AO 或 AYT 的能力, 并且应该 (SHOULD) 提供输入 EC、EL 和 Break 的能力。

3.4.3 TCP 连接错误 (TCP Connection Errors)

用户 Telnet 程序应该 (SHOULD) 向用户报告传输层报告的任何 TCP 错误。

3.4.4 非默认 Telnet 联系端口 (Non-Default Telnet Contact Port)

用户 Telnet 程序应该 (SHOULD) 允许用户可选地指定服务器 Telnet 主机上的非标准联系端口号。

3.4.5 刷新输出 (Flushing Output)

用户 Telnet 程序应该 (SHOULD) 为用户提供指定发送 IP 时是否应刷新输出的能力。

3.5 Telnet 要求摘要 (TELNET REQUIREMENTS SUMMARY)

功能章节MUSTSHOULDMAYMUST NOT
选项协商机制3.2.1x
避免协商循环3.2.1x
拒绝不支持的选项3.2.1x
默认为 NVT3.2.1x
非 GA 服务器协商 SUPPRESS-GA3.2.2x
支持 SE NOP DM IP AO AYT SB3.2.3x
忽略不支持的控制功能3.2.3x
收到紧急数据时丢弃至 DM3.2.4x
发送 IP 后发送 Synch3.2.4x
收到 AO 时回复 Synch3.2.4x
实现二进制和 Suppress-GA 选项3.3.3x
实现 Echo、Status、EOL 选项3.3.3x
服务器发起模式协商3.3.4x
行末 CR LF 与本地行末相同3.3.1x
能够发送 CR LF、CR NUL 或 LF3.3.1x
用户可输入 IP、AO、AYT3.4.2x
报告 TCP 连接错误3.4.3x