三次握手Three-way Handshake
1.1简介
传输层(Transport Layer)TCP协议中客户端和服务端建立联系
1.2 目的
确保数据完整性可靠性
1.3 情景举例
你(客户端)打电话约朋友(服务端)吃饭
- 第一次握手(你打电话)
- 你:“喂,老王!晚上吃火锅不?”
- (SYN=1:你发起邀约,但不确定对方是否能听到)
- 此时你竖起耳朵等回复,心里没底。
- 第二次握手(朋友回应)
- 老王:“可以啊!不过得7点后,你方便吗?”
- (SYN=1, ACK=1:朋友答应了你的邀约,同时提出自己的条件)
- 现在你知道朋友能听到你,但朋友不确定你是否能听到他的回复。
- 第三次握手(你确认)
- 你:“行,那就7点老地方见!”
- (ACK=1:你确认了朋友的条件)
- 双方都确认了对方能正常沟通,约饭成功
1.4 三次握手流程
- 第一次握手(SYN=1)
- 客户端发送一个TCP报文,包含:
- SYN=1(表示请求建立连接)
- 初始序列号(ISN)(例如Seq=x,随机生成以防止历史冲突)
- 状态变化:
- 客户端进入SYN_SENT状态。
- 客户端发送一个TCP报文,包含:
- 第二次握手(SYN=1, ACK=1)
- 服务端收到SYN后,回复一个报文,包含:
- SYN=1(表示服务端也发起连接请求)
- ACK=1(确认客户端的SYN)
- 确认号(Ack)=x+1(表示期望下次收到x+1的数据)
- 服务端的ISN(Seq=y)。
- 状态变化:
- 服务端进入SYN_RCVD状态。
- 服务端收到SYN后,回复一个报文,包含:
- 第三次握手(ACK=1)
- 客户端收到服务端的SYN+ACK后,回复:
- ACK=1(确认服务端的SYN)
- 确认号(Ack)=y+1(期望服务端下次发送y+1的数据)
- 可携带数据(若开启快速传输)。
- 状态变化:
- 客户端和服务端均进入ESTABLISHED状态,连接建立完成。
- 客户端收到服务端的SYN+ACK后,回复: