MST

星途 面试题库

面试题:网络编程中TCP连接建立与断开的过程及状态变迁

在网络编程基于TCP/IP协议栈的背景下,请详细描述TCP连接建立(三次握手)和断开(四次挥手)的过程,并说明每一步对应的TCP状态变迁。
46.7万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

TCP连接建立(三次握手)过程及状态变迁

  1. 第一次握手
    • 过程:客户端向服务器发送一个SYN(同步序列号)报文段,该报文段中包含客户端的初始序列号(ISN),记为seq=x。此时客户端进入SYN_SENT状态。
    • 状态变迁:客户端从CLOSED状态变迁到SYN_SENT状态。
  2. 第二次握手
    • 过程:服务器接收到客户端的SYN报文段后,向客户端发送一个SYN + ACK报文段。其中SYN部分的序列号是服务器的初始序列号(ISN),记为seq=y,ACK部分是对客户端SYN报文段的确认,确认号为ack=x + 1。此时服务器进入SYN_RCVD状态。
    • 状态变迁:服务器从LISTEN状态变迁到SYN_RCVD状态。
  3. 第三次握手
    • 过程:客户端接收到服务器的SYN + ACK报文段后,向服务器发送一个ACK报文段。该ACK报文段的确认号为ack=y + 1,序列号为seq=x + 1。此时客户端进入ESTABLISHED状态。服务器接收到该ACK报文段后也进入ESTABLISHED状态。
    • 状态变迁:客户端从SYN_SENT状态变迁到ESTABLISHED状态,服务器从SYN_RCVD状态变迁到ESTABLISHED状态。

TCP连接断开(四次挥手)过程及状态变迁

  1. 第一次挥手
    • 过程:主动关闭方(通常为客户端)发送一个FIN(结束标志)报文段,该报文段的序列号为seq=u(假设此时主动关闭方已经发送到序列号u),表示主动关闭方没有数据要发送了,此时主动关闭方进入FIN_WAIT_1状态。
    • 状态变迁:主动关闭方从ESTABLISHED状态变迁到FIN_WAIT_1状态。
  2. 第二次挥手
    • 过程:被动关闭方(通常为服务器)接收到FIN报文段后,发送一个ACK报文段,确认号为ack=u + 1,序列号为seq=v(假设被动关闭方已经发送到序列号v),表示已经收到主动关闭方的关闭请求。此时被动关闭方进入CLOSE_WAIT状态,主动关闭方收到ACK报文段后进入FIN_WAIT_2状态。
    • 状态变迁:被动关闭方从ESTABLISHED状态变迁到CLOSE_WAIT状态,主动关闭方从FIN_WAIT_1状态变迁到FIN_WAIT_2状态。
  3. 第三次挥手
    • 过程:被动关闭方处理完数据后,也发送一个FIN报文段,序列号为seq=w(假设被动关闭方新的序列号为w),确认号仍为ack=u + 1,表示被动关闭方也没有数据要发送了,此时被动关闭方进入LAST_ACK状态。
    • 状态变迁:被动关闭方从CLOSE_WAIT状态变迁到LAST_ACK状态。
  4. 第四次挥手
    • 过程:主动关闭方接收到被动关闭方的FIN报文段后,发送一个ACK报文段,确认号为ack=w + 1,序列号为seq=u + 1,然后进入TIME_WAIT状态。经过2MSL(Maximum Segment Lifetime,最长报文段寿命)时间后,主动关闭方进入CLOSED状态。被动关闭方收到ACK报文段后直接进入CLOSED状态。
    • 状态变迁:主动关闭方从FIN_WAIT_2状态变迁到TIME_WAIT状态,经过2MSL后变迁到CLOSED状态;被动关闭方从LAST_ACK状态变迁到CLOSED状态。