文章目录
  1. 1. 八大物联网IoT上云协议快速入门教程
    1. 1.1. 为什么有这么多不同的协议/哪种物联网协议最快
    2. 1.2. 万变不离其宗
    3. 1.3. 为什么要分层/分层有什么用
      1. 1.3.1. 流水线作业,各司其职
      2. 1.3.2. 灵活性好/维护性好
    4. 1.4. 如何快速入门一种协议
      1. 1.4.1. 确定协议属于哪一层
      2. 1.4.2. 弄清楚拓扑结构
        1. 1.4.2.1. 拓扑结构中的冲突避免机制
      3. 1.4.3. 阅读标准文档

转载请注明 作者:源码先生, 文章链接:https://www.debugself.com/2020/03/23/Protocol_guide/, 请勿用于商业用途

关注我,获取更多物联网IoT+云原生的技术分享。

八大物联网IoT上云协议快速入门教程
物联网IoT协议之mqtt快速入门教程
物联网IoT协议之OPC UA快速入门教程
物联网IoT协议之 LoRaWAN快速入门教程
物联网IoT协议之NB-IoT/CoAP快速入门教程
物联网IoT上云协议之Modbus快速入门教程
IPv6快速入门教程
物联网IoT协议之6LoWPAN快速入门教程
物联网IoT协议之HTTP快速入门教程
车联网V2X快速入门教程

八大物联网IoT上云协议快速入门教程

陆续写了8篇物联网上云协议的入门教程,历时半年,因为在业余时间完成,有时候1个月才能写一篇教程,期间阅读了N多标准文档,搜索了N篇论文,购买了N本电子书,整个过程中收获最大的还是自己,以前一直对互联网、物联网的异构网络存在疑惑,比如为什么存在ZigBee,LoRaWAN,NBIoT,4G,5G等这么多无线通信方式,他们和有线通信是否可以统一?物联网为什么要发展IPv6,如何发展?这些疑问慢慢都有了答案。

为什么有这么多不同的协议/哪种物联网协议最快

历史上,评价秦始皇对中国最大的贡献,是“车同轨,书同文,统一度量衡”,因为基础设施有了统一的标准,促进了交通,文化,贸易的发展,方便了百姓生活。

万物联网,能不能来个万物统一的标准呢?从现状来看,答案是不能,就像编程语言,Java、C、Python、C++、C#、Go、JavaScript百花齐放,并不存在统一的语言,程序员最大的苦恼就是要学的编程语言太多了。

要学的编程语言太多了

这时自然有人问了,最好的编程语言是哪种?“PHP是世界上最好的语言”是真的吗?对应到物联网协议中,就是哪种物联网协议速度最快?源码先生的观点是:

  • 首先要搞清楚如何对比,比如mqtt和5G就不能对比,mqtt是应用层协议,5G主要是物理层和数据链路层协议,对比mqtt和5G谁最速度最快,犹如对比奥特曼和孙悟空谁厉害一样,没有可比性;
  • 就像上百种编程语言,谁也不能完全替换谁,每种语言都有自己的优势和使用场景,也没有最快/最好的物联网协议,只有最合适的协议,业务场景不同,最合适的协议也不同

万变不离其宗

虽然物联网协议很多,区别挺大,但本质还是可以追溯出来的,这就是OSI标准7层网络模型。

OSI标准7层网络模型

无论简单的串口通信,还是复杂的TCP/IP,无论低速的ZigBee,还是高速的5G,统统能套到OSI标准7层网络模型中,OSI模型就是万变不离其宗的宗。实际场景中,表示层和会话层一般也放到应用层,TCP/IP参考模型把OSI标准7层网络模型简化为5层模型。

TCP/IP参考模型

TCP/IP参考模型若能了然于胸,知其然,也能知其所以然的话,再多的物联网协议也不怕,真正做到妈妈再也不担心我的学习了

为什么要分层/分层有什么用

要想搞清楚5层TCP/IP参考模型,第一步是搞清楚为什么要分层。遥想N多年前第一次接触TCP/IP参考模型时,源码先生是懵圈的,直接一把梭不香吗,只要能通信,何必搞这么复杂,分这么多层?

写程序一把梭

随着源码先生吃的饭越来越多,源码先生明白了,分层的道理和吃外卖是一样一样的。

外卖协议栈

对比TCP/IP参考模型和外卖协议栈,可以得出以下分层的优点。

流水线作业,各司其职

20世纪初,美国人亨利.福特首先采用了流水线生产方法,在他的工厂内,专业化分工非常细,仅一个生产单元的工序竟然多达7882种,为了提高工人的劳工效率,福特反复试验,确定了一条装配线上所需要的工人,以及每道工序之间的距离.这样里来,每个汽车底盘的装配时间从12小时28分缩短到1小时33分。

流水线作业中,分工明确,各司其职。对应到外卖协议栈中:

  • 大自然负责提供最宝贵却又免费的生长环境
  • 农民伯伯负责种植食材,但不用关心阳光和土壤从哪里来
  • 物流贸易商负责运输食材,但不用关心食材是如何种出来的
  • 饭店/厨师负责把食材做成饭,但不用关心食材从哪里来
  • 外卖小哥负责送外卖,但不用关心厨师如何做饭
  • 吃货负责吃,其他的一概不关心

对应到TCP/IP参考模型中:

  • 物理层对应物理传输介质,比如有线传输的双绞线,无线传输的电磁波
  • 数据链路层有了MAC地址,通过MAC寻址可以在多个设备之间传输数据,但不用关心通过有线传输还是无线传输
  • 网络层有了IP地址,通过IP寻址,可以在多个设备之间传输数据,但不用关心数据如何发送到目标MAC设备
  • 传输层有了端口,通过端口,同一个IP地址可以运行多个应用,多个应用的数据相互独立,但不用关心数据如何发送到目的IP设备
  • 应用层以HTTP为例,HTTP不用关心底层是TCP还是UDP,比如HTTP2之前的版本用的是TCP,到了HTTP3换成了UDP

可以看到,每层只需要调用下层服务,不需要关心服务如何实现,同时每层提供对外服务,供其他层调用。

灵活性好/维护性好

分层后,各层互不影响。当某一层发生变化时,只要其接口不变,其他层不受影响或者受影响程度很小,举个栗子:

  • 笔记本可以通过WIFI上网,也可以通过网线上网,对笔记本来说没有任何影响
  • 手机从3G到4G再到5G,速度提升了很多,对APP没有任何影响,即使将来6G和7G,APP也不受影响
  • IPv4更新为IPv6,对于浏览网页的应用层HTTP协议,影响并不大

分层后,可以分层调试协议,快捷方便,而且协议升级时,影响范围也不大。

分层的好处多多,不清楚分层有哪些优点时,只要往源码先生独创的外卖协议栈上套,想想吃货随意点外卖的惬意,就明白了。

如何快速入门一种协议

确定协议属于哪一层

确定协议属于哪一层后,只关心本层协议即可,比如5G,更多的是如何优化物理层和数据链路层的无线传输,什么TCP、mqtt就不用关心了。源码先生整理了常见协议所属的分层:

模型 协议
物理层 有线传输如双绞线、同轴电缆、光纤等,无线传输如ZigBee、LoRa、2G、3G、4G、5G、NBIoT等
数据链路层 常见的有IEEE 802.11系列(如WIFI主要采用802.11b协议),IEEE 802.3(以太网),IEEE 802.15.1(蓝牙)、IEEE 802.15.4(ZigBee、6LoWPAN)等
网络层 常见的有IPv4、IPv6、6LoWPAN
传输层 常见的有TCP和UDP
应用层 常见的有HTTP、mqtt、COAP、OPC UA、ModBus、FTP等

很多协议是涉及多层的,比如LoRaWAN,包括从物理层到应用层5层全部网络模型

弄清楚拓扑结构

两个设备相互通信,用一条线把两个设备连接起来即可。

网络拓扑结构

三个设备相互通信,两两相连需要3条线。

网络拓扑结构

四个设备相互通信,两两相连需要6条线。

网络拓扑结构

很明显,随着设备个数的增加,两两相连需要的线按指数级增长,所以两两相连的方式肯定是不合适了,总线型拓扑结构是一种简单的解决办法。

总线型网络拓扑结构

多个设备复用同一条总线,减少了布线的复杂度;其他网络拓扑结构有星型、环型、树型、总线型等多种,无论哪种网络拓扑结构,最终都是为了实现多个设备相互通信

拓扑结构和5层TCP/IP参考模型并没有一一对应的关系,比如以太网是总线型拓扑结构,但是互联网(主要是TCP/IP)是混合型拓扑结构,由以太网+路由器+城域/省域/国域交换中心组成的混合拓扑结构;网络模型的每层都可以有自己的拓扑结构,比如mqtt是基于TCP/IP应用层协议(混合型拓扑结构),但是从应用层看,mqtt是星型拓扑结构。从整体上看,大多数协议都是混合型拓扑结构,只有细化到具体层时,才可以确定出具体的拓扑结构。弄清楚拓扑结构的目的,是为了从宏观上、整体上了解协议,只要达到了解协议的目的,并不需要严格的区分一个协议具体用到哪些拓扑结构。

拓扑结构中的冲突避免机制

总线上有多个设备,多个设备同时发送数据,数据会产生冲突,此时需要冲突避免机制,大部分冲突避免机制是在数据链路层实现,比如以太网使用的CSMA/CD(即载波侦听多路访问/冲突检测),但是也可以在应用层上实现冲突避免机制,如Modbus。

阅读标准文档

每个协议都有官方标准文档,这是最权威的协议资料,官方文档内容一般非常详细,适合深入研究协议,如果只是快速入门,建议阅读源码先生的入门教程,原因不解释

对于本系列物联网协议教程,源码先生并不是太满意,本可以写的更通俗更易懂,无奈单篇教程篇幅已经太长,不少地方只能一笔带过,此处省略向天再借五百年.mp3

原创不易,以上内容来自源码先生个人理解,难免有错误之处,欢迎留言或者添加源码先生个人微信号(debugself),欢迎技术交流与合作

源码先生个人微信号