Telnet连接之间的选项协商
Telnet基于TCP传输协议,运行在应用层.提供了客户至服务器的终端交互功能.
Telnet使用一条TCP连接,不像FTP,使用TCP两个连接. TELNET服务器端使用的PORT号为23.
双方在进行Telnet连接时,要进行选项协商.
比如:使用字符方式 窗口的大小,终端的类型都要进行协商.
而协商是通过TELNET所支持的命令来实现的.
TELNET的常用命令(具体的见TCP/IP详解P303):
SE 240(F0) 子选项结束
SB 250(FA) 子选项开始
IAC 255(FF) 选项协商的第一个字节
WILL 251(FB) 发送方激活选项(接收方同意激活选项)
DO 253(FD) 接收方同意(发送方想让接收方激活选项)
WONT 252(FC) 接收方不同意
DONT 254(FE) 接受方回应WONT
TELNET的常用选项代码(具体的见TCP/IP详解P304):
1(0x01) 回显(echo)
3(0x03) 抑制继续进行(传送一次一个字符方式可以选择这个选项)
24(0x18) 终端类型
31(0x1F) 窗口大小
32(0x20) 终端速率
33(0x21) 远程流量控制
34(0x22) 行方式
36(0x24) 环境变量
比如,建立一条TELNET连接.实际过程是这样的:(192.168.1.11为客户端.192.168.1.1为服务器端)
1) TCP: 192.168.1.11:49200 > 192.168.1.1:23 [SYN]
2) TCP: 192.168.1.1:23 > 192.168.1.11:49200 [SYN,ACK]
3) TCP: 192.168.1.11:49200 > 192.168.1.1:23 [ACK]
4) TELNET: 23 > 49200 IAC DO 24 ( 表示让接收方激活终端类型动 Command: Do Terminal Type)
5) TELNET: 49200 > 23 IAC WILL 24 / IAC WILL 31 (两条命令IAC WILL 24 IAC WILL 31 分别表示Command:Will Terminal Type / Command Will Negotiate About Window Size)告诉服务器同意终端类型,并且激活窗口大小.
6) TELNET: 23 > 49200 IAC DO 31 / IAC SB 18 24 01 / IAC SE (回应客户端允许协商窗口大小 / 子选项 Send your Terminal Type / 子选项结束)
7) TELNET: 49200 >23 IAC SB 31 80 26 / IAC SE ( 回应服务器,子选项 窗口大小为80/26 / 子选项结束)
8) TELNET: 49200 >23 IAC SB 18 "ANSI" / IAC SE (回应服务器,子选项 窗口类型为ANSI字符型 / 子选项结束)
9) TELNET: 23 > 49200 IAC WILL 03 / IAC WILL 01 (告知客户端 允许抑制继续进行 / 允许回显)
10) TELNET: 49200 >23 IAC DO 03 (回应服务器,接受方同意允许抑制继续进行)
11) TELNET: 49200 >23 IAC DO 01 (回应服务器,接受方同意允许回显)
12) TELNET: Data: ... (此时就开始正式传送数据,这些数据会回显到终端屏幕上)
13) TELNET: Data: ... (此时就开始正式传送数据,这些数据会回显到终端屏幕上)
14) TELNET: Data: ... (此时就开始正式传送数据,这些数据会回显到终端屏幕上)
15) TCP: 192.168.1.11:49200 > 192.168.1.1:23 [FIN ACK] (请求断开连接)
16) TCP: 192.168.1.1:23 > 192.168.1.11:49200 [ACK]
17) TCP: 192.168.1.1:23 > 192.168.1.11:49200 [FIN ACK] (请求断开连接)
18) TCP: 192.168.1.11:49200 > 192.168.1.1:23 [ACK]
....这里一些子选项协议就略过了.一般的,一般登录到主机,还要双方对某些选项进行协商.并且接收方表示同意或不同意(DO,DONT或者WILL WONT)