虽然我们可以认为Telnet连接的双方都是NVT,但是实际上Telnet连接双方首先进行交互的信息是选项协商数据。选项协商是对称的,也就是说任何一方都可以主动发送选项协商请求给对方。
对于任何给定的选项,连接的任何一方都可以发送下面4种请求的任意一个请求。
1)WILL:发送方本身将激活(enable)选项。
2)DO:发送方想叫接收端激活选项。
3)WONT:发送方本身想禁止选项。
4)DON’T:发送方想让接收端去禁止选项
由于Telnet规则规定,对于激活选项请求(如1和2),有权同意或者不同意。而对于使选项失效请求(如3和4),必须同意。这样,4种请求就会组合出6种情况,如图26-9所示。选项协商需要3个字节:一个IAC字节,接着一个字节是WILL,DO,WONT和DONT这四者之一,最后一个ID字节指明激活或禁止选项。
选项标识(十进制)名称
发送方接收方描述
1.WILL→←DO发送方想激活选项接收方说同意
2.WILL→←DONT发送方想激活选项接收方说不同意
3.DO→←WILL发送方想让接收方激活选项接收方说同意
4.DO→发送方想让接收方激活选项
WONT←接收方说不同意
5.WONT→←DONT发送方想禁止选项接收方必须说同意
6.DONT→←WONT发送方想让接收方禁止选项接收方必须说同意
RFC
现在,有40多个选项是可以协商的。Assigned
1
回显
857
NumberRFC文档中指明选项字节的值,并且
3
抑制继续进行
858
一些相关的RFC文档描述了这些选项。图26
5
状态
859
6
定时标记
86024
10显示了在本章中会出现的选项代码。
终端类型
1091
Telnet的选项协商机制和Telnet协议的大部
31
窗口大小
1073
分内容一样,是对称的。连接的双方都可以发
32
终端速率
1079
起选项协商请求。但我们知道,远程登录不是
33
远程流量控制
137234
行方式
1184
对称的应用。客户进程完成某些任务,而服务
36
环境变量
1408
有些选项不是仅仅用“激活”或“禁止”就能够表达的。指定终端类型就是一个例子,客户进程必须发送用一个A S C I I字符串来表示终端类型。为了处理这种选项,我们必须定义子选项协商机制。
在R F C 1 0 9 1 [ VanBokkelen 1989] 中定义了如何表示终端类型这样的子选项协商机制。首先连接的某一方(通常是客户进程)发送3个字节的字符序列来请求激活该选项。 这里的2 4(十进制)是终端类型选项的I D号。假如收端(通常是服务器进程)同意,那么响应数据是:
然后服务器进程再发送如下的字符串:
该字符串询问客户进程的终端类型。其中S B是子选项协商的起始命令标志。下一个字节的“2 4”代表这是终端类型选项的子选项(通常S B后面的选项值就是子选项所要提交的内容)。下一个字节的“1”表示“发送你的终端类型”。子选项协商的结束命令标志也是I A C,就像S B是起始命令标志一样。假如终端类型是i b m p c,客户进程的响应命令将是:
<IAC, SB, 24, 0‘I’, ‘B’, ‘M’, ‘P’, ‘C’, IAC, SE>
第4个字节“0”代表“我的终端类型是”(在Assigned Numbers RFC文档中有正式的关于终端类型的数值定义,但是最起码在U n i x系统之间,终端类型可以用任何对方可理解的数据进行表示。只要这些数据在t e r m c a p或t e r m i n f o数据库中有定义)。在Te l n e t 子选项协商过程中,终端类型用大写表示,当服务器收到该字符串后会自动转换为小写字符。