为了描述Telnet的行方式选项协商过程,我们在主机bsdi运行客户进程,服务器是位于vangogh.vs.berkeley.edu节点运行4.4BSD操作系统的一台主机。BSD/386和4.4BSD都支持这个选项。
我们不具体讨论所有的报文、选项和子选项协商过程,因为这个过程和前面的例子类似,而且对于行方式选项我们已经论述得比较清楚。下面我们仅仅讨论在选项协商中的一些区别。1)对于BSD/386希望协商的选项例如:窗口大小、本地流量控制、状态、环境变量和终端速率等,4.4BSD服务器进程都支持。2)4.4BSD服务器进程将协商一个BSD/386客户进程不支持的新选项:鉴别(为避免以明文形式在网络上传输用户口令)。
3)和上个例子一样,客户进程发送WILLLINEMODE选项,由于服务器进程支持该选项,所以服务器进程发送DOLINEMODE。此时客户进程以子选项形式给服务器进程发送16个特定字符。这些字符是能影响客户进程的特定终端字符值:如中断字符,文件结束符等。服务器进程给客户进程发送一个子选项,让客户进程处理所有的输入,执行所有的编辑功能(删除字符,删除行等)。客户进程把除控制字符以外的字符以行的形式发送给服务器进程。服务器进程还要求客户进程把所有中断键和信号键转换为相应的Telnet字符。例如中断键是Control_C,我们可以按Control_C来中断服务器端的某个进程。客户进程必须把Control_C转换为Telnet的ip命令()传输给服务器进程。
4)当用户输入口令时情况也有所不同。在Rlogin和一次一字符方式的Telnet中,都是由服务器进程负责回显,所以当服务器进程读到口令时,它并不回显这些字符。但在行方式中由客户进程负责回显。下面这些交互过程将处理这种情况:
(a)服务器进程发送WILLECHO,以告诉客户进程:服务器进程将处理回显。
(b)客户进程回送DOECHO。
(c)服务器进程向客户进程发送字符串PassWord:,客户进程把它发送到终端上。
(d)然后用户输入口令,当用户按下RETURN键的时候,客户进程把口令发送给服务器进程。此时口令不回显,因为客户进程认为服务器进程将回显它。
(e)由于口令的结束符RETURN没有回显,服务器进程发送两字节字符序列CR和LF以移动光标。
(f)服务器进程发送WONTECHO。
(g)客户进程回送DONTECHO。然后继续由客户进程负责回显。
一旦登录完成,客户进程将把数据以整行的方式发送给服务器进程。这就是行方式选项的目的。行方式大大地减少了客户进程和服务器进程之间的数据交互数量,而且对于用户的击键(也就是回显和编辑)提供更快的响应。图26-14显示的是当我们输入命令时,在行方式连接下分组交换的情况。Vangogh%date
(去掉了业务种类信息和窗口通告信息)。
图26-14Telnet行方式下客户进程向服务器进程发送命令的情况
把它和在Rlogin中输入同样命令时的情况进行一下比较。我们看到在Telnet行方式下只需要2个报文段(一个包含数据,另一个用于ACK,连同IP和TCP首部共86字节),而在Rlogin中要发送15个报文段(5个有键入的数据,5个有回显的数据,5个是ACK,共611字节)。可见节省的数据量是非常可观的。
假如在服务器端运行一个需要进入单个字符方式的应用程序(例如vi编辑器)会怎么样呢?实际上将发生如下的一些交互:
1)当服务器的应用程序启动了,并改变其伪终端方式时,Telnet服务器进程被通告需要进入单个字符方式。然后服务器发送WILLECHO命令和行方式子选项,以告知客户不要再以行方式工作,转而进入单个字符方式。
2)客户响应以DOECHO,并确认行方式子选项。
3)应用程序在服务器上运行。我们键入的每个字符将发送到服务器(当然要强制使用Nagle算法),此时服务器将处理必要的回显工作。
4)当应用程序终止时,就恢复其伪终端方式,并通告Telnet服务器。服务器将向客户发送WONTECHO命令,同时发送行方式子选项,告诉客户恢复进入行方式。
5)客户响应DONTECHO,确认进入行方式。
上述情况同我们键入口令之间的区别表明:回显功能和单个字符方式与一次一行方式没有依靠关系。当我们键入口令时,回显功能必须失效,但一次一行方式有效。对于一个全屏应用来讲,例如编辑器,回显必须失效而单个字符方式必须有效。
图26-15概括了Rlogin和Telnet不同方式之间的差异。
应用程序
客户进程发送
进程回显?
例子
一次一字符
一次一行
R l o g i n
•
否
Te l n e t
•
否
Te l n e t ,行方式
•
是
正常命令
Te l n e t ,行方式
•
否
键入我们的口令
Te l n e t ,行方式
•
否
v i编辑器
图26-15 Rlogin和不同方式的Telnet之间的比较