TCP三次握手(Three-Way Handshake)是TCP连接建立的过程,确保客户端和服务器之间的可靠通信。其主要目的是同步双方的序列号、确认彼此的接收能力,并确保双方都准备好进行数据传输。具体过程如下:

1. SYN(同步)

  • 客户端向服务器发送一个SYN(同步序列编号)包,用来请求建立连接。这个包的标志位SYN为1,客户端随机选择一个初始序列号(ISN,Initial Sequence Number),假设为 Seq = X

客户端发送的数据包示意:

Client → Server : SYN, Seq = X

2. SYN-ACK(同步-确认)

  • 服务器收到客户端的SYN包后,返回一个SYN-ACK包,表示同意建立连接。此包的SYN标志位为1,ACK标志位为1,服务器选择自己的初始序列号 Seq = Y,并确认客户端的序列号加1(即 Ack = X + 1)。

服务器返回的数据包示意:

Server → Client : SYN, Ack = X + 1, Seq = Y

3. ACK(确认)

  • 客户端收到服务器的SYN-ACK包后,向服务器发送一个确认包,标志位ACK为1,确认号(Ack)是 Y + 1,表示确认收到了服务器的序列号。

客户端返回的数据包示意:

Client → Server : Ack = Y + 1

此时,TCP连接已经建立,双方可以开始数据传输。

总结:

  • 客户端 → 服务器: SYN, Seq = X
  • 服务器 → 客户端: SYN-ACK, Seq = Y, Ack = X + 1
  • 客户端 → 服务器: ACK, Ack = Y + 1

这个过程确保了双方都能同步各自的初始序列号,并确认对方的接收能力,避免了数据丢失或错误的发生。