1.命令和代码
ECHO1
2.命令意义
*IACWILLECHO
命令发送者请求开始或确定将要开始回复接发送者发出的数据字符。
*IACWON'TECHO
命令发送者要求停止或拒绝开始回复接收到的数据字符。
*IACDOECHO
命令发送者要求接收方开始回复或确定接收方要回复收到的数据字符。
*IACDON'TECHO
命令发送者要求此命令的接收者不要开始或停止回复收到的数据字符。
3.默认值
WON'TECHO,DON'TECHO是默认值,也即不进行回复。
4.选项产生的原因
NVT有一个显示设备的键盘,在通常情况下,键盘的输入会直接显示到显示设备上,在交互比较多的时候,对于要将字符到去进行控制的远程进程这是合适的方法。我们可以设想一下聊天室里的情况加以理解,在这种情况就需要用这个选项,看起来象一个键盘控制两个显示设备。
5.选项描述
当此选项有效时,端终端需要将接收到的字符返回给发送者。此选项并不要求返回的和接收的完全一样。当未在echo选项状态时,接收者不返回数据给发送者,当然这不是说接收者就要给接收到的数据不加理会。
通常的连接是双向的,在一个方向上的数据流与另一个方面上的数据流没有什么关系。下面是五种可能出现的情况:
此选项提供了决定一端是否对另一端数据进行返回。假如不对另一端进行返回,那对自己进行不进行返回。
假如两端的主机都进行了echo状态,那会在连接上出现无限循环的状态,因此实现者在实现时要注重这种情况,一端返回的数据,另一端不要再返回了。
双方在建立连接的时候的默认状态时非echo状态。
假如一方决定要返回对方发出的数据,或希望对方这样做,由它发出相应的命令,并等待响应。假如响应被拒绝,则仍然保持非echo状态;假如对方接受了请求,则连接进入echo状态,处于这样的状态下时,任何一方都可以解除echo状态,因为连接是双向的,因此不同方面的echo状态应该分别解除。
在实现时要遵守telnet协议中的循环防止规则。因为在不同状态下的开关有时候会意义不清,因此要非凡注重相应开关所在的状态。例如一方以WILLECHO响应了DOECHO,则在DOECHO之后的所有字符均被返回,这一条无论是接收方还是发送方都应该牢记。
光是echo选项还不足以让远程计算机理解是在终端上输入的字符,因此要使用SUPPRESS-GOAHEAD选项进行相应的处理。
6.例子
下面是一个称为UHOST的简单实现。其中用于非echo的值小于用于表示echo的值。对于每个用户终端,UHOST保留三个状态位,是否对自己进行echo,用户是否希望在echo状态下工作,终端连接到服务器上时是否处于echo状态下,这三位我们称为P(物理),D(希望)和A(实际)位。
当终端拨号时,设置P位和D位,而A位设置为非echo,P位和D位可以通过相应的命令进行人为设置。
当UHOST和服务器的连接打开时,假如P位和D位的最小值小于A位,那就向服务器发出DOECHO命令,假如收到WON'TECHO或WILLECHO响应,UHOST会设置A位为接收到以下三值的最小值:接收到的值,P位值,D位值。假如需要改变A位当前的状态,UHOST要发出相应的确定信息,假如不改变A位当前的状态,则返回拒绝,表示自己不需要进行改变。
假如在连接打开时,UHOST终端改变了P位或D位的值,UHOST会重复上面的测试。连接关闭时,UHOST会恢复A位值。因为UHOST在连接打开时或用户显式改变ECHO状态时未涉及使用DOECHO和DON'TECHO命令,大型主机会频繁地进行这样的状态切换。例如,当line-at-a-time系统运行时,服务器会试图通过WON'TECHO命令将用户设置为本地ECHO状态;但是当character-at-a-time系统运行时,服务器需要通过WILLECHO命令启动用户的远程ECHO。而且,因为UHOST不会发出WILLECHO命令,只会发出WON'TECHO命令,服务器主机会频繁发出WILL和WON'T命令。