MST

星途 面试题库

面试题:网络编程之TCP连接状态转换

在基于TCP/IP协议栈的网络通信中,描述一下TCP连接从客户端发起SYN到最终完成四次挥手关闭连接,各个阶段的状态名称及状态转换的条件。
48.4万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试
  1. 客户端状态及转换
    • SYN - SENT
      • 状态描述:客户端调用connect函数主动发起连接,发送SYN包后进入此状态。
      • 转换条件:收到服务器的SYN + ACK包后,发送ACK包确认,并进入ESTABLISHED状态。
    • ESTABLISHED
      • 状态描述:连接已建立,客户端和服务器可以进行数据传输。
      • 转换条件:客户端主动调用close函数关闭连接,发送FIN包,进入FIN - WAIT - 1状态;或者接收到服务器的FIN包,进入CLOSE - WAIT状态。
    • FIN - WAIT - 1
      • 状态描述:客户端已发送FIN包,等待服务器的ACK确认。
      • 转换条件:接收到服务器的ACK确认包,进入FIN - WAIT - 2状态;若同时接收到服务器的FIN + ACK包,则直接进入TIME - WAIT状态。
    • FIN - WAIT - 2
      • 状态描述:客户端已收到服务器对FIN包的ACK确认,等待服务器的FIN包。
      • 转换条件:接收到服务器的FIN包,发送ACK确认,进入TIME - WAIT状态。
    • TIME - WAIT
      • 状态描述:客户端已发送对服务器FIN包的ACK确认,等待2MSL(Maximum Segment Lifetime,最长报文段寿命)时间确保所有相关报文都从网络中消失。
      • 转换条件:2MSL时间过去后,进入CLOSED状态。
    • CLOSED
      • 状态描述:连接完全关闭,资源已释放。
  2. 服务器状态及转换
    • LISTEN
      • 状态描述:服务器调用listen函数后,处于监听状态,等待客户端连接。
      • 转换条件:收到客户端的SYN包后,发送SYN + ACK包,进入SYN - RCVD状态。
    • SYN - RCVD
      • 状态描述:服务器收到客户端的SYN包并发送了SYN + ACK包进行响应,等待客户端的ACK确认。
      • 转换条件:收到客户端的ACK确认包,进入ESTABLISHED状态。
    • ESTABLISHED
      • 状态描述:同客户端,连接已建立,可进行数据传输。
      • 转换条件:服务器调用close函数关闭连接,发送FIN包,进入CLOSE - WAIT状态;或者接收到客户端的FIN包,发送ACK确认,进入LAST - ACK状态。
    • CLOSE - WAIT
      • 状态描述:服务器收到客户端的FIN包,等待应用层调用close函数关闭连接。
      • 转换条件:应用层调用close函数,发送FIN包,进入LAST - ACK状态。
    • LAST - ACK
      • 状态描述:服务器已发送FIN包,等待客户端的ACK确认。
      • 转换条件:收到客户端的ACK确认包,进入CLOSED状态。