一、三次握手 (Three-Way Handshake)
概念:
三次握手用于在 TCP 连接建立时,确保客户端和服务器之间的通信信道可靠,并同步双方的初始序列号。
三次握手过程
-
第一次握手:客户端向服务器发送
SYN
(synchronize) 报文,表示请求建立连接,并携带一个初始序列号Seq = x
。- 客户端状态:
SYN_SENT
。
- 客户端状态:
-
第二次握手:服务器收到
SYN
报文后,回复一个SYN + ACK
报文,表示同意建立连接,并携带自己的初始序列号Seq = y
和确认号Ack = x+1
。- 服务器状态:
SYN_RCVD
。
- 服务器状态:
-
第三次握手:客户端收到
SYN + ACK
报文后,回复一个ACK
报文,确认序列号为Ack = y+1
,并正式建立连接。- 客户端状态:
ESTABLISHED
。 - 服务器状态:
ESTABLISHED
。
- 客户端状态:
举例
假设客户端与服务器建立一个连接:
-
客户端 → 服务器:
客户端发送SYN (Seq=100)
,请求建立连接。 -
服务器 → 客户端:
服务器回复SYN+ACK (Seq=300, Ack=101)
,同意连接。 -
客户端 → 服务器:
客户端回复ACK (Seq=101, Ack=301)
,连接建立成功。
二、四次挥手 (Four-Way Handshake)
概念:
四次挥手用于在 TCP 连接断开时,确保双方都能完全关闭通信,释放连接资源。
四次挥手过程
-
第一次挥手:客户端发送
FIN
报文,表示不再发送数据,但可以接收数据。- 客户端状态:
FIN_WAIT_1
。
- 客户端状态:
-
第二次挥手:服务器收到
FIN
报文后,回复一个