(26)Telnet和Rlogin:远程登录
一、简介
TCP/IP网络上,有两种应用提供远程登录功能。
(1)Telnet是标准的提供远程登录功能的应用,几乎每个TCP/IP的实现都提供这个功能。它能运行在不同操作系统的主机之间。Telnet通过客户进程和服务器进程之间的选项协商机制,从而确定通信双方可以提供的功能特性。Telnet获得异构性是强制两端采用同一个标准:使用7比特ASCII码的NVT。
(2)Rlogin只能工作在Unix系统之间,现在已经可以在其他操作系统上运行了。
远程登录采用客户-服务器模式,如下图所示:
在这张图中,有以下要点需要注意:
(1)Telnet客户进程同时和终端用户和TCP/IP协议模块进行交互。通常我们所键入的任何信息的传输是通过TCP连接,连接的任何返回信息都输出到终端上。
(2)Telnet服务器进程经常要和一种叫做“伪终端设备”(pseudo-terminaldevice)打交道,至少在Unix系统下是这样的。这就使得对于登录外壳(bash)进程来讲,它是被Telnet服务器进程直接调用的,而且任何运行在登录外壳进程处的程序都感觉是直接和一个终端进行交互。对于像满屏编辑器这样的应用来讲,就像直接在和终端打交道一样。实际上,如何对服务器进程的登录外壳进程进行处理,使得它好像在直接和终端交互,往往是编写远程登录服务器进程程序中最困难的方面之一。
(3)仅仅使用了一条TCP连接。由于客户进程必须多次和服务器进程进行通信(反之亦然),这就必然需要某些方法,来描绘在连接上传输的命令和用户数据。我们在后面的内容中会介绍Telnet和Rlogin是如何处理这个问题的。
(4)Telnet客户进程和服务器进程一般只是属于用户应用程序。
(5)把服务器进程的登录外壳进程画出来的目的是为了说明:当我们想登录到系统的时候,必须要有一个帐号,Telnet和Rlogin都是如此。
二、Rlogin协议
Rlogin的客户进程和服务器进程使用一个TCP连接,当普通TCP连接建立完毕后,客户进程和服务器进程发生如下动作:
(1)客户进程想服务器进程发送4个字符串:1)一个字节的0;2)用户登录进客户进程主机的登录名,以一个字节的0结束;3)登录服务器进程端主机的登录名,以一个字节0结束;4)用户终端类型名,紧跟一个正斜杠“/”,最后是终端速率,以一个字节的0结束;
(2)服务器进程返回一个字节的0;
(3)服务器进程可以选择是否要求用户输入口令;
(4)服务器进程通常要给客户进程发送请求,询问终端的窗口大小。
Rlogin的流量控制默认情况下是由Rlogin的客户进程完成的。
服务器到客户的命令:(1)0x02清仓输出;(2)0x10客户停止执行流量控制;(3)0x20客户继续进行流量控制;(4)0x80客户立即响应。
客户到服务器的命令:只定义了一条命令,那就是将当前窗口大小发送给服务器。
客户进程到服务器进程的命令采用带内信令,这是因为命令字节和其他普通数据时一起传输的。从服务器到客户的Rlogin命令,大多数的API采用的技术叫做带外数据,这里称为带外信令。
三、Telnet协议
Telnet通信的两个方向都采用带内信令方式。字节0xff叫做IAC(inerpret as command,意思是作为命令来解释)。该字节后面的一个字节才是命令字符。
选择协商是对称的,连接的任何一方都可以发送下面4中请求的任何一个:
(1)WILL:发送方本身将激活选项;
(2)DO:发送方想叫接收端激活选项;
(3)WONT:发送方本身想禁止选项;
(4)DONT:发送方想让接收方去禁止选项。
大多数Telnet的服务器进程和客户进程,共有4中操作方式:
(1)半双工;(2)一次一个字符方式;(3)一次一行方式,也叫准行方式;(4)行方式。