TELNET协议规范

简介: TELNET 协议的目的是提供一个相当通用的、双向的、面向八位字节的通信设施。它的主要目标是允许终端设备和面向终端的进程相互连接的标准方法。设想该协议还可用于终端-终端通信(“链接”)和进程-进程通信(分布式计算)。

640.gif


RFC854:TELNET PROTOCOL SPECIFICATION,May 1983


此 RFC 为 ARPA Internet 社区指定了标准。ARPA Internet 上的主机有望采用并实施该标准。


介绍


TELNET 协议的目的是提供一个相当通用的、双向的、面向八位字节的通信设施。它的主要目标是允许终端设备和面向终端的进程相互连接的标准方法。设想该协议还可用于终端-终端通信(“链接”)和进程-进程通信(分布式计算)。


一般考虑


TELNET 连接是一种传输控制协议 (Transmission Control Protocol,TCP) 连接,用于传输散布着 TELNET 控制信息的数据。


TELNET 协议建立在三个主要思想之上:


第一,“网络虚拟终端(Network Virtual Terminal)”的概念;

第二、协商选择原则;

第三,终端和过程的对称视图。


1. 当第一次建立 TELNET 连接时,假定每一端都在“网络虚拟终端”或 NVT 处发起和终止。NVT 是一种虚构的设备,它提供规范终端的标准、网络范围的中间表示。这消除了“服务器”和“用户”主机保持有关彼此终端的特征和终端处理约定的信息的需要。所有主机,包括用户和服务器,都映射它们的本地设备特性和约定,以便看起来好像在通过网络处理 NVT,并且每个主机都可以假设另一方的类似映射。NVT 旨在在过度限制(没有为主机提供足够丰富的词汇以映射到其本地字符集)和过度包容(惩罚具有适度终端的用户)之间取得平衡。


注意:“用户”主机是物理终端正常连接的主机,“服务器”主机是正常提供某些服务的主机。作为替代的观点,即使在终端到终端或进程到进程的通信中也适用,“用户”主机是发起通信的主机。


2. 协商选项原则考虑到这样一个事实,即许多主机希望提供超出 NVT 内可用服务的附加服务,并且许多用户将拥有复杂的终端并希望拥有优雅而不是最小的服务。独立于 TELNET 协议,但在 TELNET 协议中构建了各种“选项”,这些“选项”将被批准并可与“做、不做、会、不会”(DO, DON'T, WILL, WON'T)结构(下面讨论)一起使用,以允许用户和服务器达成一致为他们的 TELNET 连接使用一套更详细(或者可能只是不同的)约定。此类选项可能包括更改字符集、回显模式等。


设置选项使用的基本策略是让任何一方(或双方)发起某个选项生效的请求。然后另一方可以接受或拒绝该请求。如果请求被接受,该选项立即生效;如果它被拒绝,则连接的相关方面将保持为 NVT 的指定。显然,一方可以始终拒绝启用请求,并且绝不能拒绝禁用某些选项的请求,因为所有各方都必须准备好支持 NVT。


选项协商的语法已经建立,如果双方同时请求一个选项,每个人都会将对方的请求视为对自己的肯定确认。


3. 协商语法的对称性可能会导致非终止确认循环——每一方都将传入的命令视为必须确认的新请求而不是确认。为了防止这种循环,以下规则占上风:


A、当事人只能要求更改选项状态;即,一方可能不会发出“请求”仅仅为了宣布它处于什么模式。


B、如果一方收到似乎是进入某种模式的请求,则不应确认该请求。这种不响应对于防止谈判中的无休止循环至关重要。要求对更改模式的请求发送响应——即使模式没有更改。


C、每当一方向另一方发送选项命令时,无论是作为请求还是确认,并且使用该选项将对从第一方发送到第二方的数据的处理产生任何影响,则该命令必须是在希望它生效的点插入数据流中。(应该注意,在请求的传输和确认的接收之间会经过一些时间,这可能是否定的。因此,主机可能希望在请求选项后缓冲数据,直到它知道请求是否是接受或拒绝,以便对用户隐藏“不确定期”。)


当第一次建立 TELNET 连接时,选项请求可能会来回切换,因为每一方都试图从另一方获得最佳服务。然而,除此之外,还可以使用选项来动态修改连接的特性以适应不断变化的本地条件。例如,NVT 使用的传输规则非常适用于许多“一次一行”应用程序(如 BASIC),但不适用于许多“一次字符”应用程序(如 NLS)。当服务器适合本地进程并协商适当的选项时,服务器可能会选择将额外的处理器开销用于“一次字符”规则。然而,当不再需要详细控制时,它可以切换(即协商)回 NVT,而不是永久负担额外的处理开销。


如果进程仅通过重新请求选项来响应拒绝,则进程发起的请求可能会刺激非终止请求循环。为防止发生此类循环,在发生变化之前不应重复被拒绝的请求。在操作上,这可能意味着进程正在运行不同的程序,或者用户给出了另一个命令,或者在给定进程和给定选项的上下文中有意义的任何东西。一个好的经验法则是,仅当来自连接另一端的后续信息或本地人为干预要求时,才会发生重新请求。


选项设计者不应受到可用于选项协商的有限语法的约束。简单语法的目的是让选择变得容易——因为相应地很容易声称对它们一无所知。如果某些特定选项需要比“做、不做、会、不会”更丰富的谈判结构,正确的方法是使用“做、不做、会、不会”来确定双方理解选项,一旦完成,就可以自由使用更奇特的语法。例如,一方可能会发送更改(建立)线路长度的请求。如果它被接受,那么可以使用不同的语法来实际协商行长——这样的“子协商”可能包括用于最小允许、最大允许和所需行长度的字段。重要的概念是这种扩展的协商不应该开始,直到一些先前的(标准)协商确定双方都能够解析扩展的语法。


总之,任何一方都发送 WILL XXX 以表明该方希望(要约)开始执行选项 XXX,DO XXX 和 DON'T XXX 是其肯定和否定的确认;类似地,发送 DO XXX 以表示希望(请求)另一方(即 DO 的接收者)开始执行选项 XXX,WILL XXX 和 WON'T XXX 是肯定和否定确认。由于 NVT 是未启用任何选项时剩下的内容,因此 DON'T 和 WON'T 响应保证使连接处于两端都可以处理的状态。因此,所有主机都可以实现其 TELNET 进程以完全不知道不受支持的选项,只需向(即拒绝)任何无法理解的选项请求返回拒绝。


TELNET 协议已尽可能使服务器-用户对称,以便轻松自然地涵盖用户-用户(链接)和服务器-服务器(合作进程)情况。希望但不是绝对需要,这些选项将进一步推动这一意图。在任何情况下,都明确承认对称是一种操作原则,而不是铁定规则。


有关建立新选项的程序的信息,应查阅配套文档“TELNET 选项规范”。


1、 网络虚拟终端


网络虚拟终端 (Network Virtual Terminal,NVT) 是一种双向字符设备。NVT 有一个打印输出和一个键盘。打印输出响应传入数据,键盘产生传出数据,这些数据通过 TELNET 连接发送,如果需要“回应”,还可以发送到 NVT 的打印输出。“回应”预计不会穿越网络(尽管存在启用“远程”回应操作模式的选项,但不需要主机来实现此选项)。代码集是八位字段中的七位 USASCII,除非在此修改。任何代码转换和时序考虑都是局部问题,不会影响 NVT。


1.1、 数据传输


尽管通过网络的 TELNET 连接本质上是全双工的,但 NVT 将被视为在线路缓冲模式下运行的半双工设备。也就是说,除非和直到协商出相反的选项,以下默认条件与通过 TELNET 连接传输数据有关:


1) 只要本地缓冲区空间的可用性允许,数据应在生成它的主机中累积,直到完整的数据行准备好传输,或者直到出现一些本地定义的显式传输信号。该信号可以由进程或人类用户生成。


这条规则的动机是,对于某些主机来说,处理网络输入中断的成本很高,再加上“回应”不穿越网络的默认 NVT 规范。因此,在其源缓冲一定数量的数据是合理的。许多系统在每条输入线的末端采取一些处理动作(甚至行式打印输出或卡片打孔机也经常以这种方式工作),因此应该在一条线的末端触发传输。另一方面,用户或进程有时可能会发现有必要或希望提供不终止于行尾的数据;因此提醒实现者提供本地信令方法,即所有缓冲的数据应立即传输。


2) 当一个进程已经完成向 NVT 打印输出发送数据并且没有来自 NVT 键盘的排队输入以供进一步处理时(即,当 TELNET 连接一端的进程在没有另一端输入的情况下无法继续时),该进程必须传输 TELNET Go Ahead (GA) 命令。


此规则并不要求在每行末尾从终端发送 TELNET GA 命令,因为服务器主机通常不需要特殊信号(除了行尾或其他本地定义的字符)以便开始处理。相反,TELNET GA 旨在帮助用户的本地主机操作具有“可锁定”键盘的物理半双工终端,例如 IBM 2741。对此类终端的描述可能有助于解释 GA 命令的正确使用.


终端与计算机的连接始终处于用户或计算机的控制之下。双方都不能单方面夺取对方的控制权;相反,控制端必须明确地放弃其控制。在终端,硬件被构造为在每次终止“行”时(即,当用户键入“新行”键时)放弃控制。发生这种情况时,连接的(本地)计算机处理输入数据,决定是否应该生成输出,如果不应该将控制权返回给终端。如果应生成输出,则控制权由计算机保留,直到所有输出都已传输。


通过网络使用这种终端的困难应该是显而易见的。“本地”计算机在看到行尾信号后不再能够决定是否保留控制权;这个决定只能由处理数据的“远程”计算机做出。因此,TELNET GA 命令提供了一种机制,借此“远程”(服务器)计算机可以向“本地”(用户)计算机发出信号,表明是时候将控制权交给终端用户了。它应该在那些时间传输,并且仅在那些应该给予用户终端控制权的时间传输。请注意,过早传输 GA 命令可能会导致输出阻塞,因为用户可能会认为传输系统已暂停,因此他将无法手动调转线路。


当然,上述内容不适用于用户到服务器的通信方向。在这个方向上,GA 可以随时发送,但不需要发送。此外,如果 TELNET 连接用于进程间通信,则不需要在任一方向发送 GA。最后,对于终端到终端的通信,可能在两个方向、一个方向或两个方向都不需要 GA。如果主机计划支持终端到终端的通信,建议主机为用户提供一种手动方式,表明是通过 TELNET 连接发送 GA 的时间;然而,这对 TELNET 过程的实施者没有要求。


请注意,TELNET 模型的对称性要求在 TELNET 连接的每一端都有一个 NVT,至少在概念上是这样。


1.2、 控制功能的标准表示


如本文档简介中所述,TELNET 协议的主要目标是通过网络提供终端设备和面向终端的进程的标准接口。这种互连的早期经验表明,大多数服务器都实现了某些功能,但调用这些功能的方法差异很大。对于与多个服务器系统交互的人类用户来说,这些差异非常令人沮丧。因此,TELNET 定义了其中五个功能的标准表示,如下所述。这些标准表示具有标准但不是必需的含义(使用 TELNET 的其他协议可能需要中断进程 (Interrupt Process,IP) 功能除外);也就是说,不向本地用户提供该功能的系统不需要向网络用户提供该功能,并且可以将该功能的标准表示视为无操作。另一方面,确实向本地用户提供该功能的系统必须向传输该功能的标准表示的网络用户提供相同的功能。


中断进程 (Interrupt Process,IP)


许多系统提供挂起、中断、中止或终止用户进程的操作的功能。当用户认为他的进程处于无休止的循环中,或者无意中激活了不需要的进程时,经常使用此功能。IP 是调用此函数的标准表示。实现者应该注意的是,IP 可能是其他使用 TELNET 的协议所需要的,因此如果要支持这些其他协议,就应该实现。


中止输出 (Abort Output,AO)


许多系统提供了一种功能,允许正在生成输出的进程运行完成(或到达运行完成时将到达的相同停止点)但不将输出发送到用户终端。此外,该功能通常会清除用户终端上已经产生但尚未实际打印(或显示)的任何输出。AO 是调用此函数的标准表示。例如,某些子系统可能通常会接受用户的命令,向用户终端发送一个长文本字符串作为响应,最后通过发送“提示”字符(以 <CR><LF> 开头)来表示准备接受下一个命令到用户终端。如果在文本串传输过程中收到 AO,合理的实现是抑制文本串的其余部分,但传输提示字符和前面的 <CR><LF>。(这可能与收到 IP 时可能采取的操作不同;IP 可能会导致文本字符串的抑制和子系统的退出。)


应该注意,提供此功能的服务器系统可能存在系统外部的缓冲区(在网络和用户的本地主机中)应该清除;执行此操作的适当方法是将“同步”信号(如下所述)传输到用户系统。


你在吗 (Are You There,AYT)


许多系统提供了一种功能,该功能为用户提供一些可见的(例如,可打印的)证据,表明系统仍在运行。当系统意外“静默”很长时间时,用户可能会调用此函数,因为(用户)无法预料的计算长度、系统负载异常重等。AYT 是调用的标准表示这个功能。


擦除字符 (Erase Character,EC)


许多系统提供从用户提供的数据流中删除最后一个前面未删除的字符或“打印位置”*的功能。此功能通常用于在输入错误时编辑键盘输入。EC 是调用此函数的标准表示。


*注意:“打印位置”可能包含多个字符,这些字符是重击的结果,或者是诸如 <char1> BS <char2>...


擦除行 (Erase Line,EL)


许多系统提供了删除当前输入“行”中所有数据的功能。此功能通常用于编辑键盘输入。EL 是调用此函数的标准表示。


1.3、 TELNET“同步”信号


大多数分时系统提供了允许终端用户重新控制“失控”进程的机制;上述 IP 和 AO 功能是这些机制的示例。此类系统在本地使用时,可以访问用户提供的所有信号,无论这些信号是普通字符还是特殊的“带外”信号,例如由电传“BREAK”键或 IBM 2741“ATTN”提供的信号钥匙。当终端通过网络连接到系统时,这不一定正确;网络的流量控制机制可能会导致这样的信号被缓冲到别处,例如在用户的主机中。


为了解决这个问题,引入了 TELNET“同步”机制。同步信号由 TCP 紧急通知和 TELNET 命令数据标记组成。紧急通知不受与 TELNET 连接有关的流量控制的约束,用于调用接收数据流的进程对数据流的特殊处理。在这种模式下,数据流会立即被扫描以寻找如下定义的“感兴趣”信号,丢弃中间数据。TELNET 命令DATA MARK (DM) 是数据流中的同步标记,表示任何特殊信号已经发生,接收方可以恢复数据流的正常处理。


Synch 是通过 TCP 发送操作发送的,并设置了 Urgent 标志并将 DM 作为最后一个(或唯一的)数据八位字节。


当快速连续发送多个同步时,紧急通知可能会合并。由于收到的数量将小于或等于发送的数量,因此无法计算紧急情况。在正常模式下,DM 是无操作;在紧急模式下,它表示紧急处理结束。


如果在发现 DM 之前 TCP 指示紧急数据结束,则 TELNET 应继续对数据流进行特殊处理,直到找到 DM。


如果发现DM后TCP指示更多的Urgent数据,那只能是因为后续的Synch。TELNET 应继续对数据流进行特殊处理,直到找到另一个 DM。


“兴趣”信号定义为:IP、AO 和 AYT(但不是 EC 或 EL)的 TELNET 标准表示;这些标准表示的本地类似物(如果有的话);所有其他 TELNET 命令;可以在不延迟数据流扫描的情况下对其进行操作的其他站点定义的信号。


由于 SYNCH 机制的一个效果是丢弃 Synch 的发送者与其接收者之间的基本上所有字符(除了 TELNET 命令),因此该机制被指定为在需要时清除数据路径的标准方法。例如,如果终端上的用户导致发送 AO,则接收 AO 的服务器(如果它提供该功能)应向用户返回同步。


最后,正如 TELNET 级别需要 TCP 紧急通知作为带外信号一样,其他使用 TELNET 的协议可能需要一个 TELNET 命令,该命令可以被视为带外信号不同的水平。


按照惯例,序列 [IP, Synch] 将用作这样的信号。例如,假设某个使用 TELNET 的其他协议定义了类似于 TELNET 命令 AO 的字符串 STOP。想象一下,该协议的用户希望服务器处理 STOP 字符串,但由于服务器正在处理其他命令,因此连接被阻止。用户应该指示他的系统:


1. 发送TELNET IP字符;

2. 发送TELNET SYNC序列,即:

发送数据标记 (Data Mark,DM) 作为 TCP 紧急模式发送操作中的唯一字符。

3. 发送字符串STOP;并且

4. 发送其他协议的 TELNET DM 模拟,如果有的话。


用户(或代表他的进程)必须传输上述第 2 步的 TELNET SYNCH 序列,以确保 TELNET IP 能够通过服务器的 TELNET 解释器。


Urgent 应该唤醒 TELNET 进程;IP 应该唤醒下一个更高级别的进程。


1.4、 NVT 打印输出和键盘


NVT 打印输出具有未指定的托架宽度和页面长度,可以生成所有 95 个 USASCII 图形(代码 32 到 126)的表示。在 33 个 USASCII 控制代码(0 到 31 和 127)和 128 个未覆盖的代码(128 到 255)中,以下对 NVT 打印输出具有指定的含义:


640.png


此外,以下代码应已定义但不是必需的,对 NVT 打印输出的影响。TELNET 连接的任何一端都不得假定另一方在收到或传输这些信息后将采取或已经采取任何特定操作:


640.png


所有剩余的代码不会导致 NVT 打印输出采取任何操作。


定义的序列“CR LF”将使 NVT 定位在下一个打印行的左边距(例如,序列“LF CR”)。然而,许多系统和终端并没有独立处理 CR 和 LF,必须花一些力气来模拟它们的效果。(例如,某些终端没有独立于 LF 的 CR,但在此类终端上,可以通过退格来模拟 CR。)因此,必须将序列“CR LF”视为单个“新行”字符并在它们的组合动作打算时使用;在实际需要单独回车的情况下,必须使用序列“CR NUL”;并且在其他上下文中必须避免使用 CR 字符。该规则向必须决定是否执行“换行”功能或多退格的系统提供保证,即 TELNET 流包含在 CR 之后的字符,这将允许合理的决定。


请注意,两个方向都需要“CR LF”或“CR NUL”(在默认 ASCII 模式下),以保持 NVT 模型的对称性。尽管在某些情况下(例如,远程回显和抑制继续选项有效)可能知道字符不会发送到实际打印输出,但为了一致性,协议要求插入 NUL在数据流中跟在 CR 之后,而不是跟在 LF 之后。与此相反的是,在将 NVT 应用于本地字符集映射之前,在 CR 之后(在没有明确指定的选项协商的情况下)在数据流中接收到的 NUL 应该被剥离。


NVT 键盘具有用于生成所有 128 个 USASCII 代码的键、键组合或键序列。请注意,虽然许多对 NVT 打印输出没有影响,但 NVT 键盘能够生成它们。


除了这些代码之外,NVT 键盘还应能够生成以下附加代码,除非另有说明,这些代码已定义但不是必需的含义。这些“字符”的实际代码分配在 TELNET 命令部分,因为它们在某种意义上被视为通用的,即使在数据流被解释为其他字符集时也应该可用。


同步 (Synch)


该键允许用户清除他到另一方的数据路径。激活此键会导致在数据流中发送 DM(参见命令部分),并且 TCP 紧急通知与其关联。DM-Urgent 对具有前面定义的必需含义。


中断 (Break,BRK)


提供此代码是因为它是 USASCII 集之外的信号,目前在许多系统中具有本地含义。它旨在指示击中了中断键或注意键。但是请注意,这旨在为需要它的系统提供第 129 个代码,而不是作为 IP 标准表示的同义词。


中断进程 (Interrupt Process,IP)


挂起、中断、中止或终止 NVT 所连接的进程。此外,其他使用 TELNET 的协议的带外信号的一部分。


中止输出 (Abort Output,AO)


允许当前进程(似乎)运行到完成,但不要将其输出发送给用户。此外,向用户发送同步。


你在吗 (Are You There,AYT)


将一些可见(即可打印)的证据发送回 NVT,以证明收到了 AYT。


擦除字符 (Erase Character,EC)


接收者应从数据流中删除最后一个未删除的字符或“打印位置”。


擦除行 (Erase Line,EL)


接收者应从数据流中删除字符,返回到但不包括通过 TELNET 连接发送的最后一个“CR LF”序列。


这些“额外”键以及打印机格式效应器的精神是它们应该代表已经必须从“NVT”到“本地”的映射的自然扩展。正如 NVT 数据字节 68(八进制104)应该映射到“大写 D”的本地代码是什么,所以 EC 字符应该被映射到本地“擦除字符”功能是什么。此外,正如 124(八进制174)的映射在没有“垂直条”字符的环境中有些随意,如果没有本地“擦除行”,EL 字符可能具有某种随意的映射(或根本没有) 设施。格式效应器类似:如果终端确实有“垂直制表符”,那么 VT 的映射是显而易见的,只有当终端没有垂直制表符时,VT 的效果才能不可预测。


2、 远程登录命令结构


所有 TELNET 命令至少包含一个两字节序列:“解释为命令”(Interpret as Command,IAC) 转义字符,后跟命令代码。处理选项协商的命令是三个字节序列,第三个字节是引用选项的代码。选择这种格式是为了更全面地使用“数据空间”——当然,通过基本 NVT 的协商——数据字节与保留命令值的冲突将被最小化,所有此类冲突都需要不便,和低效率,将数据字节“转义”到流中。以目前的设置,只需要将IAC加倍作为数据发送,其他255个代码可以透明传递。


以下是定义的 TELNET 命令。请注意,这些代码和代码序列仅在紧接在 IAC 之前时才具有指示的含义。


640.png


2.1、 连接建立


TELNET TCP 连接建立在用户的端口 U 和服务器的端口 L 之间。服务器在其众所周知的端口 L 上侦听此类连接。由于 TCP 连接是全双工的并由端口对标识,因此服务器可以同时进行许多涉及其端口 L 和不同用户端口 U 的连接。


端口分配


当用于远程用户访问服务主机(即远程终端访问)时,该协议被分配服务器端口 23(八进制27)。即L=23。

相关文章
|
7月前
|
安全 Linux
Linux安装Telnet
Linux安装Telnet
71 0
|
8月前
|
网络协议 安全 Linux
Linux安装telnet
Linux安装telnet
158 0
|
12月前
|
网络协议 Linux
【Telnet】Telnet安装与配置
【Telnet】Telnet安装与配置
444 0
|
安全 网络协议 Oracle
|
Windows
win10没有telnet客户端怎么办
telnet客户端对网络工程师来说是个很有用的服务,可以通过它直接远程登录网络设备,进行管理和配置操作等,不过有用户升级win10系统后却遇到没有telnet客户端的情况,这要怎么办呢,如果你也遇到一样的问题,随小编的步伐一起来看看windows10中没有telnet客户端的详细处理步骤
win10没有telnet客户端怎么办
|
网络协议 Linux 开发者
【Telnet】Telnet安装与配置
Telnet是一种应用层协议,使用于互联网及局域网中,使用虚拟终端的形式,提供双向、以文字字符串为主的命令行接口交互功能。属于TCP/IP协议族的其中之一,是互联网远程登录服务的标准协议和主要方式,常用于服务器的远程控制,可供用户在本地主机执行远程主机上的工作。
857 0
telnet使用
Telnet是常用的远程登录手段,有两种操作模式::Telnet命令模式和Telnet会话模式。连接到 Telnet服务器后,Telnet客户端会自动进入Telnet会话模式,此模式最常见。
1148 0
|
网络协议 安全 Shell
|
网络协议 Linux 数据安全/隐私保护