目录
TCP/IP 协议
互联网协议体系结构的另一个方面是 TCP / IP 堆栈。它控制两台计算机之间的数据传输。其中采用三次握手建立一个连接,其中涉及客户端确认数据的接收且发送确认消息给服务器。第二次握手是服务器端接收到客户端的数据后,返回确认回单,第三次是客户端也返回一个确认回单给服务器端,从而关闭通信通道。
这种通信方法的优点具有可靠性,可共享所有被发送的数据,但因为其过程都需要验证,所以消耗时间比较久。
UDP 协议
用户数据报协议(User Datagram Protocol,简称UDP)是一种比较快的通信方式,因为减少了确认程序。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。因此,与 TCP/IP 相比,UDP 的可靠性相对不高,但是比较快。对于M2M 项目的快速原型,一个非常简单的解决方案是使用 UDP,因为就 UDP 头包含很少的字节,比 TCP 负载消耗少。
TCP协议和UDP协议的区别
HTTP 协议
在IoT 开发中协议最大的不同是在 OSI 模型的应用程序层。这一层在通信网络中指定了接口方法。系统如何连接服务器且数据如何发送都由这一层来决定。
其实最受欢迎的通信协议莫过于超文本传输协议(Hyper Text Transfer Protocol,简称HTTP)。主要应用于 web 浏览器。它运行在一个客户/服务器模型上,服务器响应任何的客户端需求。因 web 网页可能会加载很多内容,因此该协议有必要建立在 TCP/IP 堆栈之上。
MQTT 协议
MQ 遥测传输(MQ Telemetry Transport,简称MQTT)是一个面向 IoT 应用程序的轻量级连接协议。它基于 TCP/IP 网络连接使用发布/订阅方法来传输数据。设计思想是开放、简单、轻量、易于实现,这也使它成为 IoT 开发的理想平台。
MQTT 很多有用的功能适用面向 IoT 应用程序。简而言之,想象一个公告板,无论什么时候,你都可以在上面记录或招贴。同时,对你所记录的内容感兴趣的任何人都可以看到。
MQTT 差不多就是这样的功能。
MQTT 包括代理和客户端两个部分。客户端可以访问或修改设备的数据,代理是持有并传递数据。
MQTT 使用发布/订阅消息模式。客户端可以在一个话题(Topic)下面发布特定参数数据给代理。另一个对此话题感兴趣的客户可以订阅该话题,并定期收到更新的消息。
MQTT 提供一个有质量的服务,从 IoT 角度来看,其本质是消息的优先级。在任何情况下一个重要的消息可以传输到目的地,因此有了服务质量(QoS),虽然传输速度会变慢但是交付有了保证。一个动态的数据源速度优先于效率,然而分配一个较低的 QoS,更像是一个“fire-and-forget”事件,如 UDP。
在一个主题下,MQTT 可以保留最后一个已收到的消息,前提是它发送给订阅者订阅链已启动。这允许订阅者在一个存在的客户端和代理网络中异步连接。这也为检查冗余及数据丢失提供了一个工具。
MQTT 客户端有一个属性称之为 Last Will a和 Testament。该属性允许客户端在异常中断的情况下发送通知给代理。这个快速的反馈有利于无线传感器网络自动再生,同时检测并修复缺失节点和异常值,最终确保无线传感器网络中数据流完美循环。
CoAP 协议
Coap(Constrained Application Protocol)是一种在物联网世界的类web协议,它的详细规范定义在 RFC 7252。COAP名字翻译来就是“受限应用协议”,顾名思义,使用在资源受限的物联网设备上。物联网设备的ram,rom都通常非常小,运行TCP和HTTP是不可以接受的。
CoAP特点:
1 COAP协议网络传输层由TCP改为UDP。
2 它基于REST,server的资源地址和互联网一样也有类似url的格式,客户端同样有POST,GET,PUT,DELETE方法来访问server,对HTTP做了简化。
3 COAP是二进制格式的,HTTP是文本格式的,COAP比HTTP更加紧凑。
4 轻量化,COAP最小长度仅仅4B,一个HTTP的头都几十个B了。
5 支持可靠传输,数据重传,块传输。 确保数据可靠到达。
6 支持IP多播, 即可以同时向多个设备发送请求。
7 非长连接通信,适用于低功耗物联网场景。
MQTT和CoAP协议的区别
MQTT和CoAP作为IoT协议都很有用,但是也有重要的区别。
MQTT是多对多通讯协议用于在不同客户端之间通过中间代理传送消息,解耦生产者与消费者,通过使得客户端发布,让代理决定路由并且拷贝消息。虽然MQTT支持一些持久化,最好还是作为实时数据通讯总线。
CoAP主要是一个点对点协议,用于在客户端与服务器之间传输状态信息。虽然支持观察资源,CoAP最好适合状态传输模型,不是完全基于事件。
MQTT客户端建立长连接TCP,这通常表示没有问题,CoAP客户端与服务器都发送与接收UDP数据包,在NAT环境中,隧道或者端口转发可以用于允许CoAP,或者像LWM2M,设备也许会先初始化前端连接。
MQTT不提供支持消息打类型标记或者其他元数据帮助客户端理解,MQTT消息可用于任何目的,但是所有的客户端必须知道向上的数据格式以允许通讯,CoAP,相反地,提供内置支持内容协商与发现,允许设备相互探测以找到交换数据的方式。
两种协议各有优缺点,选择合适的取决于自己的应用
LwM2M
LwM2M属于应用层协议,位于CoAP协议之上,而CoAP可以进行DTLS加密处理,最后通过UDP或SMS方式传送。
LWM2M 协议为应用层协议,CoAP 协议为传输层协议。
LwM2M的全称是Lightweight Machine-To-Machine,它的名称里面包含了这么两个重要含义:1)这个协议是轻量级的;2)这个协议适用于物联网设备。
LwM2M协议是由OMA(Open Mobile Alliance)提出并定义的。OMA这个组织专注于移动通讯以及物联网产业的标准开发,给自己的定位是“规范大工厂”。随着“万物皆可联”概念的兴起,物联网终端数目急剧膨胀,也不再局限于智能手机这样的强力大块头。有很多设备,要么电量有限,要么内存有限,要么可使用带宽有限,之前那些适于强劲终端设备管理的协议对它们来说有些太重了难以承受,因此,为了照顾到这些资源有限的小个子设备们,LwM2M协议在2013年底诞生了。目前的成熟版本号依然是1.0,OMA的专家们正在努力整1.1版。
概括地说:LwM2M是适用于资源有限的终端设备管理的轻量级物联网协议。