详解TCP协议中的三次握手和四次挥手

5 min read

TCP协议中的三次握手和四次挥手是建立和结束连接时必须遵循的过程。

三次握手:

  1. 客户端向服务器发送SYN请求包(SYN=1,ACK=0),并指定初始序列号Sequence。表示客户端请求建立连接,但此时连接是未确认的。

  2. 服务器接收到客户端的SYN请求包,回复一个确认数据包(SYN=1,ACK=1),在这个确认数据包中也指定一个自己的初始序列号Sequence,并且还包含了客户端发送过来的序列号Sequence+1,表示服务器已经收到了客户端的请求,并就此建立连接。

  3. 客户端接收到服务器的确认数据包之后,再回复一个确认数据包(ACK=1),也携带一个序列号Sequence+1,表示客户端也已经正式连接了服务器了。

四次挥手:

  1. 客户端想要结束连接,向服务器发送一个FIN包(ACK=0,FIN=1),并且向服务器传递一个Sequence。表示客户端不再需要连接了,但这个时候仍然可以接收服务器的数据包。

  2. 服务器收到了客户端的FIN包,并通过一个ACK包回复(ACK=1),并且服务器向客户端传递一个确认号码Acknowledgement(也是一个Sequence)。表示服务器已经收到了客户端的确认,并且准备结束连接了。

  3. 服务器向客户端发送一个FIN包(ACK=0,FIN=1),并且向客户端传递一个Sequence。表示服务器也不再需要连接了。

  4. 客户端收到了服务器的FIN包,并通过一个ACK包回复(ACK=1),并且向服务器传递一个确认号码Acknowledgement(也是一个Sequence)。表示客户端也已经知道了服务器要断开连接的请求,并且也准备结束连接了。

最终,双方都已经确认要结束连接,连接就被正式断开。