合作机构:阿里云 / 腾讯云 / 亚马逊云 / DreamHost / NameSilo / INWX / GODADDY / 百度统计
TCP协议诞生于1974年冷战期间。 MQTT诞生于1999年互联网初期,TCP协议比MQTT协议诞生早了25年。 Ashton提出IoT概念也是在1999年,因此MQTT协议生逢其时。当时MIT Auto-ID Labs的Kevin Ashton为了把宝洁的供应链上的RFID标签和互联网连接起来,在1999年第一个提出了IoT这个概念。
TCP协议和MQTT协议的设计都与卫星通信有着直接的联系。 1972年时,Kahn在IPTO公司参与了一个卫星通信网络项目,他就搞了个子项目来搭建卫星基站的无线电数据包通信网络。 有了这个项目的经验,他发现有必要开发一个通用的开放架构的网络模型,从而让不同软硬件的网络都可以互相通信。
在1973年Vinton Cerf也参与了这个项目,他们俩于同年实现了TCP的第一个版本。1974年的时候,TCP协议规范正式发布,编号为RFC 675。 在20世纪90年代中期IBM在帮助石油和天然气公司客户设计有效的数据传输协议时,就出现了对MQTT这种物联网环境下的数据传输协议的需求。
当时,为了实现数千英里长的石油和天然气管道的无人值守监控,采取的设计方案是将管道上的传感器数据通过卫星通信传输到监控中心。
这种应用场景有如下几个特点:
因此,针对石油管道传感器和控制装置数据采集和控制设计的传输协议,需要满足如下要求:
TCP是OSI第四层的传输层协议。 MQTT是基于TCP的七层应用层协议。
TCP设计考虑的是面向连接的、可靠的、基于字节流的传输层通信协议。 MQTT则是在低带宽高延迟不可靠的网络下进行数据相对可靠传输的应用层协议。
TCP的核心思想是分组交换。 MQTT的核心思想是简单并适应物联网环境。
TCP的传输单位是packet,当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。 MQTT的传输单位是消息,每条消息字节上限在MQTT Broker代理服务器上进行设置,可以设置超过1M大小的消息上限。
TCP需要解决的问题是在IP包传输过程中,处理异构网络环境下的网络拥塞、丢包、乱序、重复包等多种问题。 MQTT解决的问题是,在低带宽高延迟不可靠的网络下和资源有限的硬件环境内,进行相对可靠的数据传输。
TCP是一个可靠的流传输服务,通过ACK确认和重传机制,能够保证发送的所有字节在接收时是完全一样的,并且字节顺序也是正确的。 MQTT提供三种可选的消息发布的QoS服务等级。MQTT客户端和MQTT代理服务器通过session机制保证消息的传输可靠性。开发人员可以根据业务需要选择其中一种。
TOP