螺竹编程
发布于 2024-05-01 / 9 阅读
0

网络模型与协议/应用层:Websocket协议介绍

介绍

WebSocket是一种在单个TCP连接上进行全双工通信的协议,它允许在客户端和服务器之间进行实时数据传输。WebSocket协议基于HTTP协议,但是它支持双向通信,可以在客户端和服务器之间双向发送数据,而HTTP协议只支持单向通信,客户端向服务器发送请求,服务器响应请求。

WebSocket协议的优势在于它能够实现实时交互,而不需要像传统HTTP协议一样不停地发送请求来获取最新数据。这使得WebSocket在实时应用程序中非常有用,例如在线游戏、聊天应用和股票交易等。

WebSocket协议建立在HTTP协议之上,并使用HTTP协议的握手过程来建立连接。在握手过程中,客户端发送一个HTTP请求到服务器,请求升级协议到WebSocket。如果服务器支持WebSocket协议,它将响应一个HTTP 101状态码,表示升级成功,此后客户端和服务器可以开始进行WebSocket通信。

WebSocket协议使用固定的帧结构来发送数据,每个帧包含标识数据类型、数据长度、掩码和数据负载等信息。掩码用于加密数据,以便在网络传输中保护数据安全性。

生命周期

WebSocket协议的生命周期主要包括四个阶段:握手、连接、数据传输和关闭。

  1. 握手阶段:在握手阶段,客户端通过发送HTTP请求到服务器来建立WebSocket连接。请求中包含Upgrade头部字段,指明客户端希望升级到WebSocket协议。如果服务器同意升级,会返回HTTP 101状态码,并在响应头中包含Upgrade和Connection头部字段,表示升级成功。此时WebSocket连接建立成功,客户端和服务器可以开始进行数据传输。

  2. 连接阶段:在连接阶段,客户端和服务器之间通过WebSocket连接进行数据传输。客户端和服务器可以双向发送数据,包括文本、二进制、ping和pong等类型的数据。WebSocket连接是全双工的,客户端和服务器可以同时发送和接收数据。此阶段可以持续一段时间,直到需要关闭连接。

  3. 数据传输阶段:在数据传输阶段,客户端和服务器之间可以通过WebSocket连接传输任意类型的数据。客户端和服务器可以随时发送和接收数据,包括实时数据和历史数据等。此阶段可以持续一段时间,直到需要关闭连接。

  4. 关闭阶段:在关闭阶段,客户端或服务器可以通过发送关闭帧来关闭WebSocket连接。关闭帧包含一个特殊的Opcode和一个关闭码,表示关闭连接的原因。当客户端或服务器接收到关闭帧后,会发送一个关闭响应帧,表示已经成功关闭连接。此时WebSocket连接关闭,生命周期结束。

帧结构

WebSocket协议使用固定的帧结构来发送数据,每个帧包含以下几个部分:

  1. FIN(1 bit):表示当前帧是否为消息的最后一帧,如果是,则为1,否则为0。

  2. RSV1、RSV2、RSV3(各1 bit):保留位,暂时没有使用,必须为0。

  3. Opcode(4 bit):表示当前帧的数据类型,包括文本、二进制、关闭连接、ping和pong等类型。

  4. Mask(1 bit):表示数据是否进行掩码处理,客户端发送到服务器的数据必须进行掩码处理,服务器发送到客户端的数据必须不进行掩码处理。

  5. Payload length(7 bit或7+16 bit或7+64 bit):表示数据负载的长度,如果长度小于126,则只使用7位表示长度;如果长度等于或大于126,但小于等于65535,则使用7+16位表示长度;如果长度大于65535,则使用7+64位表示长度。

  6. Masking key(32 bit):如果Mask为1,则需要使用4个字节的掩码密钥对数据进行掩码处理。

  7. Payload data:数据负载,长度根据Payload length的值确定,如果Mask为1,则需要使用掩码密钥对数据进行解码。