WebSocket(WS)协议系列(一)基本概念

ws协议是什么?

WebSocket(WS)协议是一种网络通信协议,提供了全双工、单连接、低延迟的通信方式,通常用于浏览器和服务器之间的实时数据交换。与传统的HTTP协议相比,WebSocket允许在客户端和服务器之间建立持续的连接 ,可以在连接建立后双向发送消息,而不需要每次都重新建立连接。

基于什么协议而来的呢?

WebSocket协议是通过HTTP协议的"握手"过程来初始化的。具体来说,WebSocket协议通过HTTP的Upgrade头部来进行升级。这样,客户端首先通过HTTP向服务器发起请求,服务器响应后,如果同意升级,HTTP连接就会转换为WebSocket连接。

在建立WebSocket连接的初始阶段,客户端和服务器进行一次HTTP握手,确保通信双方都支持WebSocket协议。一旦握手成功,HTTP协议就不再参与数据传输,后续的数据交换是通过WebSocket协议进行的。

为什么可以解决HTTP协议的非持续连接问题?怎么解决的?

HTTP协议是基于请求-响应模型的,也就是说,

1.频繁的连接建立和断开: 每次客户端向服务器发起请求时,服务器都会建立一个新的连接,并在响应完成后关闭连接。

2.无法实现双向通信:客户端发送请求后只能等待服务器响应,无法主动向服务器发送数据。

WebSocket通过"升级"HTTP连接并保持持久连接,避免了HTTP协议每次请求都建立新连接的开销,并提供了双向通信能力。

持久连接: WebSocket连接在建立后会保持打开状态,直到客户端或服务器主动关闭连接。这避免了每次请求都需要重新建立连接的开销。

全双工通信: WebSocket允许客户端和服务器在同一个连接上进行双向通信。客户端不仅可以发送请求,还可以随时接收来自服务器的消息,反之亦然。这让实时数据传输成为可能,比如即时消息、股票行情更新等。

WebSocket如何保持持久连接?

WebSocket通过TCP连接来保持持久连接。TCP是一个面向连接的协议,它在客户端和服务器之间建立一个稳定的连接,直到主动断开。因此,WebSocket利用TCP的特性保持连接持续开放。

既然通过TCP进行保持,使用TCP握手不行吗,为什么还要使用HTTP握手呢?

  1. 浏览器的支持与安全性:
    浏览器本身通常只能直接支持HTTP和HTTPS 协议。
    通过HTTP握手,WebSocket连接可以更好地遵守浏览器的同源策略,并允许跨域通信。HTTP握手阶段通过HTTP头信息来进行跨域控制,从而使WebSocket能够更安全地在跨域环境中使用。
  2. HTTP协议的广泛支持:
    普遍存在: HTTP协议是互联网上最常见的协议,几乎所有的服务器和客户端都支持。通过HTTP的握手,WebSocket可以利用现有的基础设施进行初步的连接
    端口的兼容性: 默认情况下,HTTP协议使用80端口,HTTPS使用443端口,而WebSocket的默认端口是80(非加密)或443(加密)。因为HTTP和HTTPS协议通常已经在网络防火墙或代理中得到支持,WebSocket的HTTP握手使得WebSocket连接更容易穿透这些中间设备
  3. TCP握手的局限性:
    TCP协议本身确实也支持持久连接,但它并不具备像HTTP协议那样的协议协商机制。通过HTTP的握手,客户端和服务器可以协商一些WebSocket协议相关的特性 ,比如:
    协议版本: 在HTTP请求头中,可以指明使用的WebSocket版本以及其他的协议选项。
    安全性(加密): WebSocket也可以通过HTTP的握手阶段来协商是否使用加密(即wss://与ws://),确保数据传输的安全性。

下面看个小栗子:

WebSocket使用HTTP协议进行握手的具体流程。

1.客户端发起请求:客户端通过HTTP协议发起一个带有特定头部(如Upgrade : websocket和Connection: Upgrade)的请求,表示希望将连接升级为WebSocket协议。

复制代码
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlbG9naW5nCg==
Sec-WebSocket-Version: 13

2.服务器响应:

如果服务器支持WebSocket协议,它会通过HTTP响应返回一个"101 Switching Protocols"的状态码,并在响应头中确认协议升级

复制代码
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

3.协议切换: 一旦握手成功,客户端和服务器之间的通信就不再使用HTTP协议,而是切换到WebSocket协议,这时可以开始进行持久的、双向的实时通信。

相关推荐
liulilittle4 小时前
OPENPPP2 —— IP标准校验和算法深度剖析:从原理到SSE2优化实现
网络·c++·网络协议·tcp/ip·算法·ip·通信
北极光SD-WAN组网6 小时前
从0到1搭建某铝箔智慧工厂网络:5G与WiFi 6助力智能制造
网络·5g·制造
阿昭L7 小时前
HTTP原理
网络·网络协议·http
hazy1k7 小时前
STM32H750 RTC介绍及应用
网络·stm32·实时音视频
没书读了8 小时前
考研复习-计算机网络-第三章-数据链路层
网络·计算机网络·考研
zhao3266857518 小时前
2025年代理IP三强横评:LoongProxy、神龙海外动态IP代理、全民HTTP怎么选?看完这篇不踩坑
网络协议·tcp/ip·http
on the way 1238 小时前
多线程之HardCodedTarget(type=OssFileClient, name=file, url=http://file)异常
网络·网络协议·http
WhoisXMLAPI8 小时前
WhoisXML API再次荣登2025年美国Inc. 5000快速成长企业榜单
网络·安全
阿sir1989 小时前
ZYNQ 自定义IP
服务器·网络·tcp/ip
星马梦缘10 小时前
计算机网络4 第四章 网络层——网络间的通信问题(省际之间如何规划信件运输路线)
网络·计算机网络·路由·ip地址·子网掩码·icmp·ipv4/ipv6