HTTP、WebSocket、STOMP、MQTT 协议

这篇具有很好参考价值的文章主要介绍了HTTP、WebSocket、STOMP、MQTT 协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、计算机网络的层次结构

1、两种模型(TCP/IP四层模型与OSI体系)对应的结构,以及TCP/IP模型各个层级对应的协议

http,mqtt,tcp协议,http,websocket,网络,网络协议

1、TCP/IP协议

  • TCP/IP 是用于因特网 (Internet) 的通信协议,是对计算机必须遵守的规则的描述,只有遵守这些规则,计算机之间才能进行通信。
  • TCP/IP是基于TCP和IP这两个最初的协议之上的不同的通信协议的大集合,是一个协议族。

1-1、TCP(传输控制协议,Transmission Control Protocol)

  • 在计算机网络中属于传输层,是TCP/IP协议栈中最核心的协议之一
  • 面向连接:一种可靠的传输服务,使用前必须先建立连接,传输完成后释放
  • 点对点:每一条tcp协议只能是一对一的,TCP 连接的端点叫做套接字,套接字 socket = (IP 地址:端口号),每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定。(注意:该socket和经常说的socket编程中的socket不是一个东西,后者的全称应该是Socket API
  • 全双工通信:允许通信双方的应用进程在任何时候都能发送数据
  • 流模式:数据被作为无结构的字节流
  • 有序的:为每个由其传输的字段指定顺序号,对于发送的每一个分段,接收主机必须在一个指定的时间内返回一个确认信息,发送者未收到确认,数据会被重新发送

1-2、IP协议(互联网协议,Internet Protocol)

  • 在计算机网络中属于网际层(网络层/网络互连层),是TCP/IP协议栈中最核心的协议之一
  • 无连接的协议:主要通过IP地址,保证了联网设备的唯一性
  • 不可靠的数据传输:不能保证数据包一定能到达对方,数据是否会被丢弃以及丢弃之后如何处理

二、HTTP协议(超文本传输协议,HyperText Transfer Protocol)

  • 基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则。
  • 无状态协议:HTTP协议本身不会对发送过的请求和相应的通信状态进行持久化处理,由于HTTP是无状态协议,通常在网页上引入cookie之类技术来记录状态
  • 无连接协议:基于请求-响应的模式,每次连接只处理一个请求,即一个Request和一个Response对应了整个连接,响应后断开连接。(在后续的版本中添加了Connection: Keep-Alive实现长连接)
  • 任意类型的数据对象:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记
  • 半双工通信:允许数据在两个方向上传输,但是在某一时刻,只允许数据在一个方向上传输

HTTP工作原理

1、客户端连接到服务器

一个HTTP客户端与服务器建立一个TCP套接字连接

2、发送HTTP请求

通过TCP套接字,向服务器发送一个文本的请求报文(请求行、请求头、请求数据、空行)

3、服务器接受请求并返回HTTP响应

服务器解析请求,将资源写到TCP套接字,由客户端读取响应内容(状态行、响应头部、空行、响应数据)

4、释放连接TCP连接

若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection模式为keepalive,则该连接会保持段时间,在该时间内可以继续接收请求

5、客户端解析响应数据

通过状态行、响应头等相关内容进行资源解析

三、WebSocket协议

要使用HTTP实现双向通讯,传统的方式即进行轮询已达到效果(即每隔一段时间,想服务器发出请求获取最新的数据),常见的轮询方式分为轮询(定时请求)和长轮询(请求后服务器在有数据变化时才响应,客户端在请求快过期前或请求响应后,再次发起请求)。

这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而 HTTP 请求与响应可能会包含较长的头部,其中真正有效的数据可能只是很小的一部分,所以这样会消耗很多带宽资源。

HTML5定义了 WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

  • 基于TCP协议的应用层传输协议
  • 持久连接:连接创建后,客户端和服务端的数据传输不用新建连接。
  • 全双工通信:客户端和服务端可以双向通信
  • 较少的开销:数据交换时,数据包头较小

1、WebSocket连接的建立

当客户端想要使用 WebSocket 协议与服务端进行通信时, 首先需要确定服务端是否支持 WebSocket 协议, 因此 WebSocket 协议的第一步是进行握手, WebSocket 握手采用 HTTP Upgrade 机制, 客户端可以发送如下所示的结构发起握手 (请注意 WebSocket 握手只允许使用 HTTP GET 方法):

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

在 HTTP Header 中设置 Upgrade 字段, 其字段值为 websocket, 并在 Connection 字段指示 Upgrade, 服务端若支持 WebSocket 协议, 并同意握手:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13

客户端校验返回内容,握手成功则将通信协议升级到WebSocket,至此就可以使用WebSocket协议进行客户端-服务端数据交换。

2、WebSocket端口:

WebSockets使用HTTP Upgrade机制升级到Web Socket协议,因此HTTP服务器可以与WebSocket服务器共享默认的HTTP与HTTPS端。默认情况下:WebSocket 协议使用 80 端口、若运行在 TLS 之上时,默认使用 443 端口

3、WebSocket与Socket的关系

  • WebSocket 和 Socket 并无关系
  • 套接字(socket)在TCP/IP之上,位于传输层和应用层之间的一个抽象层,并不是一个协议,传输层的低一层协议服务socket,socket服务应用层。socket其实就是是一组API,提供了对TCP/IP的相关操作

4、WebSocket与HTTP的关系

  • 都属于应用层协议,基于TCP/IP协议,是可靠的传输协议
  • WebSocket支持持久连接,HTTP不支持持久连接(HTTP使用Connection: Keep-Alive也可实现长连接,但HTTP的生命周期还是属于一个Request对应一个Response)
  • WebSocket是双向通信协议,HTTP是单向协议
  • WebSocket协议在第一次握手连接时,通过HTTP协议
  • HTTP服务器可以与WebSocket服务器共享默认的HTTP与HTTPS端(80和443)

四、STOMP协议(简单(流)文本定向消息协议,Simple (or Streaming) Text Orientated Messaging Protocol)

WebSocket协议只会将字节流转换为文本/二进制消息,使用时需要定义应用间所发送消息的语义,还需要确保Client和Server都能遵循这些语义。比如:在消息中有一个type,当type为subscribe时,表示订阅消息,当type为message时表示发送了一条消息。在使用WebSocket的时候,我们不同的地方使用都要做类似的工作:“设计message”,也就是常说的“WebSocket的通信形式层级过低”

  • STOMP是一种为MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议,提供了一个可互操作的连接格式,用于client之间进行异步消息传输的简单文本协议
  • STOMP协议并不是为websocket设计的, 它是属于消息队列的一种协议,STOMP协议可以建立在WebSocket之上,也可以建立在其他应用层协议之上(一般也就是WebSocket了)
  • STOMP 提供了一个基于帧的线路格式(借鉴了HTTP),使用不同的帧,表示不同的含义
    http,mqtt,tcp协议,http,websocket,网络,网络协议

http,mqtt,tcp协议,http,websocket,网络,网络协议文章来源地址https://www.toymoban.com/news/detail-852534.html

五、MQTT协议(消息队列遥测传输协议,Message Queuing Telemetry Transport)

  • 基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,属于应用层协议
  • 消息不是直接从发送器发送到接收器,是由MQTT server(或称为 MQTT Broker)分发。(区别于WebSocket的点对点)
  • 可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务,常用于物联网(IoT)应用中的设备间通信
  • MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。发布者和消费者之间并不关心对方,都只和代理(Broker)(服务器)打交道
  • 提供心跳机制、遗嘱消息、QoS 质量等级+离线消息、主题和安全管理等多种特性

六、MQTT与WebSocket

1、相同点

  • MQTT 和 WebSocket 都是应用层协议
  • 都是使用 TCP 协议确保可靠传输数据
  • 都支持双向通信
  • 都使用二进制传输

2、通信模型

  • WebSocket 是一种简单的报文协议,仅仅定义了会话的发起方式和报文格式及类型。如何使用报文通信全由应用程序控制
  • MQTT 是一种比较复杂的消息协议,规定了客户端和服务器的通信模型,是一种面向主题(topic)的消息广播协议,基于发布/订阅模式
  • MQTT 是一套比较复杂的消息投递协议,而 WebSocket则只是在TCP协议之上实现了简单的报文通信。两种协议工作层次不一样,也就是常说的“WebSocket的通信形式层级过低”

3、连接建立方式

  • WebSocket 基于 HTTP/1.1 的 Upgrade 机制协商会话,协商完成后协议由HTTP升级到WebSocket,完成双工信道的建立
  • MQTT 协议则需要通过 CONNECT 报文协商会话,TCP连接建立之后,客户端会主动发送 CONNECT 报文。服务端准备好之后会回应 CONNACK 报文,完成双工信道的建立

4、消息收发方式

  • WebSocket 收发消息不需要对方确认
  • MQTT 收发消息需要根据投递级别(QoS)进行确认:QoS 0(最多一次)、QoS 1(最少一次)、QoS 2(恰好一次)

5、保活机制

  • WebSocket 只规定了 ping/pong 两种报文,用于心跳探测,但协议并不强制要求定时收发心跳包
  • MQTT 则有明确的心跳协商机制。协商会话使用的 CONNECT 报文包含 Keep Alive 头部信息,使用两个字节传输心跳间隔,单位是秒。会话协商后需要定时收发 PINGREQ 和 PINGRESP 报文。

6、使用场景

  • MQTT是为了物联网场景设计的基于TCP的Pub/Sub协议,有许多为物联网优化的特性,比如适应不同网络的QoS、层级主题、遗言等等
  • WebSocket是为了HTML5应用方便与服务器双向通讯而设计的协议,HTTP握手然后转TCP协议,用于取代之前的Server Push、Comet、长轮询等老旧实现

到了这里,关于HTTP、WebSocket、STOMP、MQTT 协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Websocket协议-http协议-tcp协议区别和相同点

    通讯形式 单工通讯-数据只能单向传送一方来发送数据,另一方来接收数据 半双工通讯-数据能双向传送但不能同时双向传送 全双工通讯-数据能够同时双向传送和接受 注:http的通讯方式是分版本 http1.0 :单工。因为是短连接,客户端发起请求之后,服务端处理完请求并收到

    2024年02月15日
    浏览(38)
  • API 接口主流协议有哪些?如何创建 HTTP/HTTP、WebSocket/WebSockets、TCP/UDP、gRPC、SOAP、Dubbo/HSF 等不同协议?

    API 接口协议繁多,不同的协议有着不同的使用场景。70% 互联网应用开发者日常仅会接触到最通用的 HTTP 协议,相信大家希望了解更多其他协议的信息。我们今天会给大家介绍各种 API 接口主流协议和他们之间的关系。 接口协议分成两类: 传输层协议和应用层协议。 传输层协

    2023年04月21日
    浏览(81)
  • 前端面试:【网络协议与性能优化】HTTP/HTTPS、TCP/IP和WebSocket

    嗨,亲爱的Web开发者!在构建现代Web应用时,了解网络协议是优化性能和确保安全性的关键。本文将深入探讨HTTP/HTTPS、TCP/IP和WebSocket这三个网络协议,帮助你理解它们的作用以及如何优化Web应用的性能。 1. HTTP/HTTPS协议: HTTP(超文本传输协议): HTTP是用于在Web上传输数据的

    2024年02月11日
    浏览(38)
  • mqtt、tcp、http的区别

    MQTT、TCP和HTTP都是不同的通信协议,它们在设计和用途上有很大的区别。下面是它们之间的主要区别: MQTT是一种消息传输协议,专门设计用于在低带宽、不稳定的网络环境中进行高效的通信。它采用发布/订阅模式,适用于物联网和M2M通信,以及需要轻量级消息传输的场景。

    2024年02月14日
    浏览(31)
  • HTTP协议和MQTT协议对比谁更好

    HTTP协议是Web联网的基础,也是应用最为广泛和流行的协议,HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。 MQTT是一种基于发布/订阅模式的“轻量级”通讯协议,该协

    2023年04月12日
    浏览(23)
  • Qt/C++编写物联网组件/支持modbus/rtu/tcp/udp/websocket/mqtt/多线程采集

    支持多种协议,包括Modbus_Rtu_Com/Modbus_Rtu_Tcp/Modbus_Rtu_Udp/Modbus_Rtu_Web/Modbus_Tcp/Modbus_Udp/Modbus_Web等,其中web指websocket。 支持多种采集通讯方式,包括串口和网络等,可自由拓展其他方式。 自定义采集间隔(精确到毫秒)和超时次数,超时后自动将离线的文件从轮询队列中移除,加

    2024年02月08日
    浏览(40)
  • WebSocket和HTTP协议有什么区别?&& 连环问:WebSocket和HTTP长轮询的区别?

    什么是WebSocket? 答:WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信,位于OSI模型的应用层。 特点: 1. TCP连接,与HTTP协议兼容 2. 双向通信,主动推送(服务端向客户端) 3. 无同源限制,协议标识符是ws(加密wss) WebSocket: 1. 支持端对端通讯 2. 可以由client发起

    2024年02月11日
    浏览(30)
  • 整合 WebSocket 基于 STOMP 协议实现广播

    SpringBoot 实战 (十六) | 整合 WebSocket 基于 STOMP 协议实现广播 如题,今天介绍的是 SpringBoot 整合 WebSocket 实现广播消息。 什么是 WebSocket ? WebSocket 为浏览器和服务器提供了双工异步通信的功能,即浏览器可以向服务器发送信息,反之也成立。 WebSocket 是通过一个 socket 来实现双

    2024年01月21日
    浏览(37)
  • 为什么有了HTTP,还需要WebSocket协议?

    目录 WebSocket是什么? WebSocket怎样建立连接? WebSocket的实际用途 WebSocket 与 HTTP 的选择 HTTP 是基于 TCP协议 的,同一时间里,客户端和服务器只能有一方主动发数据,是 半双工通信 。 通常,打开某个网页,我们每点击一次网页上的某个选项,前端就会发送一次HTTP请求,网站

    2024年02月11日
    浏览(34)
  • 【Linux网络】TCP UDP socket HTTP webSocket之间的区别

    目录 一、OSI TCP/IP模型 二、几者之间的关系 三、HTTP 四、Socket 五、WebSocket 5.1、WebSocket 优点 首先我们要了解OSI七层模型,和预支对应的TCP/IP 四层的模型。     用下面的图可以看出,TCP  UDP 工作在传输层,而 HTTP  WebSocket 工作在应用层,但socket不属于七层模型中的任何一层,

    2024年02月11日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包