iis服务器助手广告
返回顶部
首页 > 资讯 > 服务器 >WebSocket协议
  • 617
分享到

WebSocket协议

websocket服务器网络 2023-09-02 12:09:10 617人浏览 泡泡鱼
摘要

文章目录 备注一、什么是WebSocket二、为什么要有WebSocket三、WebSocket特点3.1 全双工3.2 数据传输使用二进制帧3.3 服务地址沿用HTTP格式3.4 默认端口为

文章目录

备注

发送数据强制使用掩码的原因
提供基本的防护,保证每次的消息都是随机的,抵御缓存中毒攻击,但如果运行在SSl/TLS上就没必要了
JS如何发送ping数据帧保活

//这里我们每隔 5 秒钟向服务器发送一个 Ping 帧,//并带上 type 参数值为 ping 的字符串。服务器收到 Ping 帧后,应该立即回复一个 Pong 帧,//并包含 type 参数值为 pong 的字符串,以保持连接的活跃。const websocket = new WEBSocket("wss://example.com");// 每隔 5 秒钟发送一次 Ping 帧setInterval(function() {  if (webSocket.readyState === WebSocket.OPEN) {    webSocket.send(JSON.stringify({ type: "ping" }), { fin: true, opcode: 0x9 });  }}, 5000);

一、什么是WebSocket

  1. 将WebSocket拆开来看,WEB指的是Http、Socket指的是套接字调用。那么两个连起来就是WebSocket的含义了。WebSocket就是运行在"Web"上,也就是HTTP上的Socket通信规范,提供与 “tcp” Socket类似的功能,使用它可以像"TCP Socket"一样调用下层协议栈,任意的收发数据。
  2. WebSocket是基于TCP的轻量级网络通信协议,和HTTP属应用层,它俩是平级的。可以理解为TCP OVER WEB

二、为什么要有WebSocket

为了弥补Http协议某方面的缺陷,比如Http2针对队头阻塞引入的多路复用。WebSocket就是为了解决HTTP协议“请求-应答模式”而诞生的。
请求-应答模式的不足:

  1. 是一种"半双工"的通信模式,虽然双方可以都发出数据,但是同一时刻只能收或者发。
  2. 是一种被动的通信模式,服务器端只能被动响应客户端的请求,而无法主动发送数据。虽然后来的Http/2 Http/3新增了Stream、Server Push等特性,但是“应答-请求“仍然是最主要的工作模式。这就导致 HTTP 难以应用在动态页面、即时消息、网络游戏等要求“实时通信”的领域。

在WebSocket出现之前,因为浏览器是一个受限的沙盒环境,不能使用TCP,所以WEB环境开发只能使用Http轮询来模拟实时通信的效果,但是代价大效率低。所以WebSocket就应运而生了,早期是HTML5的一部分,后来自立门户,成了一个单独的标准。RFC文档编号是6455

三、WebSocket特点

3.1 全双工

WebSocket是真正“全双工”的通信协议,和TCP一样,客户端和服务端都可以随时向对方发送数据。而不用像Http一样“你拍一我拍一”。这样服务器可以更加主动,一旦有新数据可以推送给客户端,而不用轮询。

3.2 数据传输使用二进制帧

WebSocket 采用了二进制帧结构,语法、语义与 HTTP 完全不兼容,但因为它的主要运行环境是浏览器,为了便于推广和应用,就不得不“搭便车”,在使用习惯上尽量向 HTTP 靠拢,这就是它名字里“Web”的含义。

3.3 服务地址沿用HTTP格式

服务发现方面,WebSocket 没有使用 TCP 的“IP 地址 + 端口号”,而是延用了 HTTP 的 URI 格式,但开头的协议名不是“http”,引入的是两个新的名字:“ws”和“wss”,分别表示明文和加密的 WebSocket 协议。

3.4 默认端口为80和443

因为现在互联网上的防火墙屏蔽了绝大多数的端口,只对 HTTP 的 80、443 端口“放行”,所以 WebSocket 就可以“伪装”成 HTTP 协议,比较容易地“穿透”防火墙,与服务器建立连接。这里的伪装指的是WebSocket利用HTTP的协议升级机制来建立TCP连接,这样就绕过了浏览器沙盒和网络防火墙这些机制。

ws://www.chrono.comws://www.chrono.com:8080/srvwss://www.chrono.com:445/im?user_id=xxx

四、WebSocket的帧结构

WebSocket的侧重点是实时通信,和Http2等侧重于传输效率的协议不同,所以二者的帧也有很大的区别。

  1. WebSocket 虽然有“帧”,但却没有像 HTTP/2 那样定义“流”,也就不存在“多路复用”“优先级”等复杂的特性。
  2. 而它自身就是“全双工”(TCP) 的,也就不需要“服务器推送”。

image.png
数据帧的组成:“结束标志位 + 操作码 + 帧长度 + 掩码”
开头第一个字节

  • 第一位:FIN标志位是消息结束的标志位,相当于 HTTP/2 里的“END_STREAM”,表示数据发送完毕。一个消息可以拆成多个帧,接收方看到“FIN”后,就可以把前面的帧拼起来,组成完整的消息。
  • 第二位到第四位:三个位是保留位,目前没有任何意义,但必须是 0
  • 第五个字节到第八个字节:Opcode操作码,用来标识帧类型。比如1标识帧内容为纯文本,2 表示帧内容是二进制数据,8 是关闭连接,9 和 10 分别是连接保活的 PING 和 PONG。

开头第二个字节

  • 第一位:MASK 掩码标识位,表示帧内容是否使用异或操作(xor)做简单的加密。目前的 WebSocket 标准规定,客户端发送数据必须使用掩码,而服务器发送则必须不使用掩码。
  • 后七位:Payload len 表示帧内容的长度。它是另一种变长编码,最少 7 位,最多是 7+64 位,也就是额外增加 8 个字节,所以一个 WebSocket 帧最大是 2^64。

Payload len字段后的Masking-key

  • 掩码密钥,它是由上面的标志位“MASK”决定的,如果使用掩码就是 4 个字节的随机数,否则就不存在。

五、WebSocket建立连接(握手)的过程

和TCP、TLS一样,WebSocket建立连接也需要先进行握手,然后才能正式收发数据!握手还蹭上了HTTP的便车,利用了Http的协议升级特性来握手,也正是这样才能绕过浏览器沙盒和网络防火墙。

5.1 握手请求阶段

  1. 客户端向服务器发送一个 HTTP GET 请求,并附带 Upgrade 头和 Connection 头,以表明客户端希望升级到 WebSockets 协议。
    1. “Connection: Upgrade”,表示要求协议“升级”;
    2. “Upgrade: websocket”,表示要“升级”成 WebSocket 协议。
  2. 为了防止普通的 HTTP 消息被“意外”识别成 WebSocket,握手消息还增加了两个额外的认证用头字段。
    1. Sec-WebSocket-Key:一个 Base64 编码的 16 字节随机数,作为简单的认证密钥;
    2. Sec-WebSocket-Version:协议的版本号,当前必须是 13。

5.2 握手响应阶段

  1. 确认握手请求没问题后,服务器将生成一个 Sec-WebSocket-Accept 头,该头包含对客户端提供的 Sec-WebSocket-Key 头的加密验证结果,并附带 Upgrade 和 Connection 头。如果浏览器没有接受token,加密验证失败终止握手过程。加密具体的做法是把请求头里“Sec-WebSocket-Key”的值,加上一个专用的 UUID “258EAFA5-E914-47DA-95CA-C5AB0DC85B11”,再计算 SHA-1 摘要 。base64(Sha1(Sec-WebSocket-Key+258EAFA5-E914-47DA-95CA-C5AB0DC85B11))
  2. 服务器将握手响应作为 HTTP 101 状态码和一个 “Switching Protocols” 消息体来返回,标识WebSockets 握手已经成功,服务器与客户端当前正在使用 WebSockets 协议进行通信。
  3. 握手完成后,客户端和服务器之间的连接会保持打开状态,直到其中一个端点发送了一个 CLOSE 帧,或者有网络故障发生,或者超过了连接的时间限制或带宽限制为止。

六、WebSocket应用场景

即时通讯
通过 Websockets 可以实现即时通讯,无需刷新页面。这种应用场景包括在线聊天、多人游戏、实时投票等。
多人协作
对于需要多人协作的应用,Websockets 可以实现实时同步。例如在线文档编辑器、团队协作工具等。
实时数据可视化
Websockets 可以实时更新数据,使得应用可以实现实时数据可视化。这种应用场景包括数据监控、股票交易、实时地图等。
视频和音频流
Websockets 可以传输视频和音频流,使得应用可以实现实时音视频通讯、远程会议、视频直播等。
消息推送和轮询
传统的 HTTP 请求和轮询方式费时费力,而 Websockets 可以实现服务器主动向浏览器推送消息,优化客户端体验。这种应用场景包括新闻订阅、邮件提醒、社交网络消息通知等。
总的来说,Websockets 协议可以为 Web 应用程序提供实时双向通讯的能力,更好的解决了 Web 应用程序实时性的问题,从而实现了更多的创新和应用。

七、WebSocket和SSE对比

Server-Sent Events 是一种基于HTTP相应流实现服务器推送功能的技术

  • 数据交换方式不同 WebSocket 采用双向通信交换数据,而 SSE 采用服务器向客户端单向推送数据。
  • 协议和性能的区别 WebSocket 使用更复杂的协议,需要更多的处理开销,但它具有更低的延迟和更好的性能,可以支持更复杂的应用场景;SSE 的基于 HTTP 的实现方式相对简单,不需要额外的协议,性能相对 WebSocket 稍逊。
  • 安全性 WebSocket 需要专门的服务器端支持,需要处理跨域问题;而 SSE 不需要支持 WebSocket 的服务器端,可以直接在普通的 HTTP 服务器上实现,同时也可以支持跨域请求。
  • 功能适用性 WebSocket 更适用于双向数据传输的应用场景,如即时聊天、游戏等;而 SSE 更适合单向数据推送的场景,如新闻、股票行情、天气预报等。

来源地址:https://blog.csdn.net/weixin_40979518/article/details/130097526

--结束END--

本文标题: WebSocket协议

本文链接: https://www.lsjlt.com/news/390728.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • WebSocket协议
    文章目录 备注一、什么是WebSocket二、为什么要有WebSocket三、WebSocket特点3.1 全双工3.2 数据传输使用二进制帧3.3 服务地址沿用HTTP格式3.4 默认端口为...
    99+
    2023-09-02
    websocket 服务器 网络
  • WebSocket协议与HTTP协议的差异与联系
    引言:随着互联网的普及,Web应用的需求不断增加,为了实现实时交互和推送功能,新的通信协议WebSocket应运而生。而传统的HTTP协议也在这个过程中逐渐被WebSocket取代。本文将重点探讨WebSocket协议与HTTP协议的差异与...
    99+
    2023-10-21
    Http websocket 差异与联系
  • WebSocket协议与TCP协议的对比与选择
    在网络通信中,TCP协议是一种可靠的传输协议,广泛应用于各种网络通信场景。而WebSocket协议则是一种基于HTTP的应用层协议,它提供了双向通信的能力,使得客户端和服务器之间可以实时地进行数据交互。本文将对WebSocket协议和TCP...
    99+
    2023-10-21
    它提供可靠的数据传输 错误检测和拥塞控制。
  • AndroidMQTT与WebSocket协议详细讲解
    目录MQTTWebSocket总结MQTT MQTT是一个极其轻量级的发布/订阅消息传输协议,对于需要较小代码占用空间或网络带宽非常宝贵的远程连接非常有用 有如下特点: 开放消息协议...
    99+
    2022-11-13
    Android MQTT与WebSocket Android WebSocket协议 Android MQTT协议
  • C#Websocket连接实现wss协议
    目录一、什么是Websocket?二、Websocket、Socket、Http、Mqtt之间的区别?Socket:WebSocket:MQTT:HTTP:三、WS和WSS协议一、什...
    99+
    2024-04-02
  • 如何用Node手写WebSocket协议
    今天小编给大家分享一下如何用Node手写WebSocket协议的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。我们知道,htt...
    99+
    2023-07-05
  • 怎么在HTML5中使用WebSocket协议
    怎么在HTML5中使用WebSocket协议?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。WebSocket介绍传统的http也是一种协议,WebSocket是...
    99+
    2023-06-09
  • WebSocket协议的优势与劣势分析
    WebSocket协议是一种在客户端和服务器之间实现双向通信的协议,它与传统的HTTP协议相比,具有许多优势和劣势。本文将对WebSocket协议的优势与劣势进行分析,并给出一些具体的代码示例。一、WebSocket协议的优势:双向通信:W...
    99+
    2023-10-21
    协议 优势 优势:WebSocket 劣势:WebSocket
  • 手把手带你用Node手写WebSocket协议
    我们知道,http 是一问一答的模式,客户端向服务器发送 http 请求,服务器返回 http 响应。这种模式对资源、数据的加载足够用,但是需要数据推送的场景就不合适了。有同学说,http2 不是有 server push 么?那只是推资源...
    99+
    2023-05-14
    前端 JavaScript Node.js
  • 负载均衡器是否支持WebSocket协议
    是的,许多负载均衡器都支持WebSocket协议。负载均衡器可以在多个后端服务器之间分发WebSocket连接,并确保连接的负载均衡...
    99+
    2024-04-17
    负载均衡
  • C#的Websocket怎么连接实现wss协议
    本篇内容主要讲解“C#的Websocket怎么连接实现wss协议”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#的Websocket怎么连接实现wss协议”吧!一、什么是Websocket?W...
    99+
    2023-06-30
  • 好程序员web前端分享WebSocket协议
         好程序员web前端分享WebSocket协议,WebSocket协议简介WebSocket协议简介WebSocket是html5规范新引入的功能,用于解决浏览器与后台服务器双向通讯的问题,使用WebS...
    99+
    2023-06-03
  • WebSocket协议的限制与可行性分析
    摘要:随着互联网的快速发展,实时性要求越来越高的应用也越来越多。WebSocket协议作为一种全双工通信协议,被广泛应用于实时通信和即时通讯领域。但是,WebSocket协议也存在一些限制,本文将对WebSocket协议的限制进行分析,并探...
    99+
    2023-10-21
    websocket 限制 可行性分析
  • Java应用层协议WebSocket实现消息推送
    目录前言浏览器端服务器端前言   大部分的web开发者,开发的业务都是基于Http协议的:前端请求后端接口,携带参数,后端执行业务代码,再返回结果给前端。作者参与...
    99+
    2023-02-22
    Java WebSocket Java WebSocket消息推送
  • WebSocket协议的跨域问题及解决方案
    随着前端技术的发展,WebSocket协议在实时通信方面扮演着重要的角色。然而,由于跨域安全策略的限制,使用WebSocket协议进行跨域通信可能会遇到一些问题。本文将介绍WebSocket协议的跨域问题,并提供一些解决方案,同时给出具体的...
    99+
    2023-10-21
    解决方案 跨域问题 WebSocket协议
  • WebSocket和HTTP协议的性能比较与选择
    引言:在web应用开发中,无论是实时聊天应用、多人在线游戏还是实时数据传输,网络连接的稳定性和传输效率都是关键要素之一。目前,WebSocket和HTTP是两种常用的网络传输协议,它们在性能和功能上有较大的差异。本文将重点讨论WebSock...
    99+
    2023-10-21
    websocket HTTP协议 关键词: 性能比较与选择
  • HTML5中WebSocket协议的实现原理是什么
    这篇文章将为大家详细讲解有关HTML5中WebSocket协议的实现原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。WebSocket协议的目的是为了工作于现有的网络基础设施。作为这...
    99+
    2023-06-09
  • Node.js WebSocket中的扩展协议(Extension Protocol)是什么?
    Node.js WebSocket中的扩展协议是一种允许客户端和服务器协商额外功能的机制,这些功能可能包括消息压缩、身份验证和加密。扩展协议是通过在WebSocket握手过程中交换扩展名来协商的。 扩展名是一个字符串,由扩展协议的名称和...
    99+
    2024-02-06
    Node.js WebSocket 扩展协议 压缩 身份验证 加密
  • Websocket通信协议在数字孪生中的应用
    目录写在前面数字孪生中的通讯协议Websocket 是什么Websocket 配置基于 Node.js 的 Websocket 服务器搭建基于Vue 的 Websocket 客户端搭...
    99+
    2024-04-02
  • WebSocket协议的安全性与加密传输实现
    随着互联网的发展,网络通信协议逐渐演化,传统的HTTP协议有时无法满足实时通信的需求。而WebSocket协议作为一种新兴的通信协议,具有实时性强、双向通信和低延迟等优势,被广泛应用于在线聊天、实时推送和游戏等领域。然而,由于WebSock...
    99+
    2023-10-21
    安全性 加密传输 WebSocket协议
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作