TELNET协议规范
ARPA Internet上的主机被要求采⽤并实现此标准。
介绍
TELNET Protocol的⽬的是提供⼀个相对通⽤的,双向的,⾯向⼋位字节的通信⽅法。它主要的⽬标是允许接⼝终端设备的标准⽅法和⾯向终端的相互作⽤。可以预见到,此协议也可被⽤于终端到终端的通信和处理到处理的通信(分布式计算)。
⼀般考虑
⼀个TELNET连接是⼀个⽤于传输控制协议的传送数据的。TELNET 协议是建⽴在以下三个想法上的:⾸先是⽹络虚拟终端的概念;其次是对话选项的⽅法;最后是终端和处理的协调。
1. 当⼀个TELNET连接被初次建⽴时,每⼀端都被假设使⽤了⽹络虚拟终端,也就是NVT。NVT是⼀个想象中的标准设备通⽤设备的代
表。这就消除了“服务器”和“⽤户”机要了解对⽅机器终端的特点,⽽终端可以直接处理对话。所有的主机,⽤户端的和服务器端的,它们⾃⼰本地的设备特点因此在⽹络上可以作为⼀种NVT处理,任何⼀个都可以
认为对⽅使⽤的是相同特点的设备。NVT倾向于不过多地限制(提供了⼀个相应⽐较丰富的映射到本地设备的字符集),也不是包括⼀切的(它要求⽤户使⽤适当的终端)。注意:⽤户机通常是与处理终端连接的主机,服务器机通常是提供某种服务的机器。从另⼀点看,在终端到终端或进程到进程的通信上,⽤户机是发起通信的机器。
2. 规定选项的原理将以下事实考虑在内,许多机器希望在现在的NVT上提供另外的服务,多数⽤户有⽐较复杂的终端,它们也就希望⼀
种⽐较完整的⽽不是最⼩的服务。独⽴的,但是存在于 TELNET 协议的不同选项⽀持这些需求,它们使⽤"DO, DON'T, WILL,
WON'T" 结构允许⽤户机和服务器建⽴建⽴⼀种更加精巧的TELNET会话连接。这种选项包括改变字符集,响应模式等等。设置选项的基本策略是任⼀⽅(或者两者)初始化要求⼀个选项⽣效的请求。另⼀⽅可以接受也可以拒绝这⼀请求。如果接受请求,此选项⽴刻⽣效;如果被拒绝,连接仍然保持基本的NVT的连接属性。很明显,⼀⽅可以拒绝另⼀⽅关于启⽤某⼀选项的请求,但是不能拒绝另⼀⽅关于使⼀选项失效的请求,因为双⽅必须准备⽀持NVT。对话选项语法的建⽴使在双⽅都发出请求某⼀选项⽣效的请求时,另⼀⽅可以直接认为收到对⽅的确认信息。
3. 这种对称式的对话语法潜在地引起了⼀个不可终⽌的确认环--任何⼀⽅都将收到的确认信息看作是请
求,⽽不是⼀个确认信息。为了防
⽌这种循环的出现,有下⾯的规则:
a. 任何⼀⽅仅可以要求对选项状态的变化:例如,⼀⽅不可以发出请求,仅仅说明它在什么样的选项状态下。
b. 如果⼀⽅接收到好象是请求的信息,请求进⼊⼀个已经进⼊的状态,此信息将被看作是⼀个确认消息。这种⾮响应从本质上防⽌了不
可终⽌的对话的循环。如果要求发送⼀个要求改变状态的请求,即使状态并未改变。
c. ⽆论何时,⼀⽅发送选项命令到另⼀⽅,⽆论作为⼀个请求或者是⼀个确认消息,选项的使⽤将对发送的数据处理有影响,这样命令
应该被插⼊到希望发⽣作⽤的数据流中的数据点之前。(应该注意,传送请求和收到确认消息之间有⼀定的时间间隔,这是被动⽅式的。因此,⼀个主机希望在要求⼀个选项后缓存数据,直到它知道它的请求是否被接受,这样就可以使这段不不确定时间对⽤户不可见。)选项的请求可以在建⽴TELNET连接时⼗分频繁地来往交换,因为每⼀⽅都希望从对⽅得到更好的服务。
除此以外,选项也可以在连接持续过程中动态改变来适应本地机器条件的变化。例如,NVT(它将以后被详细解释)对于许多“⼀次⼀⾏”的应⽤程序,如BASIC是⼗分适⽤的,⽽对于如NLS的“⼀次⼀字”的应⽤程序却不怎么好⽤。服务器可能被选择作为“⼀次⼀字”法则来适应在其上运⾏的本地进程,它将发起对话以达到合适的选项状态。然⽽,相对于永久地负责这种多余的处理负担;它可以通过会话,在不需要这样的选项状态下回到NVT状态。由⼀个进程发起的请求可以导致⼀个不可终⽌的请求循环,如果此进程对⼀个拒绝请求的响应是再次要求此选项。为了防⽌这样循环的发⽣,被拒绝的请求在其它事情发⽣变化之前不能被重复请求。这可能意味着,进程运⾏另外⼀个程序,或者⽤户发送另外的命令,或者⽤户对于环境或选项的改变。
⽐较好的⽅法是,预请求应该作为由另⼀端发送信息的结果⽽发⽣,或者由于⼈为介⼊⽽发⽣。选项的设计者不应该因为对于选项会话的种种限制⽽感觉到伸不开⼿脚。⼀般语法的⽬的是更容易地拥有选项--因为表⽰对它们的忽视也是容易的。
如果特定的选项需要除"DO, DON'T, WILL, WON'T"以外的更丰富的结构,正确的⽅针是使⽤"DO, DON'T, WILL, WON'T"来建⽴连接解释这种新结构,当这⼀解释⼯作完成时,就可以⾃由地使⽤这⼀新结构了。例如,⼀⽅可能发送请求改变(或建⽴)每⾏的长度。如果接受了这些,对于对话的不同⾏长度可以使⽤不同的语法来表⽰--“⼦对话”可以包括⼀个域表⽰最⼤允许的,最⼩允许的和希望的长度。重要概念是这样的扩充的会话应该直到双⽅建⽴了标准的会话并且能够解释这种扩充的语法之后再进⾏。
总的来说,WILL XXX发送时说明⼀⽅希望执⾏选项XXX,DO XXX 和DON'T XXX作为确定的不确定的响应;同样,DO XXX被作为⼀种请求发送给另⼀⽅来启动选项XXX,WILL XXX 和WON'T将被作为确定和不确定的响应。因为NVT是没有任何选项时的结果,DON'T和WON'T响应将保证使连接最终保持于这种没有任何选项的状态。因此,所有主机可以不⽀持不理解的选项,它仅仅需要返回这种选项的请求即可。
尽可能的,TELNET协议被⽤作服务器-⽤户的对称,这样,它就可以更容易⽽⾃然地处理⽤户-⽤户和服务器-服务器的情况。⽤选项来扩展这⼀功能是被希望实现的,但不是必要的。在任何情况下,对称是⼀个运⾏的准则⽽不是固定的准则多次被明确提出。⼀个⽐较⽂
档,“TELNET选项说明”,可以被⽤于对建⽴新选项过程信息的参考。
⽹络虚拟终端⽹络虚拟终端(NVT)是⼀个双向字符设备。NVT有⼀个显⽰设备和⼀个键盘。显⽰设备响应到达的数据,键盘负责通过TELNET连接发送数据,如果需要回显,也应该在NVT的显⽰设备上显⽰。对于⽹络上的回显并不要求(虽然确实存在这个“远程”回显选项,但是主机必不是必须实现此选项)。字符集是由七位ASCII码组成的,⽽保存在⼋位的域中。任何字符的转换和计时⽅⾯的考虑都是本地的问题,这不影响NVT的⼯作。
数据传送⽅⾯,虽然TELNET连接是全双⼯的,NVT却是在线缓冲状态下的半双⼯设备。传送数据虽然T
ELNET连接是全双⼯的,在线缓冲模式下,NVT却被当作半双⼯的设备。此信号可以由进程或者⽤户产⽣。对于⼀些主机处理⽹络输⼊中断,或与默认的不进⾏远程回显的NVT说明的主机来说,此规则的代价是⾼昂的。因此,在源点缓存⼀些数据是有理由的。⼀些系统在每个输⼊⾏未采⽤⼀些操作(即使是⾏打印机或打卡机也经常采⽤这种⽅法),这样可以在每⾏未开始发送。在另⼀⽅⾯,⽤户或者进程可以有时发觉提供在⾏未不中断的数据是有⽤的⽽且是必须的;因此,也应该在实现在本地能够识别这种信号并把这些数据⽴刻发送的⽅法和机制。当⼀个进程已经完成将数据发送到对⽅的显⽰设备⽽且也没有缓存的输⼊数据时时,进程必须发送TELNET Go Ahead (GA)命令。
这个规则并不是要求TELNET GA命令必须由双⽅终端发送,因为服务器主机通常不要求特定的信号来继续进程。但是,此命令的设计可以帮助⽤户的本地主机操作⼀个物理上半双⼯的终端,它如果IBM2741⼀样拥有可锁定的键盘。对此种类型终端的描述有助于解释GA命令的正确使⽤。终端和计算机的连接总是在计算机或⽤户的控制之下。任何⼀⽅都不能够隐式地从另⼀⽅获得控制权;控制权必须显式地从⼀⽅转移到另⼀⽅。
在终端⼀⽅,设置硬件在每⼀⾏结束时放弃控制权(例如,当⽤户按下回车键时)。当这种情况发⽣时,本地计算机处理输⼊数据,决定是否输出,如果不需要,将控制权回送给终端。如果需要产⽣输出,计算机将保有控制权直到输出数据发送完毕。在⽹络上使⽤这种终端的困难是显⽽易见的。“本地”计算机不知道在读到⾏未符号时是否应该继续保持控制权;这个问题的决定权在远地处理此数据的计
算机。因
此,TELNET GA命令提供了⼀种机制让远程计算机能够通知本地计算机,让它将控制权转交给⽤户终端。在⽤户需要控制权时,此信号应该也只能在此时发送。注意:过早地发送GA命令会使输出数据阻塞,因为⽤户可以假定传送系统暂停,因此不能将⼀⾏结束。当然,前述内容不能够⽤于⽤户到服务器⽅⾯的通信⽅⾯。在这个⽅⾯,GA命令可以在任何时候发送,可以根本不⽤发送。同样,如果TELNET连接被⽤于进程到进程的通信,也不需要发送GA命令。
最后,对于终端到终端的通信,可以在两端都需要GA命令,也可以在⼀端,也可以两端都需要。如果主机希望⽀持终端到终端的通信主机应该提供⼀种让⽤户⾃由发送GA命令的⽅法;然⽽,对于⼀个TELNET进程⽽⾔,这并不是必须的。注意:TELNET模式的对称性要求在概念上,两端中的⼀端⾄少是⼀个NVT。控制函数的标准表⽰如要本⽂的介绍中所说的,TELNET协议的⽬的是提供⼀种⽹络上⾯向终端进程和终端设备的标准接⼝。
这种类型互连的先前的经验告诉我们,在许多主机上已经实现了类似的功能,但它们的实现⽅法却差别很⼤。对于接触这些系统的⽤户⽽⾔,这些差别将是令⼈头痛的。因此,TELNET定义了以下功能的五种标准表⽰。这种标准表⽰有⼀定的标准的意义,但这也不是必须的(例外是中断处理函功能要其它使⽤TELNET的协议执⾏);这也就是说,系统不提供给本地⽤户的功能也不可以不提供给远程⽤户,它可以将标准表⽰作为⾮操作的功能。
在另⼀⽅⾯,给本地⽤户提供此功能的系统必须也向传送此功能标准表⽰的远程⽤户提供此功能。
中断处理(IP)⼀些系统提供可以暂停,中断,放弃或终⽌⽤户进程操作的功能。当⽤户确定它的进程处于不可结束的循环中,或不经意地激活了⼀个进程时经常使⽤此功能。IP是使⽤此功能的标准表⽰。实现者应该注意的是:使⽤TELNET的其它协议可能也需要IP,因此,如果需要⽀持其它协议就应该实现IP。放弃输出(AO) 许多系统提供此功能,它允许产⽣输出的进程到达类似操作结束的点,⽽不将输出发送到⽤户的终端。更深⼀层的,此功能通常清除已产⽣的所有输出,⽽不显⽰到⽤户的终端上。AO是使⽤此功能的标准表⽰。
例如,⼀些⼦系统可能通常接受⽤户命令,发送长⽂本串到⽤户终端,最后发送⼀个提⽰⽤户允许接收下⼀命令的提⽰符到⽤户终端。如果在传送⽂本串的过程中接收到AO命令,将会不再发送剩余的字符串,⽽直接显⽰提⽰符告知⽤户可以输⼊下⼀命令。(这与接收到IP之后的操作可能有所不同;IP会放弃发送剩余的字符串⽽且退出⼦系统。)应该注意到,使⽤提供此功能的服务器系统时外部缓冲区(在⽹络和⽤户本地主机上)也被清除;完成的正确⽅法是向⽤户系统发送“Synch”信号。
你在此吗(AYT)许多系统提供⽤户这样的功能,让⽤户知道是否正在运⾏。此功能在系统由于不可预知长度运算,或系统负载重的情况下长时间不响应时由⽤户发起。AYT是使⽤此功能的标准表⽰。
删除字符(EC)许多系统提供此功能⽤于删除最近相邻的不可删除字符或⽤户提供数据流的最近相邻的
“显⽰位置”。此功能通常⽤于编辑键盘错误的输⼊。EC是使⽤此功能的标准表⽰。注意:“显⽰位置”可能包括多于⼀个的字符,它们是过多键⼊的结果或者如下格式的字符串:<char1> BS <char2>...
删除⾏(EL)许多系统提供此功能⽤于删除当前输⼊⾏中的所有数据。此功能通常被⽤于是编辑键盘输⼊。EL是使⽤此功能的标准表⽰。
TELNET的"Synch"信号⼤部分时分系统提供⼀种允许终端⽤户重新获得失控进程的机制;上述的IP和AO功能就是此机制的⼀个例⼦。这些系统,当被⽤于本地时,访问由⽤户提供的所有信号,⽆论此信号是⼀般字符还是不可显⽰的字符如电传中的“BREAK”或IBM 2741中的“ATTN”键。当系统通过⽹络连接时这种情况不⼀定就是准确的;⽹络流量控制机制可能导致⼀个信号被缓存于⽹络中某处,例如在⽤户的主机中。为了克服这个问题,引⼊了TELNET的“Synch”机制。⼀个Synch信号包括⼀个TCP 紧急信号和TELNET命令 DATA MARK。
紧急信号,它不受限于限制TELNET的流量控制,它可以在接收到进程引发特定的数据处理。
在这种模式中,此数据流⽴即被看作是“有重⼤意义的”,⽽抛弃其它数据。
TELNET命令DATA MARK (DM)是数据流中的同步标志,它指⽰任何特定的信号已经发⽣过了,接收可以返回到正常处理其它数据的状态中了。Synch通过TCP发送操作完成,它和紧急标志及在最后的DM标
志⼀起发送。当⼀些Synch信号被连续快速发送时紧急信号可能被淹没。不可能对紧急信号记数,因为这⼀数字有可能⼩于也可能等于已经发送的数⽬。当处于通常模式下,DM不是⼀个操作;当处于紧急模型下,它指⽰紧急处理的结束。如果TCP指⽰紧急数据结束前发现DM,TELNET应该继续操作数据流直到遇到DM为⽌。如果TCP在DM之后指⽰⼜有⼀些紧急数据,那只能是因为是⼀串Synch。TELNET应该继续操作数据流直到遇到DM。
“有意义的”信号被定义为:IP,AO和AYT(但不是EC或EL)的TELNET标准定义;如果有的话,本地对这些标准定义的模拟;所有其它TELNET命令;其它站点定义的不需要拖后数据流的信号。因为SYNCH命令的另⼀个作⽤是抛弃所有在接收者和发送者之间随了TELNET 命令之外的字符,如果需要时,此机制被指定为标准⽅法来清理数据路径。例如,如果⼀个在终端的⽤户传送⼀个AO命令,收到此命令的服务器(如果此服务器提供此功能)应该返回⼀个SYNCH给⽤户。
最后,正如需要TCP紧急信号作为供他们使⽤的命令⼀样,其它使⽤TELNET协议的协议也需要类似的命令。这通过使⽤[IP,SYNCH]就可以达到。例如,假设其它⼀些使⽤TELNET的协议定义了类型于AO命令的停⽌字符串。试想此协议的⽤户希望服务器来处理停⽌字符串,但连接因为服务器正在处理别的命令⽽被阻塞。⽤户应该使它的系统做以上⼯作:
1. 发送TELNET IP字符;
2. 发送TELNET SYNC串,这就是说:发送DM作为在TCP紧急模式发送操作下的唯⼀字符串。
3. 发送字符串STOP,并且
4. 发送其它协议的类型于TELNET DM的命令。
⽤户(或者进程)必须象步2⼀样重新发送TELNET SYNCH序列来确保TELNET IP到达服务器的TELNET解释器。“紧急”将唤醒TELNET进程;IP应该唤醒更⾼级的进程。NVT显⽰和键盘 NVT显⽰有⼀个未指定的⾏宽和页⾯⼤⼩,并且可以产⽣代表ASCII码的字符。
对于33个控制字符和另外128个没有使⽤的字符,将指定给显⽰:
NULL (NUL) 0 ⽆操作;
Line Feed (LF) 10 将显⽰移动到下⼀⾏的同⼀垂直位置。
Carriage Return (CR) 13 将显⽰移⾄当前⾏的左边界处。
telnet协议全称
另外,还应该定义如下字符(但这不是必须的),它们对显⽰也有作⽤。TELNET的任何⼀⽅都不会假定另⼀⽅会在接收或传送时采取以下⾏动:
BELL (BEL) 7 响铃或者给出⼀个可视的信号(这并不移动显⽰位置)。
Back Space (BS) 8将显⽰向左移⼀个位置。
Horizontal Tab (HT) 9 将显⽰移⾄下⼀个制表位。现在还未指定任何⼀⽅如何决定制表位的位置究竟在什么地⽅。
Horizontal Tab (HT) 9 将显⽰移⾄下⼀个垂直制表位。现在还未指定任何⼀⽅如何决定制表位的位置究竟在什么地⽅。
Form Feed (FF) 12 将显⽰移动到下页起始位置,并保持相同的⽔平位置。所有现在的代码都不使NVT显⽰作任何操作。
CR LF序列将使显⽰定位于下⼀显⽰⾏的左边界处。然⽽,许多系统和终端并不将这两个字符分开处理⽽不得不作⼀些⼯作模拟它们的作⽤。(例如,⼀些终端没有独⽴于LF的CR,但在这些终端上可以通过后退键模拟CR的功能。)因此,CR LF序列必将作为新⾏标记使⽤它们的复合功能;CR NUL必须在希望仅输⼊⼀个回车时使⽤;在其它情况下应该避免单独使⽤CR。这个法则使必须决定是否进⾏⼀个“新⾏”操作功能或多个回退的系统能够保证包括由⼀个字符在CR后⾯的TELNET流的操作,并作出正确的决定。注意:CR LF或者CR NUL对双⽅都是要求的,这就保证了NVT的对称性。即使在⼀些情况
下可以知道字符未被送到实际的终端,然⽽,出于⼀致性的考虑,协议要求在CR后⾯如果没有LF就必须插⼊⼀个NUL。反过来说,在CR后⾯接收到⼀个NUL后,应该把它从数据流中抛弃,⽽不应该将它⽤于NVT的字符映射。
在NVT上有键盘,组合键或键序列来产⽣这全部128个字符。注意:虽然其中的⼀些对NVT显⽰没有作⽤,NVT也有能⼒产⽣它们。除了这些以外,NVT键盘还应该能够产⽣如下有意义,但不要求的的字符。对这些字符的实际代码指派在TELNET命令⼀节中,因为它们被作为普通的应该被提供的,即使在数据流被解释为⼀些其它字符集的情况下。
Synch 此键允许⽤户清除到另⼀⽅的数据通道。此键的激活导致DM的发送,⽽且还导致同时发送TCP的紧急信号。DM-紧急信号对有如前⾯定义的意义。
Break (BRK) 它的提供是因为它不是ASCII字符集内的⼀员。它指⽰Break键和Attention键被按下。然⽽,请注意:它是作为第129个代码,⽽不是IP标准定义。
Interrupt Process (IP) 暂停,中断,放弃或终⽌NVT连接的进程的执⾏。同样的,它也是使⽤TELNET协议的协议要使⽤的信号。
Abort Output (AO) 允许当前进程运⾏⾄终⽌,但不将结果送给⽤户。同样,发送SYNCH给⽤户。
Are You There (AYT) 回送给NVT⼀些可见的字符。
Erase Character (EC) 接收⽅应该删除紧后⼀个未删除的字符或从数据流中删除⼀个“显⽰位置”。
Erase Line (EL) 接收⽅应该将数据流中的字符从当前位置开始⼀直删除到最近的“CR LF”为⽌。
这些“额外”键的功能和⼀些显⽰格式功能键是它们应该代表⼀个对从NVT到本地机映射的扩充。如同NVT数据字节68应该被映射为⼤写D⼀样,⼀个EC字符应该被映射为⼀个“删除⾏”的功能键。另外,如果映射124在⼀些情况下是武断的⼀样,EL字符的映射有时候也是武断的。对于格式字符也是⼀样的:如果终端实际上拥有“垂直制表位”,那么映射到NVT是显然的,如果终端不提供此功能,那么结果将是不可预料的。TELNET命令结构所有TELNET命令结构⾄少包括⼀个两个字节的序列:由⼀个IAC后跟⼀个命令。关于选项会话的命令是由三个字节的序列构成的,第三个字节是关于选项参考的。选择这种结构,这样随着完全使⽤数据空格数据与命令值之间的冲突就会减少,所有这些冲突导致了不⼀致和没有效率和数据的丢失。根据⽬前的设置,只有与IAC冲突的数据需要被发送两次,其它255个代码都可以直接发送。下⾯是定义了的TELNET命令。注意:只有当代码和代码序列前⾯是IAC时它才是命令。
SE 240 结束⼦会话参数。
NOP 241 ⽆操作。
Data Mark 242 Synch的数据流部分。这应该总和TCP紧急标志⼀起发送。
Break 243 NVT 字符 BRK。
Interrupt Process 244 IP功能。
Abort output 245 AO功能。
Are You There 246 AYT功能。
Erase character 247 EC功能。
Erase character 247 EL功能。
Go ahead 249 The GA 信号。
SB 250 指出所跟随的是指⽰选项的⼦对话。
WILL (option code) 251 指⽰希望开始执⾏,或者确认现在正在操作指⽰的选项。
WON'T (option code) 252 指出拒绝执⾏或继续招待所指⽰的选项。
DO (option code) 253 指出要求对⽅执⾏,或者确认希望对⽅执⾏指⽰的选项。
DON'T (option code) 254 指出要求对⽅停⽌执⾏,或者确诊要求对⽅停⽌执⾏指⽰的选项。
IAC 255 数据字节 255。
建⽴连接
TELNET TCP连接在⽤户端⼝U和服务器端⼝L之间建⽴。服务器在这个公认的端⼝上等待连接。因为TCP连接是⼀个全双⼯的,由双⽅端⼝共同确认,服务器可以同时在L端⼝同时处理许多来⾃不同U端⼝的连接。端⼝的指定当⽤于远程⽤户访问服务主机,此协议指定端⼝23(也就是⼋进制的27)。那是 L = 23。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。