WebSocket协议是一种在单个TCP连接上进行全双工通信的协议。
它使得客户端和服务器之间的数据交换变得更加简单,允许服务器主动向客户端推送数据。连接建立后,客户端和服务器可以随时发送数据给对方,而不需要轮询请求。
WebSocket协议在OSI七层模型中的位置可以理解为跨越了多个层次,但主要归属于传输层和应用层之间。
传输层(Layer 4)依赖:WebSocket实际上依赖于TCP协议来保证可靠的数据传输。因此,在这个意义上,它利用了传输层的服务。
应用层(Layer 7)实现:然而,WebSocket本身是一种应用层协议,设计用于在客户端和服务器之间提供全双工通信。它定义了如何在已经建立的TCP连接上进行高效的数据交换,特别是在需要实时双向通信的应用场景中,如在线聊天、游戏等。
WebSocket连接是从HTTP请求开始的,这个请求包括一些特定的头部信息,Upgrade: websocket
和Connection: Upgrade
),用来告诉服务器客户端希望升级到WebSocket协议。
客户端发送请求:客户端向服务器发送一个带有Upgrade: websocket
头部的HTTP请求。
httpGET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Version: 13 Origin: http://example.com
服务器响应:如果服务器同意升级,则返回一个状态码为101的响应,并包含相应的确认头部。
httpHTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
这里的Sec-WebSocket-Accept
是通过对客户端提供的Sec-WebSocket-Key
进行特定算法处理后生成的,确保了握手的安全性。
一旦握手成功,通信就切换到了WebSocket协议。WebSocket的数据传输使用一种紧凑的二进制帧格式:
WebSocket因其高效性和低延迟特性,非常适合于以下场景:
WebSocket提供了一种有效的方法来实现实时双向通信,提升了用户体验并减少了不必要的网络开销。