- 第一次握手,客户端请求建立连接,Client 向 Server 发送一个同步报文(SYN=1),同时随机生成 seq=x 的初始序列号一块到服务器,客户端进入 SYN_SENT 状态,等待服务器确认;
- 第二次握手,服务端接收到连接请求报文后,如果同意建立连接,则向客户端发送同步确认报文(SYN=1, ACK=1),确认号为 Ack=x+1,同时随机生成 seq=y 的初始序列号,服务器进入 SYN_RECV 状态;
- 第三次握手,客户端接收到服务端的确认后,向服务端发送一个确认报文(ACK=1),确认号为 Ack=y+1,序列号为 seq=x+1,客户端和服务器端进入ESTABLISHED 状态,完成三次握手。
理想状态下,TCP 连接一旦建立,在通信双方中任何一方主动关闭连接前,TCP 连接将一直保持下去。
- SYN:表示建立连接;
- FIN:表示关闭连接;
- ACK:表示响应;
- seq:Sequence Number,序列号,用于标识发送方发送的数据段的顺序;
- Ack:Acknowledgment Number,确认号,用于标识接收方已经收到了哪些数据段。