TCP 三次握手

流程

TCP 三次握手流程总结

TCP(三次握手)是建立可靠连接的过程,确保双方准备就绪并同步序列号。以下是根据提供的描述总结的三次握手流程:

  1. 服务器进入监听状态(LISTEN)

    • 操作:TCP服务器进程创建传输控制块(TCB),包含连接相关的信息(如连接表、缓存指针、序列号等)。
    • 状态:服务器进入 监听(LISTEN) 状态,等待客户端的连接请求。
    • 特点:服务器被动等待连接请求,称为 被动打开连接
  2. 客户端发送 SYN 报文(SYN-SENT)

    • 操作:TCP客户端进程创建传输控制块,发送带有 SYN 标志的连接请求报文段,序列号设置为 X
    • 状态:客户端进入 同步已发送(SYN-SENT) 状态。
    • 特点
      • SYN 报文不携带数据,但消耗一个序列号。
      • 下一个数据字节的序列号为 X+1
      • 客户端主动发起连接,称为 主动打开连接
  3. 服务器回复 SYN-ACK 报文(SYN-RCVD)

    • 操作:服务器接收到 SYN 报文后,若同意连接,发送带有 SYN 和 ACK 标志的确认报文段,序列号设置为 Y,确认号为 X+1
    • 状态:服务器进入 同步已接收(SYN-RCVD) 状态。
    • 特点
      • SYN-ACK 报文同样不携带数据,但消耗一个序列号。
      • 确认号 X+1 表示确认接收到了客户端的 SYN 报文。
  4. 客户端发送 ACK 报文(ESTABLISHED)

    • 操作:客户端接收到 SYN-ACK 报文后,发送带有 ACK 标志的确认报文段,序列号为 X+1,确认号为 Y+1
    • 状态:客户端进入 连接已建立(ESTABLISHED) 状态。
    • 特点
      • ACK 报文可携带数据(若有),若不携带数据,不消耗序列号。
      • 确认号 Y+1 表示确认接收到了服务器的 SYN 报文。
  5. 服务器确认 ACK 报文(ESTABLISHED)

    • 操作:服务器接收到客户端的 ACK 报文后,进入 连接已建立(ESTABLISHED) 状态。
    • 特点:双方均进入已建立状态,可以进行可靠的数据传输。

三次握手关键点

  • 初始化序列号:客户端和服务器各自选择初始序列号 XY,用于后续的数据传输和确认。
  • 状态转换
    • 客户端:无连接 → SYN-SENT → ESTABLISHED
    • 服务器:LISTEN → SYN-RCVD → ESTABLISHED
  • 控制位
    • SYN:同步序列号,标志连接请求或确认。
    • ACK:确认收到对方的报文,确保双方同步。

通过以上三次报文的交换,TCP确保了双方都已准备就绪,并且序列号已经同步,建立一个可靠的通信通道。