经典面试题,今天我们来了解一下TCP连接三次握手的过程。

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。建立一个TCP连接需要经过一个被称为"三次握手"(three-way handshake)的过程,目的是在两个通信端(通常是客户端和服务器)之间建立一个可靠的连接。下面是三次握手的详细步骤:

  1. SYN(同步序列编号)

    • 客户端发送一个SYN(synchronize)标志位被设置为1的TCP段,以便开始一个新的连接。此时客户端选择一个初始序列号(Sequence Number)X,用来标识传输的数据字节流中的第一个字节。
    • 客户端进入SYN_SENT状态,等待服务器确认。
  2. SYN+ACK(同步和确认)

    • 服务器接收到客户端的SYN请求后,需要确认客户端的SYN,同时自己也发送一个SYN请求。服务器发送一个TCP段,其中SYN和ACK(acknowledgment)标志位都被设置为1,确认号(Acknowledgment Number)设置为X+1(确认收到客户端的SYN,并期望收到序列号为X+1的数据),同时选择自己的一个初始序列号Y。
    • 服务器进入SYN_RCVD状态。
  3. ACK(确认)

    • 客户端收到服务器的SYN+ACK响应后,发送一个ACK确认。这个TCP段中ACK标志位被设置为1,序列号设置为X+1,确认号设置为Y+1。
    • 客户端进入ESTABLISHED状态,此时连接建立成功。
    • 服务器收到客户端的ACK后也进入ESTABLISHED状态。