•远程登录
–用户通过网络访问在远程系统中可用的所有命令。典型地,用户使用远程计算机的编辑软件进行文字编辑,就象该软件在本地计算机上一样。
•
•TELNET (RFC 854)
–TCP/IP协议族包含的一个简单的远程终端协议。是最早的Internet 应用,起源于1969年的ARPANET,是TELecommunication NETwork protocol的缩写。
–TELNET远程登录采用客户-服务器模式,一个典型的连接如下页图中所示:
•几点说明:
–图中虚线框内一般是操作系统的一部分。因此,TELNET的实现一般是和操作系统相关的。
–TELNET客户进程同时和终端用户和TCP/IP协议模块进行交互。
–TELNET通过TCP/IP协议模块在客户机和远程登录服务器之间建立一个TCP连接
–TELNET把用户端键盘的键击通过TCP发送到远程计算机,使得键击就好像发生在与该计算机直接相连的键盘上一样。同时, TELNET还要把远程计算机上的输出回送到用户端的显示器上。
–TELNET服务器是通过调用登录外壳(伪终端设备驱动)进程处理客户进程,使得客户感觉是直接和一个终端交互。
–TELNET客户软件允许用户指定远程计算机的域名或IP地址。这样对于没有名称-地址绑定的主机也能进行远程登录。
•TELNET提供三种基本的服务:
–定义一个网络虚拟终端,虚拟终端提供了到远程系统的标准接口。客户程序无需知道所有可能的每一种远程系统的细节(例如是什么操作系统),因为 TELNET提供了标准的接口 。
–TELNET包含了一套机制,允许客户和服务器协商选项。 TELNET提供了一套标准的选项。
–TELNET对于连接的双方是对称的,客户端不一定非要从键盘输入,显示器显示,任何程序也都可以成为客户。
•提供到远程系统的标准接口
•不同计算机和操作系统之间存在差异性(如中断程序:有的系统使用Ctrl+C组合键,有的使用ESCAPE;不同系统的文本换行字符也不同。)
•为兼容这种差异,TELNET定义了数据和命令序列应如何在网上传送,称为网络虚拟终端(Network Virtual Terminal),客户端软件首先把用户端的键击和命令序列翻译成NVT格式并发送到服务器端。服务器端的软件再把输入的数据和命令从NVT格式转换成远程系统需要的格式,过程如下图所示。而对于反方向的数据传送,执行相反的过程。
•NVT格式的定义:
•NVT使用标准的7比特ASCII字符集,每个7比特的字符都以8比特格式发送,最高位比特为0。
•标准ASCII字符集中95个是可打印的,NVT仍使用原来的意义。另外有33个为控制字符, NVT给出了相应的控制字符定义,见下页的几个基本定义。
•其中,行结束符以两个字符的序列来表示:回车(CR)\换行(LF) (\r\n),而单独的CR也以两个字符序列来表示:CR\NULL(\R\0)。
•此外NVT在标准ASCII字符集中以外定义了其他控制功能,包括程序中断控制。见下下页表:
•这些控制命令是在标准ASCII字符集中以外定义的,具体的值见下下下页表:
•单独的命令字节是无效的,命令字节需要紧跟在一个控制命令标识字节之后,这个标识字节即是Interpret As Command。
•这样实际的控制命令是两个连续的字节。如中断进程命令应为:
•选项协商
•TELNET连接双方在通信前首先需要交互的信息选项协商数据。选项协商是对称的,即任何一方都可以主动发送选项协商请求给对方。TELNET选项协商有六种情况:
•这样,选项协商需要三个字节:一个IAC字节,一个是WILL、DO、WON’T和DON’T四者之一,最后一个就是要协商的选项。目前可协商的选项有40多个。例如:
•虽然TELNET的双方在选项协商机制中是对等的,都可以发起选项协商请求,但是,由于TELNET不是对称的应用,客户和服务进程分别完成不同的任务。因此,某些TELNET选项仅仅适合于客户进程(例如要求激活行模式方式),某些选项则仅仅适合于服务器进程。
•此外还有一些选项不是仅仅用“激活”或“禁止”就能够表达的。指定终端类型就是一个例子。客户端必须发送一个用ASCII字符串来表示终端类型。为了处理这种选项,我们必须定义子选项协商机制(RFC 1090)
•子选项协商机制(RFC 1090)
•首先是连接的某一方(通常是客户进程)发送3个字节的字符序列来请求激活该选项:(24为终端类型选项的ID号)
•如果收端(通常是服务器进程)同意,那么响应数据:,
•然后服务器进程接着发送如下字符串:,该字符串询问客户进程的终端类型。SB为子选项协商的起始命令标志;24表示是终端类型选项的子选项;“1”表示“发送你的终端类型”;SE是子选项协商的结束命令标志。
•客户进程以如下格式响应其终端类型(假设为IBMPC机):。 “0”表示“我的终端类型是”;终端类型字符串均用大写字母,在服务器端会自动转为小写。
•TELNET连接双方的操作方式
•半双工:目前较少使用,因为它不能充分发挥目前大量使用的支持全双工通信的终端功能。但这是TELNET的默认方式。因为 NVT 是一个半双工设备,它必须从服务器进程获得 Go Ahead 命令。
•一次一个字符:键入的每个字符都单独发送到服务器进程。而服务器同时回显大多数字符。要进入这种方式,只须激活“抑制继续进行(Suppress-GA)”选项和“回显(Echo)”选项。
•一次一行方式(准行方式 RFC 858):“抑制继续进行(Suppress-GA)”和“回显(Echo)”两个选项中的其中之一无效时的工作方式。
•行方式:行方式选项在RFC 1184中定义。
•一个问题:
•当服务器端缓存满,TCP发回零窗口,不能接收客户端的一般数据时,如果远程进程出错,需要终止(比如进入一个死循环,进程不再读入数据),但此时远程服务器不能接收客户的控制命令,这该如何处理?
•TELNET将利用TCP分组数据中的URGENT DATA位设置,发送同步命令Data Mark(DM) 作为同步信号。双方都可以发送该命令.
•当一端收到对方已经进入紧急方式的通告后,它将重新回到正常方式,开始读数据流,一边读一边丢弃所读的数据,直到读到TELNET命令为止。紧急数据的最后一个字节就是DM字节。
•采用TCP紧急方式的原因就是:即使TCP数据流已经被TCP流量控制所终止,TELNET命令也可以在连接上传输数据。
•另一个远程登录协议:Rlogin(RFC1282)
•最初是基于UNIX主机之间的,因此无选项协商机制,比TELNET要简单。其他和TELENT类似。现在也发展了几个非UNIX平台的版本。
领取专属 10元无门槛券
私享最新 技术干货