- 客户端(Client) 主动发起连接。
- 服务端(Server) 等待连接并响应。
1️⃣ 第一次握手:SYN(Client → Server)
- Client 发送
SYN = 1(同步标志位),并随机生成一个 初始序列号(ISN = x),记作:SYN=1, seq=x - 状态变化:
- Client 进入
SYN_SENT(等待服务器确认)。 - Server 仍处于
LISTEN状态。
- Client 进入
2️⃣ 第二次握手:SYN+ACK(Server → Client)
- Server 收到
SYN后,确认 Client 的请求,并发送:
SYN=1(表示自己也希望同步)
ACK=1(确认收到 Client 的SYN)
ack=x+1(表示期望收到x+1数据)
seq=y(Server 也生成一个随机初始序列号y)
完整记为:
SYN=1, ACK=1, ack=x+1, seq=y - 状态变化:
- Server 进入
SYN_RCVD(等待 Client 确认)。
- Server 进入
3️⃣ 第三次握手:ACK(Client → Server)
- Client 收到
SYN+ACK后,检查ack是否等于x+1(验证合法性),然后发送:
ACK=1(确认收到 Server 的SYN)
ack=y+1(期望 Server 发送y+1数据)
seq=x+1(确认之前发送的数据已被接收)
完整记为:
ACK=1, ack=y+1, seq=x+1 - 状态变化:
- Client 进入
ESTABLISHED(连接建立成功)。 - Server 收到 ACK 后也进入
ESTABLISHED。
- Client 进入
