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命令集