技术笔记

TCP 三次握手

在通过 TCP 传输数据时,第一步就是要先建立一个连接。TCP 建立连接的过程,就是我们常说的三次握手。

我们经常将三次握手,描述成「请求 → 应答 → 应答之应答」。

至于 TCP 握手为什么是三次,其实就是要让双端都经历一次「请求 → 应答」的过程,来确认对方还在。网络情况是多变的,双端都需要一次自己主动发起的请求和对方回复的应答过程,来确保对方和网络是正常的。

下面这张图,是比较经典的 TCP 三次握手的消息和双端状态的变化。

tcp handshakes

我们先来解释一下这张图:

  1. 在初始时,双端处于 CLOSE 状态,服务端为了提供服务,会主动监听某个端口,进入 LISTEN 状态。
  2. 客户端主动发送连接的「SYN」包,之后进入 SYN-SENT 状态,服务端在收到客户端发来的「SYN」包后,回复「SYN,ACK」包,之后进入 SYN-RCVD 状态。
  3. 客户端收到服务端发来的「SYN,ACK」包后,可以确认对方存在,此时回复「ACK」包,并进入 ESTABLISHED 状态。
  4. 服务端收到最后一个「ACK」包后,也进入 ESTABLISHED 状态。

正常的三次握手之后,双端都进入 ESTABLISHED 状态,在此之后,就是正常的数据传输过程。

沪ICP备19047755号-2