|
Telnet协议可以工作在任何主机(例如,任何操作系统)或任何终端之间。RFC854[Postel和Reynolds1983a]定义了该协议的规范,其中还定义了一种通用字符终端叫做网络虚拟终端NVT(NetworkVirtualTerminal)。NVT是虚拟设备,连接的双方,即客户机和服务器,都必须把它们的物理终端和NVT进行相互转换。也就是说,不管客户进程终端是什么类型,操作系统必须把它转换为NVT格式。同时,不管服务器进程的终端是什么类型,操作系统必须能够把NVT格式转换为终端所能够支持的格式。
NVT是带有键盘和打印机的字符设备。用户击键产生的数据被发送到服务器进程,服务器进程回送的响应则输出到打印机上。默认情况下,用户击键产生的数据是发送到打印机上的,但是我们可以看到这个选项是可以改变的。
NVTASCII 术语NVTASCII代表7比特的ASCII字符集,网间网协议族都使用NVTASCII。每个7比特的字符都以8比特格式发送,最高位比特为0。行结束符以两个字符CR(回车)和紧接着的LF(换行)这样的序列表示。以\r\n来表示。单独的一个CR也是以两个字符序列来表示,它们是CR和紧接着的NUL(字节0),以\r\0表示。
Telnet命令 Telnet通信的两个方向都采用带内信令方式。字节0xff(十进制的255)叫做IAC(interpretascommand,意思是“作为命令来解释”)。该字节后面的一个字节才是命令字节。如果要发送数据255,就必须发送两个连续的字节255(在前面一节中我们讲到数据流是NVTASCII,它们都是7bit的格式,这就暗示着255这个数据字节不能在Telnet上传输。其实在Telnet中有一个二进制选项,在RFC856[Postel和Reynolds1983b]中有定义,关于这点我们没有讨论,该选项允许数据以8bit进行传输)。图26-8列出了所有的Telnet命令。由于这些命令中很多命令很少用到,所以对于一些重要的命令,如果在下面章节的例子或叙述中遇到,我们再做解释。
| 名称 |
代码(十进制) |
描 |
述 |
| E O F |
2 3 6 |
文件结束符 |
|
| S U S P |
2 3 7 |
挂起当前进程(作业控制) |
| A B O RT |
2 3 8 |
异常中止进程 |
| E O R |
2 3 9 |
记录结束符 |
| S E |
2 4 0 |
子选项结束 |
| N O P |
2 4 1 |
无操作 |
| D M |
2 4 2 |
数据标记 |
| B R K |
2 4 3 |
中断 |
| I P |
2 4 4 |
中断进程 |
| A O |
2 4 5 |
异常中止输出 |
| AY T |
2 4 6 |
对方是否还在运行? |
| E C |
2 4 7 |
转义字符 |
| E L |
2 4 8 |
删除行 |
| G A |
2 4 9 |
继续进行 |
| S B |
2 5 0 |
子选项开始 |
| W I L L |
2 5 1 |
选项协商(图2 6 - 9) |
| W O N T |
2 5 2 |
选项协商 |
| D O |
2 5 3 |
选项协商 |
| D O N T |
2 5 4 |
选项协商 |
| I A C |
2 5 5 |
数据字节2 5 5 |
当前一个字节是IAC(255)时的Telnet命令集 |