概述
常用通讯协议简述
- UDP
- 概述
- 优点
- 缺点
- 适用场景
- TCP
- 优点
- 缺点
- 适用场景
- MQTT
- 概述
- 优点
- 缺点
- 适用场景
UDP
概述
UDP是一种高效但不可靠的协议。
- UDP是一种 面向报文、非连接的协议。具体表现为发送数据前无需与服务端建立连接,数据发送完毕后亦无需断开连接(没有连接可断开),如此一来,减少了建立和断开连接时的开销,无需像TCP一样建立连接需要3次握手,断开连接需要4次握手。
- UDP 不存在拥塞机制。即源主机不会因为网络拥塞而降低发送速率。
- 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):
- QoS0,At most once,至多一次
- QoS1,At least once,至少一次
- QoS2,Exactly once,确保只有一次
作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
在MQTT协议中,一个MQTT数据包由固定头(Fixed header)、可变头(Variable header)、消息体(payload)三部分构成:
- 固定头(Fixed header)。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。
- 可变头(Variable header)。存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。
- 消息体(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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复