MQTT over QUIC:下一代物联网标准协议为消息传输场景注入新动力

      最后更新:2022-07-30 01:36:49 手机定位技术交流文章

      首次引入QuiC到MQTT的创新产品

      不久前,开源的大规模分布式物联网 MQTT 消息服务器 EMQX 发布了 5.0版本 。EMQX 5.0不仅是世界上第一个分布式MQTT消息服务器,它实现了支持100万连接的单一组件,QUIC 的 支持 也 采用 了 创新 的 方式 。

      QUIC是下层传输协议的下一代HTTP/3协议,它与TCP/TLS协议相比,为现代移动互联网提供了高效、灵活的传输层,同时降低了连接成本和消息延迟。

      基于 QUIC 这些极适用于物联网消息传输场景的优势,EMQX 5.0 引入 QUIC 支持(MQTT over QUIC)并设计了独特的消息传输机制和管理方式。

      本文将通过对 MQTT over QUIC 的详细解析,为了展示该领先技术对物体互联网的优点和价值,帮助人们更有效地使用EMQX5。 QUIC的支援能力,在各类 MQTT 应用场景中进行更加高效、低成本的物联网数据传输。

      什么是 QUIC

      QUIC 是一种建立在 UDP 之上通用的传输层网络协议,最初由 Google 提出,作为 TCP+TLS 的替代方案,旨在改善用户体验。

      与现有的TLS+TCP方案相比,QUIC有许多优点:

      • 快速建立低延迟连接(1RTT或0RTT)
      • 端到端加密,通过TLS握手1.验证
      • 避免团队阻塞的多个路线重复使用
      • 改善交通堵塞控制,插件交通堵塞控制策略
      • 多路径支持,连接流畅的迁移
      • 无状态负载均衡
      • 既存的网络可以在没有升级的情况下支持

      由于高性能的传输效率和多路径连贯性,QUIC已成为下一代HTTP/3网络协议的基础传输协议。

      HTTP/3的简介

      2018年10月,IETF HTTP和 QUIC工作组联合决定在 QUIC上调用HTTP映射 HTTP/3 ,提前制定一个全球标准。2022年6月6日,IETF将HTTP/3标准化为 RFC 9114 。

      HTTP/3的目的是解决HTTP/2的传输问题,提供快速、可靠和安全的网络连接,适用于各种设备.HTTP/3使用类似HTTP/2的语义。包括相同的请求方法、状态代码和消息字段,两者根本区别在于,HTTP/2底层使用TCP/TLS协议,HTTP/3使用QuiC协议。

      根据 W3Techs统计 ,至少40%的互联网流量是基于QuiC的,过去10百万网站中有25%已经支持HTTP/3,包括谷歌,Youtube,Facebook是一个最畅销的网站。

      QUIC在MQTT通信场景中的应用前景

      MQTT 是基于 TCP 的物联网通信协议,紧凑的报文结构能够在严重受限的硬件设备和低带宽、高延迟的网络上实现稳定传输;心跳机制、遗嘱消息、QoS 质量等级等诸多特性能够应对各种物联网场景。

      然而,由于基本的TCP传输协议的局限性,MQTT协议在某些复杂网络环境中具有内在的缺点:

      • 网络切换导致频繁的连接中断
      • 网络断裂后重新建立连接是困难的:操作系统在网络断裂后放出资源,应用程序层无法及时检测断裂状态,再连接时服务器/客户端成本更高
      • 在弱势网络环境下的数据传输仅限于拥塞、损耗检测和再传输机制

      例如,网络用户经常面临类似的问题:车辆可能在山区、矿山、隧道等地区运行。当输入信号死角或被动切换基站时,会引起连接故障,频繁的连接中断和较慢的连接恢复速度可能导致用户体验的变化。在某些需要较高的实时和数据传输稳定性的操作中,例如,在L4级的无人驾驶车辆中,顾客需要花很多钱来缓解问题.

      在上述这类场景中,QUIC的低连接成本和多路径支持特性显示其优点。经过更深入的探索,我们认为MQTT Over QUIC能够很好地解决这个问题,基于 QUIC 0 RTT/1 RTT的重新连接/更新能力,它能有效地提高弱网络和不安全的网络走廊的用户体验。

      EMQX 5.0 MQTT在QuiC实现上

      EMQX的当前实现将传输层转换为 QUIC Stream,客户端启动连接并创建一个Stream,EMQX和客户端在双向Stream上相互作用。

      鉴于复杂的网络环境,如果客户由于某种原因无法与QuiC握手,则建议客户自动返回传统的TCP,从而阻止系统与服务器建立通信。

      在这里插入图片描述

      当前的EMQX5.在0中实现了下列特点:

      • 更高级的拥塞控制:有效降低数据丢包率,在测试中在网络波动的情况下仍能持续稳定传输数据
      • 操作友好性:降低大规模重连接的成本(时间成本、客户端/服务器性能成本),减少因应用程序层状态迁移而引起的系统过载 (0 RTT)
      • 更灵活的架构创新:比如 Direct server return (DSR,服务器直接返回模式),只有入口/请求流量经过 LB,出口和响应流量绕过 LB 直接回到客户端,减少 LB 的瓶颈
      • 减少握手延迟(1RTT)
      • 多路径支持,连接流畅的迁移:从 4G 切换到 WIFI, 或者因为 NAT Rebinding 导致五元组发生变化,QUIC 依然可以在新的五元组上继续进行连接状态,尤其适用于网络经常性变化的移动设备
      • 敏捷开发部署:在用户空间中实现协议堆栈以开发快速迭代
      • 端到端加密:未加密的包包含很少的信息,减少传输路径中节点的影响,提供更好的安全性和更控制的用户体验

      同时, 仍 需要 探讨 下列 额外 的 能力 :

      • 不同主题的流:对于独立主题,每个主题可以有独立的 Streams 以消除其他主题长阻塞带来的影响,比如接收端长阻塞或流量控制,亦可以实现优先级主题功能。
      • 不同的QoS流量: 例如,在“流量控制”中, QoS 0 传输应该允许高 QoS 传输。
      • 将控制消息分成不同的流: MQTT控制消息可以发送单向或双向。 如果客户端可以通过“控制流”异步发送UNSUBSCRIBE请求,要求服务器停止发送不再感兴趣的数据。
      • 微粒接收器和接收器同步流量控制:微粒接收器和接收器的流量控制在每个流量前进行,整个连接的流量控制在各个流量前进行。

      QUIC vs TCP/TLS测试比较

      我们在一个实验室环境中,基于EMQX5.Version0模拟了不同场景的QuiC和TCP/TLS性能性能。

      测试环境

      • 测试平台:EMQX 5.0单节点
      • 服务器规范: AWS EC2 M4.2xlarge (8 cores 32GB)
      • 操作系统:Ubuntu 20.04
      • 客户端数:5000
      • loadgen平行数:8
      • 延迟值:P95

      客户端连接时延

      测试在不同网络时延下握手、建立连接、完成订阅的时延。相较于 TLS,在网络时延较高时 QUIC 有一定的优势。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

      0RTT重新连接延迟

      测试断开连接后,重新启动连接并恢复重新连接所需的延迟。

      由于 QUIC 在 0 RTT 场景下可以在第一个包上带上应用层的数据包, 应用层相较于 TCP 一个来回握手响应更快。

      QUIC协议支持0个RTT握手,当客户端和服务端完成初始握手时,服务端可以向客户端发送NTT包。当连接被切断后,客户端可以使用NTT快速重建连接,通过1RTT的几个步骤跳过。

      0 RTT的优点是,它有效地降低了客户和服务端握手成本,并改善了性能(握手延迟),而EMQX默认向客户发送NTT包,有效期为2小时。

      0 RTT也支持早期数据,与1RTT相比,应用层只能在手完成后传输。0 RTT 的 early data 可以在第一个包上带上应用层数据,用于快速恢复或重新启动应用程序层操作。但由于 0 RTT 的 early data 不能防范重放攻击,因此,QuiC建议不要携带0 RTT的数据,这将改变申请状态。

      EMQX默认不支持早期数据,此测试仅用于比较验证。

      测试结果表明,如果MQTT层协议设计正确,QIC在第一次握手后比纯TCP性能更好。

      在这里插入图片描述
      在这里插入图片描述

      使用连接/重新连接时间服务器资源

      在重新连接新连接和故障线的各个过程中,测试处理器和服务器的内存的占用,以对比 TLS,当握手时,切开1RTT和0RTT的资源开支.测试结果表明, QUIC CPU和内存使用比TLS更好,但重新连接比TLS更昂贵。

      在这里插入图片描述

      注1:主要用于清算MQTT对话,取消旧连接的额外费用

      注2:大量 QUIC初始化手提包主要来自传输路径的MTU认证

      在这里插入图片描述

      客户端地址迁移

      该测试模拟了大规模客户地址迁移时业务层消息传输的变化。

      传统的TCP/TLS客户端必须在应用程序层重新连接,以检测故障线,此过程响应非常慢并伴有许多不必要的重传。QUIC处理更加顺利,传输层确保连接不会重新连接,并且应用程序层不受影响(如果应用程序层需要这样做,它也可以加入地址的更改)。

      QUIC在客户源IP地址/港口更改时,发送的邮件没有效果。当更改后发送消息时,TLS连接被中断,即使客户可以通过重新连接机制重新连接到EMQX,但中间时间窗口无法执行任何操作。

      这个结果表明, QUIC非常适合在经常需要网络交换的环境中使用。

      在这里插入图片描述

      网络丢包测试

      测试在弱网条件下数据传输情况。我们分别做了 3 次测试:EMQX terminated TCP/TLS,QUIC 以及 nginx terminated TCP/TLS。

      测试场景:EMQX在20K/s时发布 QoS 1 消息,在该过程中注入网络错误:20%的混乱(发送和接收数据包的顺序不一致),10% 丢包,QUIC测试也增加了额外的网络交换干扰每30秒。

      在此情况下 QUIC 服务端接收的数据稍微有所抖动,但不丢失消息;而 TLS 出现因网络环境差而导致的拥塞、丢包。此项结果表明 QUIC 在弱网环境下可以提供可靠的传输。

      在这里插入图片描述
      在这里插入图片描述

      在黄色的圆形标记中,我们消除了网络误差,我们可以看到TLS接收器返回正常接收器,数据包始终没有堆叠,而QuiC则从轻微的抖动中变得更加平滑。

      更方便的使用:MQTT在QuiC SDK上

      NanoSDK 0.6.0 基于 MsQuic 项目率先实现了第一个 C 语言的 MQTT over QUIC SDK。

      NanoSDK增加了 QUIC支持的NNG传输层,允许MQTT、nanomsg和其他协议从TCP转换为UDP,从而提供更好的事物网络连接体验。它将QUIC Stream和MQTT连接映射结合到内部,此外, 还实现了内置0RTT快速握手重新连接功能.

      有关消息示例代码,请参阅纳米斯DK QUIC 示例。

      我们近期也将基于 NanoSDK 进行封装并陆续推出 Python、Go 等语言的 SDK,方便更多用户尽快体验到 MQTT over QUIC 的优势能力。

      同时,相关的 SDK 将支持 QUIC fallback,当 QUIC 不可用时,连接层将自动切换为 TCP/TLS 1.2,确保各类网络环境下业务都能正常运行。

      在这里插入图片描述

      EMQX QUIC的未来

      在这里插入图片描述

      结合 QUIC特性和事物网络场景,我们为QuiC的MQTT设计了许多功能,如果主题优先设置通过分离控制通道实现,实现不可靠的实时流量传输,以应对高频数据传输场景;并且灵活的主题和数据通道(流)映射减少主题之间的干涉。以后的版本会随之而来。

      EMQ 也 积极 促进 了 MQTT 与 QUIC 之间 的 标准化 。继 2018 年成为 OASIS MQTT 技术委员会中目前为止唯一拥有投票权的中国公司并参与 5.0 协议标准制定后,EMQ 还 提交 了 QUIC 上 MQTT 的 草案 。相信在不久的将来,MQTT的基本协议同时支持TCP和QuiC,让整个物体互联网行业从中获利.

      结语

      可以看到,QUIC非常适合传统的TCP/IP网络 UDP MTU大小可以保证弱的网络环境或频繁的网络交换环境。对于任何设备在任何时候运动的IoT场景(例如汽车网络、移动收购等),或者在频繁切断不适合长期连接的场景(例如设备需要定期休息期间),QUIC具有巨大的潜力,是一个更适合上下协议选项,这也是EMQX 5.0引入QuiC支持的原因。

      MQTT over QUIC 在 EMQX 5.0 中的率先实现,让EMQ再次成为世界万物网新闻服务器的先锋。EMQ将始终坚持以持续技术创新为动力的不断升级产品,期望通过领先产品,为IoT领域带来基础设施安全和商业创新动力。

      本系列中的其它文章

      • EMQX 5.0 产品解读 01 | Mria + RLOG 新架构下的 EMQX 5.0 如何实现 1 亿 MQTT 连接

      版权声明: 本条是原版EMQ, 请注意复制的来源.

      原文链接: https://www.emqx.com/zh/blog/mqtt-over-quic

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/30860.html

          热门文章

          文章分类