Programming 版 (精华区)
发信人: furruca (坏牙法鲁卡), 信区: Programming
标 题: Telnet Protocol(一)
发信站: 烟雨漓江 (Thu Jul 6 21:41:51 2000), 转信
ostel [Page 1]
RFC 318 Telnet Protocol April 1972
Telnet 协议
I. 网络虚拟终端
网络虚拟终端(Network Virtual Terminal)是一种双向连接字符设备.这种字符采用8
位编码.虚拟网络终端没有定时特性.编码值从0-127的字符是USACII字符.(注意:所有的
编码值以10进制给出)从128-255的编码被用作特殊控制信号.网络虚拟终端习惯上被描述
成有打印机(或显示设备)和键盘的设备.打印机负责显示输入数据,键盘则产生用来输出
k]
的数据.
打印机
网络虚拟终端打印机没有一个指定的托架宽度(通常所取值为40,72,80,120,12
8,13
).
打印机能够表示编码值从32到126的总共95个USACII图形字符.网络虚拟终端打印机对于
编码值从0到31以及127总共33个USACII控制字符中的以下8个有专门指定的含义.
名字 编码值 含义
NULL (NUL) 0 空操作.
BELL (BEL) 7 响铃.
Back Space (BS) 8 打印机后退一个字符位置.
Horizontal Tab (HT) 9 移动打印机到下一水平Tab处.
Line Feed (LF) 10 移动打印机到下一行(保持同一水平位置).
Vertical Tab (VT) 11 移动打印机到下一垂直Tab处.
Form Feed (FF) 12 移动打印机到下页首。
Carriage Return (CR) 13 移动打印机到当前行的左边空白处。
保留的USACII码(从1-6,14-31,以及127)对打印机不起任何作用。
Postel [Page 2]
RFC 318 Telnet Protocol April 1972
键盘
键盘打印机(或显示设备)和键盘的设备.打印机负责显示输入数据,键盘则产生用来输出ck]
网络虚拟终端键盘有键值或组合键或键序列可用来生成所有的128个USACII字符。值
得注意的是,虽然有的字符对打印机不起作用,但网络虚拟终端键盘能够生成这些字符
。
行结束约定
一行文本的结束应该由字符序列回车换行(CR,LF)来表明。这种约定对发送设备(
键盘)和接收设备(打印机)(虚拟)终端机制都适用。
间隔和反间隔
Telnet控制信号提供了间隔信号(BREAK),这种信号能够被用来模拟绝大部分终端上
的间隔或(引起)注意(信号)或中断键的使用。这种信号对网络虚拟终端不起作用。
当Telnet控制信号间隔被从服务器用在用户上时它有时也被称作反间隔信号(Reverse
Break)。这样的反间隔对网络虚拟终端不起作用。
II. Telnet协议的定义
Telnet协议的目的是为一个场所的终端设备访问另一个站点提供一种标准的接口方法
。
Telnet协议主要由三个子体系构建而成,第一个就是初始连接协议ICP(Initial Co
键盘打印机(或显示设备)和键盘的设备.打印机负责显示输入数据,键盘则产生用来输出ck]
nnection Protocol),第二个就是网络虚拟终端,第三个是这里所描述的Telnet控制信
号。
Telnet客户和服务器之间的处理紧随ICP而建立连接。术语"logger"已经和服务器系
统中负责ICP及初始话交互(例如:获得一个名字和口令)的处理集连接在一起。ICP的
定义和初始套接字数及字节大小参数在"Current Network Protocols"(NIC #7104)中作
了定义。
在用户和服务程序(并且反之亦然)之间传输的数据是以内嵌控制信号的字符流传送
的。 注意所有的编码值都是以十进制给出的。
Postel [Page 3]
RFC 318 Telnet Protocol April 1972
Telnet控制信号
名字 编码值 含义
DATA MARK 128 用来标号数据流中一点。同INS一起使用,参考。
BREAK 129 User-to-Server: 对服务器而言,它同许多终端上的"B
reak," "Interrupt," 或 "Attention" 按钮有相同的意义
Server-to-User: 同某些终端上的有相同的意义"reverse break" .
淘虿美词涑鯿k]
NOP 130 空操作
NO ECHO 131 User-to-Server: 要求服务器不回显所传输的数据。
Server-to-User: 表明服务器现在处于对传输过来数据不发送回显的状态中。
发送仅作为对ECHO 或 NO ECHO的应答,或者是结束对你输入的隐藏。
ECHO 132 User-to-Server: 要求服务器对发送的数据进行回显。
Server-to User: 服务器处于对传输过来的数据发送回显的这种状态中,发送仅仅作为
对ECHO或NO ECHO的应答。
Hide your input 133 当使用本地回显的用户系统的用户需要输入某些保密的
东西时(例如口令),需要服务器发送这个信号给使用本地回显的用户系统。这样,用
户系统将取消本地回显或者使用套印输入(或者别的什么)直到服务器发送一个NOECHO
信号。
如果用户系统没有本地回显时,服务器禁止发送这个信号。
INS --- 发送中断信号,由Host-to-Host 协议定义,由Network
Control Program(NCP)实现.请参照SYNCH.
Postel [Page 4]
RFC 318 Telnet Protocol April 1972
RFC 318 Telnet Protocol April 1972输出ck]
SYNCH --- 这是一种由DATA MARK和INS的组合所表示的情况。
User-to-Server: 服务器对输入数据流进行检查以期待一个DATA MARK信号;如果一个
DATA MARK被发现,那么应该禁止服务器的进一步的处理直到其收到一个INS。如果服务
器收到了一个INS,它必须立刻检查数据流,并对"break type"字符(例如,etx,sub,B
REAK)采取任何合适的动作,直到得到一个DATA MARK信号才继续其正常的处理。那些被
忽略的字符可能会被丢掉。
Server-to-User: 如果用户在数据流中发现了DATA MARK,它必须等待一个INS。如果用
户收到了一个INS,它必须检查并丢掉不包含DATA MARK的字符
数据类型
Telnet通常使用ASCII字符,但也有一些预留可以用来转换为其他编码集。
如果使用了这些转换码中的没有被定义的某个,无论Telnet信号是否还有意义或者甚
至无论怎样返回为ASCII码集,以下这些Telnet信号总会指出编码集的变化:
CODE MEANING
160 ASCII - Standard Telnet
161 Transparent
162 EBCDIC
April 1972输出ck]
用户Telnet信号
以下的信号提供给用户,以让他们能够使用户Telnet获得指定的动作。
Transmit Now - 传输所有现在输入的或在本地缓冲区中的数据。期望以(
数据)行方式(line mode)使用。
Suppress end-of-line - 传输所有输入的或在本地缓冲的数据,但不传送紧跟在这
个信号后的end-of-line
Postel [Page 5]
RFC 318 Telnet Protocol April 1972
标准Telnet实现
用户方
1) 用户能够输入、传输所有ASCII码
2) 用户能够产生并传输如下Telnet信号:BREAK, SYNCH, ECHO and NOECHO.
3) 提供用户Telnet 信号(e.g. Transmit Now).
4) 实现 CR LF end-of-line 转换。
5) 为本地用户终端提供本地回显。
6) 正确地处理Telnet信号 BREAK, SYNCH, NOP, ECHO, NOECHO,隐藏来自服务器的
输入.
服务器方
1) 提供ASCII到本地字符集的映射。
1) 提供ASCII到本地字符集的映射。EBCDICl April 1972输出ck]
2) 正确地处理Telnet信号 BREAK, SYNCH, NOP, NOECHO,and ECHO.
3) 实现 CR LF end-of-line 转换.
4) 假定用户方提供回显。或许提供一服务器回显模式。
最小Telnet实现
用户方:
1) 用户能够输入、传输所有ASCII码。
2) 忽略并删除所有来自服务方的Telnet信号。
3) 为本地用户终端提供本地回显。
4) 实现 CR LF end-of-line 转换.
5) 提供用户Telnet 信号。
Postel [Page 6]
RFC 318 Telnet Protocol April 1972
服务器方:
1) 提供ASCII到本地字符集的映射。
2) 忽略并删除所有来自用户方的Telnet信号。
3) 假定用户方提供回显。
4) 实现 CR LF end-of-line 转换.
III. 对于Telnet协议的讨论
服务器方和用户方之间需要掌握相互之间的终端信息并进行终端操作转换,而通过
使用一种标准的、网络范围的、中级的终端编码表示法可以用来减小这种需要。
但只有当用户,客户方和服务方承担一定的责任时这个方法才可能成功。
1. 服务方必须规定如何将这种中级编码映射为所期望的终端编码
April 1972输出ck]
2. 用户必须熟悉那种映射。
3. 用户方必须提供某种方式以让用户能够输入所有的终端码,为方便用户,特殊的
Telnet信号也必须为用户指定,如同指定如何在用户终端上表示来自服务方的信号一样
。
别的规划也做了适当的考虑但被拒绝不用。例如,有一个提议是用户方负责转换所有
去或来自服务方所期待的编码就被拒绝了。因为这样需要用户方保持有所有服务方的
编码,并为每种状况提供一种映射方式。随着新的主机不断增添到网络中,这种信息必
须保持不断的维护。
字符集
既然不知道当前或将来的站点会如何指定映射网络范围的标准码(7bit ASCII in a
n 8 bit field)和所期望的来自他们自己的终端的编码,于是,允许用户传输128个ASC
II码中的每一个加上(for full user power)所选定的信号(或者是一个普通Telnet控
制,或者是一个特殊的终端信号,例如break或者是attention)。
Postel [Page 7]
Postel [Page 7]输出ck]
RFC 318 Telnet Protocol April 1972
深切感受到了在用户方用户/系统之间的接口的重要性,但同样强烈的感受到了这
是一个本地实现问题,这个问题应该反映出用户方安装原则而不受网络范围标准的影
响。
这个方面的几个考虑话题如下:
1. 如何在用户终端上表示用户方不可用的特殊图形。
2. 处理那种只提供大写功能的设备所产生的大/小写问题。
a. 表示小写输出。
b. 提供给用户shift 和 shiftlock信号。
3. 在Telnet中集成编辑功能。
4. 扩展网络方式所不能提供给本地用户的选项。例如,保持输出或者删除打印
。
5. 允许用户指定键盘输入将如何被传输,例如,让来自终端的一个字符导致一
个指定的串被用户Telnet发送。
对解决Telnet协议问题的提议似乎是为了提供一种最小实现机制,为开发出更加丰
富
的集合或开发出现在和将来将在终端应用程序,进程对进程间通讯,以及其他协定中
用来传输数据或控制信息而使用的协议提供一个基础,
[Page 7]输出ck]
ASCII将被用作网络范围码这种理解已经形成有一段时间了。它在Telnet中的使用导
致了有关128个字符中最大字符的限制。有些系统在他们的操作中的提供远多于这个数目
,因此,作为服务方站点,不能基于一对一的映射。
每个这样的服务方站点可能能够提供一个适当的有用字符集,包括所有的系统控制信
号,通过映射它的128个码子而并不是让一个网络用户访问别的编码。相反,任何剩下来
的字符可能会在服务方主应用程序中作为一个特殊的控制信号。这样做的结果是可能拒
绝为网络用户提供那个应用程序所提供功能。因此,鼓励服务方为客户提供从ASCII码到
服务方系统码的完整映射。这可能需要服务方指定两个ASCII码序列来映射到服务方系统
字符集中的单个字符。
Postel [Page 8]
RFC 318 Telnet Protocol April 1972
注意到有写ASCII码对网络虚拟终端打印机不起作用。当被服务器方处理后输出或者
被用户输入,这些码子必须在网络中传输,
行结束习惯
行结束习惯据或控制信息而使用的协议提供一个基础, [Page 7]输出ck]
对于一个终端的物理行的结束的表示随着网络主机的不同其实现也不同。例如,
有的使用一return(或new line)键,终端硬件不仅返回carriage /printer到行的
开始,而且走纸到下一行。而在别的实现中,用户敲carriage返回,当软件发送给终端
一行走纸时硬件返回carriage。网络范围的表示是回车返回后接着换行。它表示物理上
的格式话正在被尝试,并将被用户方和服务器方解释、适当地转换。
EXAMPLE: 一 Multics 用户正在通过网络在某一服务站点主机上工作,在会话的过程中
用户无意中数次击打了他的模型377型TTY上的新行(New Line)键。每次Multics系统被
这样的新行中断唤醒,有缓冲字符的行就被传送到Telnet,在Telnet中就会扫描看它是
否为特殊字符。如果不是,在回车返回后一新行就被插入到输入新行的地方,这行就被
移交给NCP传输。相对地,当Multics Telnet发现来自服务方的数据流中回车返回行走纸
序列,这两个字符就被发送到终端的正确的新行编码替换掉。
Telnet定义一行的结束由字符对CR LR指定。实际中许多设备只有一个新行(New L
ine)功能。许多计算机系统在程序中使用CR LF功能以得到比他们所提供的格式多得多
k]
的语意。此外,许多计算机系统还允许CR LF功能分开使用(例如,这种情况下一行可以
被重复打印)。因为那些Telnet用户程序需要映射网络虚拟终端到那种只有一个NL功能
的设备,这样就产生了如何处理CR LF的问题。一种解决方法就是检查紧跟在CR 后面的
字符。如果这个字符是LF,那么执行NL功能,如果是任何别的什么,那么就退格到行首。
另一个问题是在本地使用计算机系统期间,"。",导致新行功能,在某些程序中,CR 和
LF用作有重要语意的操作。假定用户Telnet发送序列CR LF,这是否意味着"新行"或"CR
操作"后紧跟"LF操作"呢?解决这个问题的方法就是要求Telnet程序发送一个CR NOT以使
其成为CR LF对的一部分,并把这部分作为CR NUL对处理。
这样,接收程序就总能保持一个CR并能检查下一个字符以判断是否需要一个新行功能。
强烈推荐使用这种方法。
--
oh! bury me not on the lone prairie
※ 来源:.烟雨漓江 lily.gxnu.edu.cn.[FROM: 202.193.164.9]