MST

星途 面试题库

面试题:网络编程之Telnet协议交互过程

详细描述Telnet客户端与服务器之间完整的交互流程,包括如何进行选项协商以及数据传输过程中的转义机制。
15.0万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

Telnet客户端与服务器交互流程

  1. 连接建立
    • 客户端使用TCP协议向服务器的23号端口发起连接请求。若服务器处于监听状态,接收到请求后,通过三次握手建立TCP连接。此时,客户端和服务器之间的物理通信链路已就绪。
  2. 选项协商
    • 初始状态:连接建立后,双方进入选项协商阶段。Telnet采用NVT(Network Virtual Terminal)标准,NVT定义了一套通用的字符表示和控制序列,以屏蔽不同终端系统之间的差异。
    • 选项代码:Telnet选项通过特定的代码标识,如选项1代表“回显(ECHO)”,选项3代表“抑制继续(SUPPRESS GO AHEAD)”等。
    • 协商方式
      • WILL:客户端或服务器发送WILL <option - code>表示希望开启某个选项。例如,客户端发送WILL ECHO,表示希望服务器开启回显功能,即服务器将客户端发送的数据回显给客户端。
      • WONT:发送WONT <option - code>表示希望关闭某个选项。
      • DODO <option - code>由一方请求另一方开启某个选项。如服务器发送DO ECHO给客户端,请求客户端开启回显功能。
      • DONTDONT <option - code>用于请求另一方关闭某个选项。
      • 当一方收到DOWILL请求时,它必须以WILLDO(同意请求),或DONTWONT(拒绝请求)响应。例如,客户端收到服务器的DO ECHO,若同意,则回复WILL ECHO;若不同意,则回复WONT ECHO
  3. 数据传输
    • 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。
  4. 连接关闭
    • 当客户端或服务器想要关闭连接时,会发送TCP的FIN(Finish)包。另一方收到FIN包后,回复ACK(Acknowledgment)确认。然后,另一方也发送FIN包,最初发起关闭的一方再回复ACK,完成四次挥手,关闭TCP连接,结束Telnet会话。