远程登录(Remote Login)是I n t e r n e t上最广泛的应用之一。我们可以先登录(即注册)到一台主机然后再通过网络远程登录到任何其他一台网络主机上去,而不需要为每一台主机连接一个硬件终端(当然必须有登录帐号)。 在T C P / I P网络上,有两种应用提供远程登录功能。
Te l n e t是标准的提供远程登录功能的应用,几乎每个 T C P / I P的实现都提供这个功能。它能够运行在不同操作系统的主机之间。Te l n e t通过客户进程和服务器进程之间的选项协商机制,从而确定通信双方可以提供的功能特性。
Rlogin起源于伯克利U n i x,开始它只能工作在 U n i x系统之间,现在已经可以在其他操作系统上运行。
在本章中,我们将介绍Te l n e t和R l o g i n。首先介绍R l o g i n,因为R l o g i n比较简单。Te l n e t是一种最老的I n t e r n e t应用,起源于1 9 6 9年的A R PA N E T。它的名字是“电信网络协议(telecommunication network protocol)”的缩写词。
远程登录采用客户-服务器模式。图 2 6 - 1显示的是一个Te l n e t客户和服务器的典型连接图(对于R l o g i n的客户和服务器连接图,我们可以画得更加简单)。
在这里插入图片描述
在这张图中,有以下要点需要注意:
Te l n e t客户进程同时和终端用户和 T C P / I P协议模块进行交互。通常我们所键入的任何信息的传输是通过T C P连接,连接的任何返回信息都输出到终端上。
Te l n e t服务器进程经常要和一种叫做“伪终端设备”(pseudo-terminal device)打交道,至少在U n i x系统下是这样的。这就使得对于登录外壳 ( s h e l l )进程来讲,它是被Te l n e t服务器进程直接调用的,而且任何运行在登录外壳进程处的程序都感觉是直接和一个终端进行交互。对于像满屏编辑器这样的应用来讲,就像直接在和终端打交道一样。实际上,如何对服务器进程的登录外壳进程进行处理,使得它好像在直接和终端交互,往往是编写远程登录服务器进程程序中最困难的方面之一。
仅仅使用了一条T C P连接。由于客户进程必须多次和服务器进程进行通信(反之亦然),这就必然需要某些方法,来描绘在连接上传输的命令和用户数据。我们在后面的内容中会介绍Te l n e t和R l o g i n是如何处理这个问题的。
注意在图 2 6 - 1中,我们用虚线框把终端驱动进程和伪终端驱动进程框了起来。在T C P / I P实现中,虚线框的内容一般是操作系统内核的一部分。 Te l n e t客户进程和服务器进程一般只是属于用户应用程序。
把服务器进程的登录外壳进程画出来的目的是为了说明:当我们想登录到系统的时候,必须要有一个帐号,Te l n e t和R l o g i n都是如此。
对于Te l n e t和R l o g i n,如果比较一下它们客户进程和服务器进程源代码的数量,就可以知道这两者的复杂程度。图 2 6 - 2显示了伯克利不同版本的 Te l n e t和R l o g i n客户进程和服务器进程源代码的数量。
在这里插入图片描述
现在,不断有新的Te l n e t选项被添加到Te l n e t中去,这就使得Te l n e t实现的源代码数量大大增加,而R l o g i n依然变化不大,还是比较简单。