面试题答案
一键面试Telnet客户端与服务器交互流程
- 连接建立
- 客户端使用TCP协议向服务器的23号端口发起连接请求。若服务器处于监听状态,接收到请求后,通过三次握手建立TCP连接。此时,客户端和服务器之间的物理通信链路已就绪。
- 选项协商
- 初始状态:连接建立后,双方进入选项协商阶段。Telnet采用NVT(Network Virtual Terminal)标准,NVT定义了一套通用的字符表示和控制序列,以屏蔽不同终端系统之间的差异。
- 选项代码:Telnet选项通过特定的代码标识,如选项1代表“回显(ECHO)”,选项3代表“抑制继续(SUPPRESS GO AHEAD)”等。
- 协商方式:
- WILL:客户端或服务器发送
WILL <option - code>
表示希望开启某个选项。例如,客户端发送WILL ECHO
,表示希望服务器开启回显功能,即服务器将客户端发送的数据回显给客户端。 - WONT:发送
WONT <option - code>
表示希望关闭某个选项。 - DO:
DO <option - code>
由一方请求另一方开启某个选项。如服务器发送DO ECHO
给客户端,请求客户端开启回显功能。 - DONT:
DONT <option - code>
用于请求另一方关闭某个选项。 - 当一方收到
DO
或WILL
请求时,它必须以WILL
或DO
(同意请求),或DONT
或WONT
(拒绝请求)响应。例如,客户端收到服务器的DO ECHO
,若同意,则回复WILL ECHO
;若不同意,则回复WONT ECHO
。
- WILL:客户端或服务器发送
- 数据传输
- NVT字符表示:数据以NVT格式传输。NVT将每个字符编码为7位ASCII码,并通过TCP连接传输。例如,字符
'A'
的ASCII码是65,在传输时就以二进制01000001的形式发送。 - 转义机制:
- IAC(Interpret As Command):由于Telnet控制命令和普通数据都在同一TCP连接中传输,为了区分控制命令和普通数据,引入了IAC(值为255,即11111111)作为转义字符。
- 单字节命令:如果接收到的字节是IAC,且紧随其后的字节不是IAC,那么第二个字节被解释为Telnet控制命令。例如,IAC后跟246(IP,Interrupt Process)表示中断服务器上正在运行的进程。
- 双字节命令:如果接收到连续两个IAC字节(IAC IAC),则表示实际数据中的值255,而不是控制命令。这是因为如果单纯出现255这个值,会被误认成IAC控制命令起始,所以用两个IAC表示数据中的255。
- NVT字符表示:数据以NVT格式传输。NVT将每个字符编码为7位ASCII码,并通过TCP连接传输。例如,字符
- 连接关闭
- 当客户端或服务器想要关闭连接时,会发送TCP的FIN(Finish)包。另一方收到FIN包后,回复ACK(Acknowledgment)确认。然后,另一方也发送FIN包,最初发起关闭的一方再回复ACK,完成四次挥手,关闭TCP连接,结束Telnet会话。