WebSocket 是什么
WebSocket 是一种应用层通信协议,建立在TCP连接之上,目的是解决传统 HTTP 协议在实时通信场景下效率低下的问题。它的核心特点是:只需要一次握手,就能建立一条持久化、全双工的通信通道,客户端和服务器之后可以随时主动向对方发送数据,而不需要像 HTTP 那样每次通信都重新发起请求。
WebSocket 由 IETF 制定为标准协议(RFC 6455),如今已被所有主流浏览器和服务器广泛支持,是构建实时 Web 应用不可或缺的基础技术之一。
从 HTTP 轮询到 WebSocket:为什么需要它
在 WebSocket 出现之前,网页想要实现"实时更新"效果(例如聊天消息、股票行情),通常依赖两种变通方案:
- 短轮询:客户端每隔几秒主动发起一次 HTTP 请求,询问服务器有没有新数据。这种方式实现简单,但存在明显的延迟(数据要等到下一次轮询才能被发现),也会产生大量无效请求,浪费带宽和服务器资源。
- 长轮询:客户端发起请求后,服务器先"挂起"连接,直到有新数据才响应,响应后客户端立即发起下一次请求。这种方式降低了延迟,但连接频繁建立和断开的开销依然存在。
WebSocket 从根本上解决了这个问题:连接一旦建立就会保持打开,服务器有新数据时可以随时主动推送给客户端,无需等待客户端"询问",也不需要为每次消息重新建立连接。这让实时通信的延迟和资源消耗都大幅降低。
WebSocket 的建立过程
WebSocket 的巧妙之处在于,它复用了 HTTP 的握手机制来建立连接,具体过程是:
- 客户端发送一个特殊的 HTTP 请求,请求头中包含
Upgrade: websocket字段,表示希望将连接从 HTTP 升级为 WebSocket。 - 服务器如果同意,会返回状态码 101(Switching Protocols),表示协议切换成功。
- 之后这条 TCP 连接就不再遵循 HTTP 的请求-响应模式,而是按照 WebSocket 自己的帧格式进行双向数据传输,直到任意一方主动关闭连接。
由于建立过程本质上是一次标准的 HTTP 请求,WebSocket 天然具备穿透大多数 HTTP 代理、防火墙的能力,这也是它被广泛用于各种网络环境的重要原因。
WSS:WebSocket 与 TLS 的结合
正如 HTTP 有加密版本 HTTPS,WebSocket 也有对应的加密版本 WSS(WebSocket Secure),即在 WebSocket 连接之上叠加TLS加密层。WSS 不仅提供了传输加密和身份验证,其流量特征与普通 HTTPS 网站访问几乎无法区分,这一特性使其在代理协议设计中被广泛借用。
WebSocket 在代理协议中的应用
WebSocket(尤其是 WSS)之所以受到网络代理协议的青睐,主要基于以下几个原因:
- 流量伪装:基于 WebSocket 的连接在流量特征上接近普通网站访问,比裸 TCP 流量更不容易被针对性识别。
- 配合 CDN 中转:WebSocket 建立在标准 HTTP(S) 之上,可以被 CDN 正常识别和转发,让代理服务能够借助 CDN 节点做一层中转和防护。
- 兼容性好:能够穿透大多数只允许标准 HTTP/HTTPS 端口通行的网络环境。
VMess与VLESS协议都原生支持搭配 WebSocket 传输,这也是目前节点配置中较为常见的组合方式之一;Trojan虽然默认直接基于 TLS 传输,但也可以搭配 WebSocket 使用以获得配合 CDN 中转的能力。
理解 WebSocket 的持久连接机制后,可以进一步阅读VMess 协议介绍与VLESS 协议介绍,了解它们如何结合 WebSocket 与 TLS 构建更隐蔽的传输方案。