我是靠谱客的博主 内向皮卡丘,最近开发中收集的这篇文章主要介绍常用通讯协议简述UDPTCPMQTT,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

常用通讯协议简述

  • UDP
    • 概述
    • 优点
    • 缺点
    • 适用场景
  • TCP
    • 优点
    • 缺点
    • 适用场景
  • MQTT
    • 概述
    • 优点
    • 缺点
    • 适用场景

UDP

概述

UDP是一种高效但不可靠的协议。

  1. UDP是一种 面向报文、非连接的协议。具体表现为发送数据前无需与服务端建立连接,数据发送完毕后亦无需断开连接(没有连接可断开),如此一来,减少了建立和断开连接时的开销,无需像TCP一样建立连接需要3次握手,断开连接需要4次握手。
  2. UDP 不存在拥塞机制。即源主机不会因为网络拥塞而降低发送速率。
  3. UDP 不能保证交付。这个特性容易导致丢包、乱序的情况。

优点

  • 高效:UDP在发送数据前无需建立连接,没有TCP的一系列确认机制、重传机制、拥塞机制,故在数据传输效率上更胜一筹。
  • 开销小:UDP首部仅需8个字节,包含源头端16bit、目的端16bit、长度16bit、校验和16bit。
  • 稍安全:UDP没有TCP的各种机制,也就意味着能被利用攻击的机制相较而言少了,但仍无法避免不被攻击。
  • 支持广播、单播、组播

缺点

  • 不可靠:可能出现丢包或乱序等情况。由于UDP本身的非连接特性,决定了它不可能像TCP一样,在网络不佳时会有重连机制和拥塞机制。

适用场景

对实时性要求较高且对网络通讯质量要求不是很高的场景,如音视频聊天、遥控器等,网络情况不好时,发生一些丢帧的情况下不需要重传,影响不是很大。

TCP

TCP是一种面向字节流面向连接的全双工协议。通信双方在进行通信之前,需要经过三次握手,确定双方都具备数据收到的能力。由于TCP是全双工协议,因此在断开连接时,需要经过四次握手。另外TCP还提供了确认应答、超时重传、滑动窗口、流量控制、慢启动、拥塞机制等机制,以确保数据有序、可靠。总体而言,它是一种可靠的协议。

优点

  • 可靠:TCP的确认应答、数据超时重传、检验和、最大消息长度等机制确保了数据传输的可靠性。
  • 有序:TCP协议在发送数据时,会对每一个数据包分配一个序列号,如果发送主机在一个特定时间内没有收到接收主机的确认,则发送主机会重传此数据包。接收主机利用序列号对接收的数据进行确认,以便检测对方发送的数据是否有丢失或者乱序等,接收主机一旦收到已经顺序化的数据,它就将这些数据按正确的顺序重组成数据流并传递到高层进行处理。

缺点

  • 效率低:建立连接需要三次握手,断开连接需要四次握手,且有拥塞、超时重传等机制
  • 开销大:首部开销最少需要20个字节。源端口16bit、目标端口16bit、序列号32bit、回应序号[32bit]、TCP头长度[4bit]、reserved[3bit]、控制代码[6bit]、窗口大小[16bit]、偏移量[16bit]、校验和[16bit]、选项[长度可变,最长可达40字节](可选)

适用场景

网络通讯质量要求较高、传输效率要求相对低,要求数据准确无误传输的场景。比如:金融类、社交App类等。

MQTT

概述

MQTT是一种基于发布/订阅模式的“轻量级”通信协议,也是TCP长连接应用的一种(当然中间可能多一层WebSocket)。为什么既然有了TCP和WebSocket了,还需要有MQTT的存在呢?

这是因为,MQTT有一个很大的优点:可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务,同时根据网络环境不同,可以选择三种消息发布的质量(QoS Level):

  1. QoS0,At most once,至多一次
  2. QoS1,At least once,至少一次
  3. QoS2,Exactly once,确保只有一次

作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
在MQTT协议中,一个MQTT数据包由固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成:

  1. 固定头(Fixed header)。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。
  2. 可变头(Variable header)。存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。
  3. 消息体(Payload)。存在于部分MQTT数据包中,表示客户端收到的具体内容。

总的来说,MQTT是在TCP之上的应用层协议,对物联网应用环境做了非常多的优化,TCP传输层协议,是更通用层的协议。

优点

由于MQTT是基于TCP实现的协议,所以优点跟TCP基本相同。同时,MQTT也是标准的RFC协议,相比于私有协议而言更加标准,优点有

  • 协议非常完善,能够马上用于生产。各端实现同一套协议之后,就能进行通信;私有协议还需要进行大量的验证,看有无缺陷或欠考虑的地方。
  • 协议的标准化带来大量的开源组件,降低开发难度。随着物联网+5G生态越来越好,开源组件越来越多,可以减少重复编码量。
  • 标准协议利于第三方接入。当第三方设备、平台想要对接的时候,拿出一套标准的MQTT协议拍在他们脸上,再也没人有理由要求改接口了。
  • 有很多开源的Broker,接入较方便等。

当然,以上用TCP自己开发协议也能实现,那为什么需要MQTT呢?

其实就是MQTT另外还实现了很多功能,降低了开发复杂度,比如:心跳机制、异步机制、遗嘱消息、订阅发布机制,QoS消息质量等,而且MQTT做了一些优化,比如消息头最小只有两个字节等。所以,可以简单理解为,MQTT其实就是TCP协议的一种封装实现,在TCP的基础上做了一系列优化,并且封装了很多实用的机制,一句话总结:MQTT就是观察者模式的网络放大版。

缺点

同TCP。另外,虽然MQTT封装了很多机制,但还是不够成熟,实现起来较复杂。

适用场景

  • 物联网IoT
  • 即时通讯IM
  • 嵌入式开发设备(不能经常联网或网络环境较差)
  • 推送
  • 车联网平台
  • 其它协议开销较小的场景等

最后

以上就是内向皮卡丘为你收集整理的常用通讯协议简述UDPTCPMQTT的全部内容,希望文章能够帮你解决常用通讯协议简述UDPTCPMQTT所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部