WebSocket 是一种基于 TCP 的协议,因此它的连接过程也遵循 TCP 的三次握手和四次挥手。下面是 WebSocket 的三次握手和四次挥手过程: 三次握手:
- 客户端向服务器发送 SYN 报文,请求建立连接。
- 服务器向客户端发送 SYN-ACK 报文,表示接受请求,并告诉客户端自己的初始序号(ISN)。
- 客户端向服务器发送 ACK 报文,表示确认收到了服务器的 SYN-ACK 报文,并告诉服务器客户端的初始序号。 四次挥手:
- 客户端向服务器发送 FIN 报文,表示客户端已经没有数据要发送了。
- 服务器收到客户端的 FIN 报文后,并不立即关闭连接,而是向客户端发送 ACK 报文,表示已经收到了客户端的 FIN 报文。
- 如果服务器也没有数据要发送了,则服务器向客户端发送 FIN 报文,表示服务器已经没有数据要发送了。
- 客户端收到服务器的 FIN 报文后,向服务器发送 ACK 报文,表示已经收到了服务器的 FIN 报文,并告诉服务器可以关闭连接了。 在 WebSocket 连接中,三次握手只需要进行一次,而四次挥手则需要在连接关闭时进行。WebSocket 的握手过程会包含一些特殊的 HTTP 报文,用于协商和确认 WebSocket 协议的版本和支持的扩展等信息。