远程登录的工作原理
- 背景介绍
- 远程登录
- 远程登录的服务模式
- 远程登录服务的实现基础
- 远程登录服务的运行模式
- Telnet服务为什么不被操作系统管理
- Telnet协议的原理
- 网络虚终端(NVT)
- 结束标示
- NVT的原理
- NVT屏蔽差异
背景介绍
绝大多数计算机都是运行多用户操作系统的中小型机,这些中小型机通常由一台主机和多个终端组成,主机的计算资源被多个终端用户共享。系统为每个用户分配一个账号,规定了用户对系统的访问权限。
用户通过自己的账号在某个终端登录后,可以访问系统的部分或全部资源。
远程登录
远程登录的主要目的是使远端用户能够像本地用户一样访问远程系统的资源。为了实现这一目标,远程登录协议的设计旨在提供一个相对通用、双向且面向8位字节的通信方法,以便远端终端设备能够以标准化的方式与计算机系统进行交互。
目前,TCP/IP协议族中有两个主要的远程登录协议:telnet和rlogin。telnet协议是我们主要介绍和分析的内容,由RFC 854定义,成为互联网中主机被要求采用和实现的标准。
本文主要探讨Telnet协议的服务方式、工作原理以及其主要命令。
远程登录的服务模式
远程登录协议基于TCP协议运行,客户终端通过TCP连接与远程计算机进行通信。该服务采用客户-服务器模式。如下图所示,终端上运行着Telnet客户端进程,而远程计算机系统则运行着服务器进程。
客户端和服务器进程借助一条TCP连接进行数据交互。
远程登录服务的实现基础
远程登录服务的核心目的在于为远程用户提供与本地用户相当的服务体验。鉴于系统通常向本地用户提供多条命令,系统同样需确保这些命令对远程用户也可用。若单纯采用客户-服务器模式,则需为每位登录用户可能使用的每条命令分别创建一个进程,这将导致系统为接纳一个远程登录请求而不得不生成多个服务器进程,极大地限制了系统的可扩展性。
为解决这一问题,远程登录服务采用了一种优化策略:即为每位远程登录用户仅创建一个静态的shell进程。该shell进程负责解释和处理来自远端用户的所有服务请求,并根据需要动态地fork出相应的子进程来完成具体的服务任务。这种方法显著减少了系统中静态进程的数量,有效防止了系统进程数随远程登录用户数量的增加而迅速膨胀,从而圆满解决了可扩展性问题。
因此,在Telnet远程登录连接中,双方仅需各自运行一个应用程序即可实现通信。在客户终端上运行的是客户进程,而在远程计算机上运行的则是服务器进程。
远程登录服务的运行模式
在远程服务场景中,专门提供远程登录功能的主机会持续运行一个名为Telnet的服务器进程(亦称作守护进程),该进程时刻准备接收来自终端用户的登录请求。远程登录的流程始于终端用户发起Telnet命令的那一刻,此时,与该命令相关联的本地应用程序扮演着客户端的角色。
随后,客户端会与远程计算机上的Telnet服务器建立一条TCP连接。一旦接收到连接请求,远程登录服务器便会为该用户专门创建一个shell进程。基于这条TCP连接,客户端会将用户通过终端键盘输入的指令传输给服务器端的shell进程。
Shell进程在接收到用户指令后,会对其进行解析,并派生出一个子进程来执行相应的程序。程序执行的结果随后通过TCP连接回传给客户端。客户端在接收到这些来自服务器的字符信息后,会通过其所在终端的操作系统,将这些信息展示给用户。
Telnet服务为什么不被操作系统管理
从先前的图示中可以洞察到的另一个关键点是,在Telnet服务架构中,服务器进程与客户进程均未被整合进操作系统内核,这一设计抉择主要基于以下两方面的深思熟虑:
- Telnet服务主要面向的是键盘类终端设备。考虑到用户击键的速度与微秒级进程切换所产生的响应延迟相比,几乎可以忽略不计。
- Telnet等类似程序作为独立的应用程序来处理,有助于保持系统内核的精简与高效。
Telnet协议的原理
现在,我们来详细阐述Telnet远程登录服务的整个流程,该过程精炼地划分为以下三个核心步骤:
- 第一步,远程用户通过其终端发起对目标系统的登录请求。这一登录行为的内在本质,是通过建立一个TCP连接来实现的,它充当了用户与系统间沟通的桥梁。
- 第二步,紧接着,用户的键盘输入被逐字逐句地传输至远端的主机系统。这一过程确保了用户输入的每一个字符都能准确无误地到达目标系统,供其处理。
- 第三步,主机系统在接收到用户指令并完成相应操作后,将其输出结果反馈回用户的本地系统。这样,用户就能实时看到系统的响应和执行结果。
尽管这一流程看似直观且简洁,但考虑到Internet上主机和终端的多样性——它们可能来自不同的制造商,采用了各异的技术标准——要确保Telnet能在如此复杂多变的环境中顺畅运行,就必须实现输入/输出对远端系统内核的透明性。
Telnet巧妙地利用了网络虚终端技术和选项协商机制,这两种技术共同协作,确保了无论远端系统的具体实现如何,用户都能获得一致且透明的远程登录体验。
网络虚终端(NVT)
针对Telnet远程登录技术而言,系统间的异构性问题主要体现在它们对键盘输入的解释上存在的差异性。具体而言,这种差异不仅广泛存在,而且在细节上尤为显著。
结束标示
在行结束标志的处理上,尽管所有系统在用户按下回车键时都会执行换行操作,表现出一定的共性,但行结束标志的具体实现方式却大相径庭。有的系统采用ASCII字符CR(回车符)作为行结束的标志,而另一些系统则使用CR-LF(回车换行符组合)作为标志。这种使用不同字符作为行结束标志的做法,直接导致了异构系统之间在远程登录时的互操作性障碍。
用于触发进程终止的键码也因系统而异。在某些系统中,Ctrl+C键被设定为进程终止码,而在其他系统中,这一功能则可能由Del键承担。这种键码定义的多样性,无疑进一步加剧了异构系统间的兼容性问题。
流控字符在不同异构系统间的差异也不容忽视。这些字符用于控制数据传输的速率和流量,以确保通信的稳定性和效率。然而,由于各系统对流控字符的定义和解释各不相同,这也成为了实现远程登录时需要克服的又一难题。
NVT的原理
为了有效解决上述问题,Telnet协议引入了一种标准化的键盘定义方式——网络虚终端(NVT,Network Virtual Terminal)。NVT为异构系统提供了一种统一的键盘输入解释框架,从而确保了不同系统间在进行远程登录时能够准确、高效地传递键盘输入信息。通过这种方式,Telnet协议极大地提升了异构系统间的互操作性和兼容性。
NVT屏蔽差异
在解决互联网中的异构性问题时,核心策略在于将各类设备特有的数据格式转换为一个预先商定且普遍适用的、与具体设备无关的数据格式,以此来封装并掩盖设备间的异构差异。这一理念类似于IP协议的功能,它有效地屏蔽了不同物理子网之间的异构特性。同样地,Telnet协议利用网络虚拟终端(NVT)机制,来消除不同终端设备之间因物理特性差异所带来的不兼容问题。NVT的工作机制详见下图。
在客户与服务器交互过程中,双方分别采用各自的本地数据格式进行输入输出。对于远程登录会话,客户端软件负责将用户输入转换为标准的网络虚拟终端(NVT)数据及命令序列,随后通过TCP连接传递给远程服务器。服务器则接收这些NVT序列,并将其转换为远程系统的内部格式。由于客户与服务器均熟悉各自系统的内部格式及NVT规范,上述转换过程得以顺畅进行。