首页 理论教育 Telnet协议的理论基础解析

Telnet协议的理论基础解析

时间:2023-06-30 理论教育 版权反馈
【摘要】:Telnet 协议对称处理连接的两端,即Telnet 既不强迫客户机从键盘输入,也不强迫客户机在屏幕上显示输出。表3-3-1Telnet 命令续表例如,Telnet 命令“ff f0”,查上表得命令,表示“子选项结束”。因此,Telnet 采用选项协商机制来解决这一问题。Telnet 选项的协商方式对于每个选项的处理都是对称的,即任何一端都可以发出协商申请;任何一端都可以接受或拒绝这个申请。

Telnet协议的理论基础解析

Telnet 是一种字符模式的终端服务,它可以使用户在已联网的计算机前通过网络进入远程主机,然后对远程主机进行操作。这种连通既可以发生在局域网,也可以通过互联网进行。被连通的计算机称为Telnet Server,用户使用的计算机称为客户机或终端。Telnet 的应用不仅方便了远程登录,也给黑客(hacker)提供了又一种入侵手段。

1.Telnet 服务实现基于Telnet 协议的远程登录

Telnet 服务虽然也属于客户-服务器模式的服务,但它更大的意义在于实现了基于Telnet 协议的远程登录。下面介绍有关的远程登录。

1)远程登录的基本概念

分时系统允许多个用户同时使用一台计算机,为了保证系统的安全和记账方便,系统要求每个用户有单独的账号作为登录标识,系统还为每个用户指定了一个口令(密码)。用户在使用该系统之前要输入标识和口令,这个过程称为登录。

远程登录是指用户使用Telnet 命令,使自己的计算机暂时成为远程主机的一个仿真终端的过程。仿真终端等效于一个非智能的机器,它只负责把用户输入的每个字符传递给主机,再将主机输出的每条信息回显在屏幕上。

2)远程登录的工作过程

使用Telnet 进行远程登录时,需要满足以下条件: 在本地计算机上必须装有包含Telnet协议的客户程序;必须知道远程主机的IP 地址域名;必须知道登录标识与口令。

Telnet 远程登录服务分为以下4 个基本过程:

(1)本地计算机与远程主机建立连接。该过程实际上是建立一个TCP 连接,用户必须知道远程主机的IP 地址或域名。

(2)将本地计算机上输入的用户名和口令及以后输入的任何命令(或字符)以NVT(Net Virtual Terminal)格式传送到远程主机。该过程实际上是从本地计算机向远程主机发送一个IP 数据报。

(3)将远程主机输出的NVT 格式的数据转化为本地计算机所接受的格式送回本地终端,包括输入命令回显和命令执行结果。

(4)本地计算机对远程主机进行撤销连接。该过程是撤销一个TCP 连接。

2.Telnet 协议

1)基本内容

Telnet 协议是TCP/IP 协议族中的一员,是Internet 远程登录服务的标准协议。应用Telnet 协议,能够把本地用户所使用的计算机变成远程主机系统的一个终端。它提供了3 种基本服务:

(1)Telnet 协议定义一个网络虚拟终端(Net Virtual Terminal,NVT),为远程的系统提供一个标准接口。客户机程序不必详细了解远程的系统,只需构造使用标准接口的程序。

(2)Telnet 协议包括一个允许客户机和服务器协商选项的机制,还提供一组标准选项。

(3)Telnet 协议对称处理连接的两端,即Telnet 既不强迫客户机从键盘输入,也不强迫客户机在屏幕上显示输出。

2)适应异构

为了使多个操作系统间的Telnet 交互操作成为可能,就必须详细了解异构计算机和操作系统。例如,一些操作系统需要每行文本用ASCII 回车控制符(CR)结束,另一些系统则需要使用ASCII 换行符 (LF),还有一些系统需要用两个字符的序列回车—换行(CR-LF)。再如,大多数操作系统为用户提供了一个中断程序运行的快捷方式,但这个快捷键方式在各个系统中有可能不同(有些系统使用【Ctrl +C】 组合键,而有些系统使用【ESC】 快捷键)。如果不考虑系统间的异构性,那么在本地计算机发出的字符或命令,传送到远地并被远地系统解释后很可能会不准确或者出现错误。因此,Telnet 协议必须解决这个问题。

为了适应异构环境,Telnet 协议定义了数据和命令在Internet 上的传输方式,此定义被称为网络虚拟终端(NVT)。

NVT 的应用过程如下:

(1)对于发送的数据: 客户机软件把来自用户终端的按键和命令序列转换为NVT 格式,并发送到服务器,服务器软件将收到的数据和命令,从NVT 格式转换为远地系统需要的格式。

(2)对于返回的数据: 远地服务器将数据从远地机器的格式转换为NVT 格式,而本地客户机将接收到的NVT 格式数据再转换为本地的格式。

3)Telnet 命令

Telnet 命令至少包括IAC (Interpret As Command)字节和命令代码字节。选项协商命令由3 字节构成,第3 字节是选项编码。其中,IAC 用值为255 的1 字节表示,即2 字节的Telnet 命令格式为ff 命令代码;3 字节的Telnet 命令格式为ff 命令代码选项编码。Telnet 命令的名称、代码、描述如表3-3-1 所示。

表3-3-1 Telnet 命令

续表(www.xing528.com)

例如,Telnet 命令“ff f0”,查上表得命令<IAC SE>,表示“子选项结束”。

4)选项协商

Telnet 两端的机器和操作系统的异构性使Telnet 不可能也不应该严格规定每一个Telnet连接的详细配置,否则将大大影响Telnet 的适应异构性。因此,Telnet 采用选项协商机制来解决这一问题。

Telnet 选项的范围很广: 有些选项扩充了大方向的功能,而有些选项涉及一些微小细节。例如: 有一个选项可以控制Telnet 是在半双工还是全双工模式下工作(大方向);还有一个选项允许远地机器上的服务器决定用户终端类型(小细节)。

Telnet 选项的协商方式对于每个选项的处理都是对称的,即任何一端都可以发出协商申请;任何一端都可以接受或拒绝这个申请。另外,如果一端试图协商另一端不了解的选项,接收请求的一端可简单地拒绝协商。因此,有可能将更新、更复杂的Telnet 客户机服务器版本与较老的、不太复杂的版本进行交互操作。如果客户机和服务器都理解新的选项,就可能会对交互有所改善。否则,它们将一起转到效率较低、但可工作的方式下运行。所有的这些设计都是为了增强适应异构性,可见Telnet 的适应异构性对其的应用和发展是多么重要。

选项协商是对称的,对于任何给定的选项,连接的任何一方都可以发送以下4 种请求的任意一种请求:

(1)WILL: 发送方本身将激活(enable)选项。

(2)DO: 发送方想叫接收端激活选项。

(3)WONT: 发送方本身想禁止选项。

(4)DONT: 发送方想让接收端去禁止选项。

由于Telnet 规则规定,对于激活选项请求(如1 和2),有权同意或者不同意。而对于使选项失效请求(如3 和4),必须同意。这样,4 种请求就会组合出6 种情况,见3-3-2。

表3-3-2 协商请求的6 种情况

选项协商命令需要3 字节: 1 字节为IAC 字节;接着1 字节是WILL、DO、WONT 和DONT 这四者之一;最后1 字节是ID 字节,指明激活或禁止的选项。现在,有40 多个选项是可以协商的。几个常用的选项编码(ID)及名称和含义如表3-3-3 所示。

表3-3-3 Telnet 选项协商命令的常用选项

例如,有Telnet 命令“ff fd 01”,查表得知该命令为<IAC,DO,ECHO>,其含义为发送方要求接收方回送收到的字符。

但是,远程登录不是对称的应用。客户进程完成某些任务,而服务器进程则完成其他一些任务。因此,某些Telnet 选项仅仅适合于客户进程(如要求激活行模式方式),而某些选项则仅仅适合服务器进程。

5)子选项协商

有些选项不是仅仅用“激活”或“禁止”就能够表达的。指定终端类型就是一个例子,客户进程必须发送一个ASCII 字符串来表示终端类型。为了处理这种选项,Telnet 协议定义了子选项协商机制。

如果服务器发送命令字节“ff fa 18 01 ff f0”,则查表可知服务器发送的该字符串为<IAC,SB,24,1,IAC,SE>。

该字符串询问客户进程的终端类型。其中,SB 是子选项协商的起始命令标志。下一字节的“24”代表这是终端类型选项的子选项(通常SB 后面的选项值就是子选项所要提交的内容)。下一字节的“1”表示“发送你的终端类型”。子选项协商的结束命令标志是IAC,就像SB 是起始命令标志一样。

如果终端类型是ansi,客户进程的响应命令将是<IAC,SB,24,0,‘A’,‘N’,‘S’,‘I’,IAC,SE>,其中,第4 字节“0”代表“我的终端类型是”。

6)数据流向

首先,数据信息被用户从本地键盘输入并通过操作系统传到客户机程序,客户机程序将其处理后返回操作系统,并由操作系统经过网络传送到远地机器;然后,远地操作系统将所接收数据传给服务器程序,并经服务器程序再次处理后返回操作系统上的伪终端入口点;最后,远地操作系统将数据传送到用户正在运行的应用程序,这便是一次完整的输入过程。输出将按照同一通路从服务器传送到客户机。

因为每一次的输入和输出,导致计算机将切换进程环境好几次,因此网络开销很大。还好,用户的键入速率并不算高,因此用户对于这个缺点仍然能够接受。

7)强制命令

应该考虑到这样一种情况: 假设本地用户运行了远地机器的一个无休止循环的错误命令或程序,且此命令或程序已经停止读取输入,那么操作系统的缓冲区可能因此而被占满,如果这样,远地服务器也无法再将数据写入伪终端,并且最终导致停止从TCP 连接读取数据,TCP 连接的缓冲区最终也会被占满,从而导致阻止数据流流入此连接。如果以上事情真的发生了,那么本地用户将失去对远地机器的控制。

为了解决此问题,Telnet 协议必须使用外带信令,以便强制服务器读取一个控制命令。我们知道,TCP 用紧急数据机制来实现外带数据信令,那么Telnet 只要附加一个被称为数据标记(date mark)的保留8 位组,并通过让TCP 发送已设置紧急数据位的报文段通知服务器便可以了,携带紧急数据的报文段将绕过流量控制直接到达服务器。作为对紧急信令的响应,服务器将读取并抛弃所有数据,直到找到一个数据标记,服务器在遇到了数据标记后,将返回正常的处理过程。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈