HTTP、WebSocket、MQTT、TCP的区别和联系

news/2024/12/1 20:28:41/

3个应用层协议

HTTP、WebSocket、MQTT都是应用层协议。

  • HTTP(HyperText Transfer Protocol)主要用于在Web浏览器和Web服务器之间传输数据,例如显示Web页面、文件下载、上传等操作,属于请求-响应协议。
  • WebSocket也是应用于浏览器和Web服务器之间进行双向通信,提供了实时交互的能力。
  • MQTT(Message Queuing Telemetry Transport)是一种轻量级的、基于发布-订阅模式的消息传输协议。MQTT协议主要用于物联网设备之间的通信,具有低带宽、低能耗、可靠性高、支持异步通信等特点。

我们使用HTTP和WebSocket协议在Web应用程序中进行数据交互,使用MQTT在物联网设备之间进行数据传输。

1个传输层协议

TCP(Transmission Control Protocol)是一种传输层协议,提供可靠的、面向连接的数据传输服务。TCP协议主要用于保证数据的可靠传输,采用三次握手协议建立连接,通过确认和重传机制保证数据的可靠性。 

WebSocket和HTTP协议的关系

WebSocket协议在HTTP协议之上建立,通过HTTP的Upgrade头部将HTTP协议升级为WebSocket协议。在建立WebSocket连接之前,客户端和服务器之间必须先建立HTTP连接。因此,WebSocket可以看作是一种在HTTP连接之上的新协议,它在原有的HTTP基础上增加了双向实时通信的功能,不需要每次请求都建立连接,可以保持持久连接。

HTTP协议本身是一种请求-响应协议,客户端通过发送请求,服务器接收请求并返回响应。在这个过程中,服务器不能主动向客户端发送消息,只有在接收到客户端请求后才能返回响应。这种单向通信的限制使得HTTP协议不能实现实时双向通信的功能,对于需要实时交互的应用来说,HTTP协议的性能和效率都比较低。

WebSocket协议的出现解决了这个问题。WebSocket协议建立一个持久性的TCP连接,使得客户端和服务器之间可以实时双向通信。当客户端和服务器之间建立了WebSocket连接后,客户端可以随时向服务器发送消息,服务器也可以主动向客户端发送消息,而不必等待客户端的请求。

因此,WebSocket和HTTP协议有着紧密的关系,WebSocket协议建立在HTTP协议之上,并且在使用WebSocket协议之前,需要先建立HTTP连接。这时,HTTP协议起到了类似TCP中握手的作用:

  1. 客户端向服务器发送HTTP请求,请求头部包含Upgrade和Connection字段,表示客户端请求升级到WebSocket协议。
  2. 服务器收到请求后,根据请求头部中的Upgrade字段,判断是否支持升级到WebSocket协议。
  3. 如果服务器支持升级到WebSocket协议,则返回HTTP响应,响应头部包含Upgrade和Connection字段,表示服务器同意升级到WebSocket协议。
  4. 客户端收到服务器的响应后,根据响应头部中的Upgrade和Connection字段,确认服务器同意升级到WebSocket协议,并开始使用WebSocket协议进行通信。

由于WebSocket协议建立在HTTP协议之上,因此WebSocket协议也继承了HTTP协议的一些特性,例如可以使用HTTP的身份认证和安全机制等。


http://www.ppmy.cn/news/48659.html

相关文章

Mysql列的类型定义(日期和时间类型)

文章目录 前言一、类型表二、类型简介总结 前言 日期与时间类型是为了方便在数据库中存储日期和时间而设计的,数据库有多种表示日期和时间的数据类型。其中,YEAR类型表示年,DATE类型表示日期,TIME类型表示时间,DATETIM…

《数据采集与分析》课程期中测试重要知识点复习

《数据采集与分析》课程期中测试重要知识点复习 文章目录 《数据采集与分析》课程期中测试重要知识点复习① Numpy部分应掌握的重要知识点一、Numpy数组的创建1、基于一维/二维列表创建2、基于可以产生有规律数据的函数创建一维数组3、基于特殊函数创建二维数组4、基于随机数创…

【镜像取证篇】DD和E01镜像格式区别(简)

【镜像取证篇】DD和E01镜像格式区别(简) ​ 简单总结下—【蘇小沐】 文章目录 【镜像取证篇】DD和E01镜像格式区别(简)1、实验环境 (一)DD镜像-原始镜像(和源盘大小一致)&#xff0…

【微信小程序】数据监听器,纯数据字段

一、数据监听器 1.1 什么是数据监听器 数据监听器用于 监听和响应任何属性和数据字段的变化,从而执行特定的操作 。它的作用类似于 vue 中 的 watch 侦听器。在小程序组件中, 在componets中新建一个test2文件夹在文件夹里新建component 在app.json …

【Linux 裸机篇(四)】I.MX6ULL C语言 LED 驱动

文章目录 一、汇编搭建 C 语言环境二、C 语言编写三、编写 Makefile四、链接脚本 一、汇编搭建 C 语言环境 实际工作中是很少用到汇编去写嵌入式驱动的,大部分情况下都是使用 C 语言去编写的。只是在开始部分用汇编来初始化一下 C 语言环境,比如初始化 D…

C++类的模拟实现

📟作者主页:慢热的陕西人 🌴专栏链接:C 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 本博客主要内容讲解了简单模拟实现string类 C类的模拟实现 文章目录 C类的…

搞定常见八大排序

文章目录 注意事项插入排序插入排序希尔排序 分组预排序选择排序堆排序直接选择排序(最拉胯的排序) 交换排序冒泡排序快速排序1. hoare版本如何解决快排缺陷?2.挖坑法版本3.双指针法版本(建议)快排算法优化实现非递归快排 归并排序归并排序 非…

基于Java+Springboot+Vue+elememt宠物用品商城系统设计实现

博主介绍:5年java开发经验,专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目录 一、前言介绍:二、系统设计&#…