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