关键内容:网络模型OSI、南北向协议。 作者:小步 篇幅:全文约 7871字 阅读时长:约10分钟 提示:以下内容仅为个人分享,有兴趣交流的伙伴可在下方讨论区留言。

知识库首页

产品API:IoT物联网领域产品必备手册

提示:上方链接属于全手册首页,伙伴们打开后可以关注或收藏,用于日常工作查看,其中关注后,可以实时收到文档更新通知,希望对你有所帮助。

正文

物联网协议来源于网络通信技术的发展,因此基本的网络通信基础知识必不可少。

这样的分类来源于TCP/IP协议OSI标准七层概念,因为物联网底层本质也是建立在TCP/IP协议基础之上,所以理解它便于我们更好的理解,在不同需求情况下,不同协议的作用地方。

基础知识

开放系统互联参考模型(OSI)

此模型由国际标准化组织(ISO)发布的开放系统互联(OSI)参考模型,OSI参考模型是一个7层结构
image.png

模型说明

OSI中的层 功能 TCP/IP协议族
应用层 文件传输、电子邮件、文件服务、虚拟终端 TFTP、HTTP、SNMP、FTP、SMTP、DNS、RIP、Telnet
表示层 负责对来自应用层的命令和数据进行解释,对各种语法赋予相应的含义,并按照一定的格式传送给会话层。 /
会话层 接触或建立与别的接点的联系,会话层负责向两个实体的表示层提供建立和使用连接的方法,将不同实体之间的表示层的连接称为会话 /
传输层 提供端对端的接口 TCP/UDP
网络层 负责通过路由算法,为报文或分组通过通信子网选择最适当的路径。该层控制数据链路层与物理层之间的信息转发,建立、维持与终止网络的连接 IP/ICMP/OSPF/BGP/ICMP/ARP/RARP
数据链路层 传输有地址的帧以及措辞检测功能 SLIP/CSLIP/PPP/MTI/ARP/RARP
物理层 以二进制数据形式在物联媒体上传输数据 ISO2110/IEEE802/IEEE802/2

从需求角度进行理解

这里有个从需求视角介绍7层概念的由来,大家可以用来理解:
这个模型推出的最开始,是因为美国人有两台机器之间进行通信的需求

需求1:物理层——解决两个硬件之间怎么通信

科学家要解决的第一个问题是,两个硬件之间怎么通信。具体就是一台发些比特流,然后另一台能收到。
于是,科学家发明了物理层:
主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。

需求2:数据链路层——通信数据的格式化和可靠传输

现在通过电线我能发数据流了,但是,我还希望通过无线电波,通过其它介质来传输。然后我还要保证传输过去的比特流是正确的,要有纠错功能。于是,发明了数据链路层:

定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。

需求3:传输层——大量文件传输的准确性

现在我能发正确的发比特流数据到另一台计算机了,但是当我发大量数据时候,可能需要好长时间,例如一个视频格式的,网络会中断好多次(事实上,即使有了物理层和数据链路层,网络还是经常中断,只是中断的时间是毫秒级别的)。

那么,我还须要保证传输大量文件时的准确性。于是,我要对发出去的数据进行封装。就像发快递一样,一个个地发。

于是,先发明了传输层(传输层在OSI模型中,是在网络层上面)

例如TCP,是用于发大量数据的,我发了1万个包出去,另一台电脑就要告诉我是否接受到了1万个包,如果缺了3个包,就告诉我是第1001,234,8888个包丢了,那我再发一次。这样,就能保证对方把这个视频完整接收了。

例如UDP,是用于发送少量数据的。我发20个包出去,一般不会丢包,所以,我不管你收到多少个。在多人互动游戏,也经常用UDP协议,因为一般都是简单的信息,而且有广播的需求。如果用TCP,效率就很低,因为它会不停地告诉主机我收到了20个包,或者我收到了18个包,再发我两个!如果同时有1万台计算机都这样做,那么用TCP反而会降低效率,还不如用UDP,主机发出去就算了,丢几个包你就卡一下,算了,下次再发包你再更新。

TCP协议是会绑定IP和端口的协议,下面会介绍IP协议。

需求4:网络层——最快找到发送对象(路由)


传输层只是解决了打包的问题。但是如果我有多台计算机,怎么找到我要发的那台?或者,A要给F发信息,中间要经过B,C,D,E,但是中间还有好多节点如K.J.Z.Y。我怎么选择最佳路径?这就是路由要做的事。

于是,发明了网络层。即路由器,交换价那些具有寻址功能的设备所实现的功能。这一层定义的是IP地址,通过IP地址寻址。所以产生了IP协议。

需求5:会话层——提升通讯的体验和管理


现在我们已经保证给正确的计算机,发送正确的封装过后的信息了。但是用户级别的体验好不好?难道我每次都要调用TCP去打包,然后调用IP协议去找路由,自己去发?当然不行,所以我们要建立一个自动收发包,自动寻址的功能。

于是,发明了会话层。会话层的作用就是建立和管理应用程序之间的通信。

需求6:表示层——统一性的语法表达


现在我能保证应用程序自动收发包和寻址了。但是我要用Linux给window发包,两个系统语法不一致,就像安装包一样,exe是不能在linux下用的,shell在window下也是不能直接运行的。于是需要表示层(presentation),帮我们解决不同系统之间的通信语法问题。

需求7:应用层——基于传输内容进行应用开发

现在所有必要条件都准备好了,我们可以写个Android程序,web程序去实现需求

物联网主要的三大特点

  • 懒:终端都很“懒”,大部分时间在“睡觉”,每天传送的数据量极低,且允许一定的传输延迟(比如智能水表)。
  • 静止:并不是所有的终端都需要移动性,大量的物联网终端长期处于静止状态。
  • 上行为主:与人的连接不同,物联网的流量模型不再是以下行为主,可能是以上行为主。

物联网平台协议

基于对上面内容的基本理解,对网络通信技术领域网络分层模式,应该有了一定的认识。接下来,我们可以继续探索。

在互联网时代,大部分应用都是采用HTTP协议的模式进行开展,因此物联网开始初期,大部分开发人员也会因为惯性采用HTTP协议去构建物联网应用,但随着行业的发展,会陆续发现HTTP协议在物联网领域的应用的弊端:

● 必须由设备主动向服务器发送数据,难以主动向设备推送数据。这对于数据采集等场景还可以勉强适用,但是对于频繁的操控场景,只能通过设备定期主动拉取的方式,实现成本和实时性都大打折扣。
● 安全性不高。由于Web的不安全性,HTTP是明文协议,在很多要求高安全性的物联网场景,如果不做很多安全准备工作(如采用https等),后果将不堪设想。
● 不同于用户交互终端如PC、手机,物联网场景中的设备多样化,对于运算和存储资源都十分受限的设备,HTTP协议实现、XML/JSON数据格式的解析,都是不可能的任务。

基于此,物联网领域自然也就发展出一套专属物联网领域的各层的协议标准。接下来的知识,将有助于你更好的理解物联网领域的协议关系。

物联网协议分类

物联网的协议分为两种,即接入协议通信/网络协议。接入协议大多都不属于TCP/IP协议族,只能用于设备子网(设备与网关组成的局域网)内的通信;而通信/网络协议属于TCP/IP协议族,能够在互联网中进行数据传输。

采用接入协议的物联网设备,需要通过网关进行协议转换,转换成通信/网络协议才能接入互联网。
而采用通信协议的物联网设备,则可以直接接入互联网

接入协议(局域网)

常用的接入协议包括蓝牙、ZigBee、LoRa、NB-IoT、Wi-Fi、RS-485、RS-232、NFC、RFID等;

通讯协议(互联网)

常用的通信协议包括HTTP、CoAP、MQTT、XMPP、AMQP、JMS等。其中:

image.png

物联网的通信环境有Ethernet、Wi-Fi、RFID、NFC(近距离无线通信)、ZigBee、6LoWPAN(IPv6低速无线版本)、Bluetooth、GSM、GPRS、GPS、3G和4G等网络,而每一种通信应用协议都有一定的适用范围。AMQP、JMS和HTTP都是工作在以太网的协议,CoAP协议是专门为资源受限设备开发的协议,MQTT的兼容性则强很多。

南北向协议

借由上面的图,我们还可以引入当前领域内,常说的北向协议和南向协议的术语概念。南北向是对具有上下游对接的物联网平台或网关性质的设备而言才有的抽象定义

用网关举例:
网关的北向协议,主要指与上层通讯的协议类型(传输协议);南向协议则主要指与下游设备之间通讯的协议标准(接入协议)

当然,以上是按照用途的直观分类,其实在领域类更多还是会用OSI的简化模型进行分类

物联网协议的四层模型

由于7层模型太过复杂,实际上市场上更多是采用TCP/IP四层协议系统,而这一的模型分组概念也将沿用到物联网领域,即常见的物联网协议,可以笼统的划分为物理层协议、网络层协议、传输层协议、应用层协议。

物联网协议:设备的沟通语言 - 图3

应用层:MQTT/COAP/HTTP,这些主要面向需要开发服务器或者对接云平台厂商(仅受限于软件设计)

应用层,是做云平台最常用的内容,基本上各大厂商都需要支持这一类的协议对接,满足不同设备接入

MQTT协议(传输层运行在TCP协议上)

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输),是由IBM开发的即时通信协议,相比来说是比较适合物联网场景的通信协议。

MQTT协议采用发布/订阅模式,所有的物联网终端都通过TCP连接到云端,云端通过主题的方式管理各个设备关注的通信内容,负责设备与设备之间的消息转发。

MQTT协议的适用范围:在低带宽、不可靠的网络下,提供基于云平台的远程设备的数据传输和监控。

基本介绍:

  • 基于TCP协议的应用层协议;
  • 采用C/S架构;
  • 使用订阅/发布模式,将消息的发送方和接受方解耦;
  • 提供3种消息的QoS(Quality of Service):至多一次、最少一次、只有一次;
  • 收发消息都是异步的,发送方不需要等待接收方应答。

image.png

MQTT协议的一个关键特性是发布和订阅模型。与所有消息协议一样,它将数据的发布者与使用者分离。MQTT协议在网络中定义了两种实体类型:消息代理(Broker)和一些客户端(Client)。

MQTT消息是按主题进行组织的,所以应用程序开发人员能灵活地指定某些客户端只能与某些消息交互

MQTT-SN协议(传输层运行在UDP协议上)

MQTT-SN(MQTT for Sensor Network)协议是MQTT协议的传感器版本。
MQTT协议虽然是轻量的应用层协议,但是MQTT协议是运行于TCP协议栈之上的,TCP协议对于某些计算能力和电量非常有限的设备来说,比如传感器,就不太适用了。MQTT-SN运行在UDP协议上,同时保留了MQTT协议的大部分信令和特性,如订阅和发布等。
image.png
MQTT-SN协议引入了MQTT-SN网关这一角色,网关负责把MQTT-SN协议转换为MQTT协议,并和远端的MQTT Broker进行通信。
MQTT-SN协议支持网关的自动发现

CoAP协议(传输层运行在UDP协议上)

CoAP(Constrained Application Protocol,受限应用协议),应用于无线传感网中的协议,是6LowPAN协议栈中的应用层协议,适用于资源受限的通信网络。

和MQTT-SN协议一样,CoAP协议通常也是运行在UDP协议上的。

CoAP协议设计得非常小巧,最小的数据包只有4个字节。CoAP协议采用C/S架构,使用类似于HTTP协议的请求-响应的交互模式

CoAP协议的特点如下:
● 报头压缩:CoAP包含一个紧凑的二进制报头和扩展报头。它只有短短的4B的基本报头,基本报头后面跟扩展选项。一个典型的请求报头为10~20B。
● 方法和URIs:为了实现客户端访问服务器上的资源,CoAP支持GET、PUT、POST和DELETE等方法。CoAP还支持URIs,这是Web架构的主要特点。
● 传输层使用UDP协议:CoAP协议是建立在UDP协议之上,以减少开销和支持组播功能。它也支持一个简单的停止和等待的可靠性传输机制。
● 支持异步通信:HTTP对M2M(Machine-to-Machine)通信不适用,这是由于事务总是由客户端发起。而CoAP协议支持异步通信,这对M2M通信应用来说是常见的休眠/唤醒机制。
● 支持资源发现:为了自主地发现和使用资源,它支持内置的资源发现格式,用于发现设备上的资源列表,或者用于设备向服务目录公告自己的资源。它支持RFC5785中的格式,在CoAP中用/.well—known/core路径表示资源描述。
● 支持缓存:CoAP协议支持资源描述的缓存,可以优化其性能。

LwM2M协议(底层CoAP协议上)

LwM2M(Lightweight Machine-To-Machine)协议是由Open MobileAlliance(OMA)定义的一套适用于物联网的轻量级协议。它使用RESTful接口,提供设备的接入、管理和通信功能,也适用于资源比较紧张的设备

LwM2M协议底层使用CoAP协议传输数据和信令。而在LwM2M协议的架构中,CoAP协议可以运行在UDP或者SMS(短信)之上,通过DTLS(数据报传输层安全)来实现数据的安全传输。

LwM2M协议架构主要包含3种实体——LwM2M Bootstrap Server、LwM2MServer和LwM2M Client。

Modbus

Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。
Modbus 协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。

主要应用场景:智能电表

modbus协议和tcp/ip协议区别为:作用不同、传输不同。
作用不同
1、modbus协议:modbus协议可以使控制器之间,以及控制器由网络和其它设备之间进行通信。
2、tcp/ip协议:modbus tcp/ip协议提供传输层与网络层之间的服务。
传输不同
1、modbus协议:modbus协议传输距离短、速度慢,导致应用受到局限。
2、tcp/ip协议:modbus tcp/ip协议传输距离远、传输速度快,使得应用范围广泛。

传输层:TCP、UDP

TCP/IP

TCP / IP 堆栈。它控制两台计算机之间的数据传输。其中采用三次握手建立一个连接,其中涉及客户端确认数据的接收且发送确认消息给服务器。第二次握手是服务器端接收到客户端的数据后,返回确认回单,第三次是客户端也返回一个确认回单给服务器端,从而关闭通信通道。

这种通信方法的优点具有可靠性,可共享所有被发送的数据,但因为其过程都需要验证,所以消耗时间比较久。

image.png

UDP

UDP为应用程序发送和接收数据报,但是与TCP不同,UDP是不可靠的,它只是把数据报发送出去,但并不能保证该数据报能安全无误地到达最终目的地。UDP是无须连接的

物理层:NB-IoT,LoRa,WIFI,蓝牙,Zigbee,4G,5G这几个都需要芯片模组支持(受限于硬件支持)

不需要网关:NB-IoT,4G(芯片可以直接连上移动,联通,电信运营商)
需要网关:LORA,WIFI,zigbee(不能直接连上电信运营商,需要通过一个网关中转才能连上电信运营商)

LoRaWAN协议(无线通讯技术)

LoRaWAN协议是由LoRa联盟提出并推动的一种低功率广域网协议,它和我们之前介绍的几种协议有所不同。

LoRaWAN协议则是物理层/数据链路层协议,它解决的是设备如何接入互联网的问题,并不运行在IP网络上。
通过本地网络完成数据传输,再由可进行网络通信的网关完成数据的落地交互

MQTT协议、CoAP协议都是运行在应用层,底层使用TCP协议或者UDP协议进行数据传输,整个协议栈运行在IP网络上

而LoRa(Long Range)是一种无线通信技术,它具有使用距离远、功耗低的特点。在上面的场景下,用户就可以使用LoRaWAN技术进行组网,在工程设备上安装支持LoRA的模块。通过LoRa的中继设备将数据发往位于隧道外部的、有互联网接入的LoRa网关,LoRa网关再将数据封装成可以在IP网络中通过TCP协议或者UDP协议传输的数据协议包(比如MQTT协议),然后发往云端的数据中心。

LoRaWAN是基于LoRa的低功耗广域网,它主要包括两个部分:通信协议和体系结构,它能构建一个低功耗、可扩展、高服务质量、安全的长距离无线网络。
image.png
LoRa体系结构

它将网络实体分成4类:即End Nodes(终端节点)、Gateway(网关)、LoraWAN Server(LoRaWAN服务器)和Applicaton Server(用户服务器)

LoRa协议

作为一项无线技术,LoRa所具备的功耗低、传输距离广、信号穿透性强、灵敏度高等特点,相较于ZigBee、2.4G等传统无线技术而言具有很明显的技术优势。因此,对一些具体的项目及企业的私网需求而言,LoRa私有协议比LoRaWAN更加灵活,成本更低。

NB-IoT协议

NB-IoT(Narrow Band Internet of Things)协议和LoRaWAN协议一样,是将设备接入互联网的物理层/数据链路层的协议。

和LoRA不同的是,NB-IoT协议构建和运行在蜂窝网络上,消耗的带宽较低,可以直接部署到现有的GSM网络或者LTE网络。

设备安装支持NB-IoT的芯片和相应的物联网卡,然后连接到NB-IoT基站就可以接入互联网。而且NB-IoT协议不像LoRaWAN协议那样需要网关进行协议转换,接入的设备可以直接使用IP网络进行数据传输。

NB-IoT协议相比传统的基站,增益提高了约20dB,可以覆盖到地下车库、管道、地下室等之前信号难以覆盖的地方。

LPWAN的技术定位

物联网对功耗、覆盖、连接数量这几个指标非常非常敏感。而对于速率,大部分物联网应用反而并不敏感。比如抄个电表读数,上报个位置经纬度,这些数据量都很小,没有几个字节,不需要多大的带宽速度。WLAN物联网,主要受限于覆盖范围和功耗上。
于是,LPWAN(Low Power WideArea Network,低功耗广域网)概念被提了出来。其名称里就有两个最重要的特点:即低功耗和广覆盖。
image.png
LPWAN强调的是覆盖,牺牲的是速率。因此也把LPWAN叫做蜂窝物联网。这个称谓也体现了它和2G/3G/4G这种蜂窝通信技术之间的共性,即都是通过基站或类似设备提供信号的

Bluetooth协议

蓝牙技术是一种尖端的开放式无线通信标准,能够在短距离范围内(30m左右)无线连接桌上型电脑与笔记本电脑、便携设备、PDA、移动电话、拍照手机、打印机、数码相机、耳麦、键盘甚至鼠标。

利用“蓝牙”技术,能够有效地简化移动通信终端设备之间的通信,也能够简化设备与互联网之间的通信,从而数据传输变得更加迅速高效。

蓝牙采用分散式网络结构以及快跳频和短包技术,支持点对点及点对多点通信,工作在全球通用的2.4GHz ISM(即工业、科学、医学)频段。其数据速率为1Mbps。采用时分双工传输方案实现全双工传输。

相比于其他无线技术:红外、无线2.4G、Wi-Fi来说,蓝牙具有加密措施完善、传输过程稳定及兼容设备丰富等诸多优点

1999年5月20日,这5家公司成立了蓝牙“特别兴趣组”(Special Interest Group,SIG)

蓝牙协议体系中的协议按SIG的关注程度分为4层:

  • 核心协议:BaseBand、LMP、L2CAP、SDP;
  • 电缆替代协议:RFCOMM;
  • 电话传送控制协议:TCS-Binary、AT命令集;
  • 选用协议:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、WAE。

ZigBee协议

ZigBee是一种新兴的短距离、低复杂度、低功耗、低数据速率和低成本的无线网络技术。主要用于近距离无线连接。TI公司的ZigBee芯片样片如图1.13所示。它依据IEEE 802.15.4标准,在数千个微小的传感器之间相互协调实现通信。

ZigBee无线网络主要是为工业现场自动化控制数据传输而建立。因此它具备简单、方便、稳定和低成本等特点,弥补了蓝牙技术不能满足工业自动化中对低数据量、低成本、低功耗、高可靠性的无线数据通信的需求

ZigBee(蜜蜂协议),是基于IEEE802.15.4标准的低功耗局域网协议

ZigBee 3.0统一了采用不同应用层协议的ZigBee设备的发现、加入和组网方式,使得ZigBee设备的组网更便捷、更统一。

ZigBee是一种无线连接,可工作在2.4GHz(全球流行)、868MHz(欧洲流行)和915 MHz(美国流行)3个频段上,分别具有最高250Kbps、20Kbps和40Kbps的传输速率,它的传输距离在10~75m的范围内,但可以继续增加。作为一种无线通信技术,ZigBee具有如下特点

基本概念
ZigBee可使用的频段有3个,分别是2.4GHz的ISM频段、欧洲的868MHz频段,以及美国的915MHz频段,而不同频段可使用的信道分别是16、1、10个
image.png

基本的层次结构
image.png
ZigBee网络中的设备主要分为以下3类:

  • 协调器(Coordinator):负责启动整个网络。它也是网络的第一个设备。协调器选择一个信道和一个网络ID(也称之为PAN ID,即Personal AreaNetwork ID),随后启动整个网络。
  • 路由器(Router):路由器的功能主要是:允许其他设备加入网络,路由和协助它自己的由电池供电的终端设备的通信。
  • 终端设备(End-Device):终端设备没有特定的维持网络结构的责任,它可以睡眠或者唤醒,因此它可以是一个电池供电设备。

协议转换

协议转换指将一个设备协议转换成适用于另一设备的协议过程,目的是为了使不同协议之间实现互操作。

其他知识点

1 工作在2.4GHz的ISM频段

LoRa低功耗局域网无线标准、WIFI、BLE、ZigBee、RFID

2 Socket

这不是一个协议,而是一个通信模型。其实它最初是伯克利加州分校软件研究所,简称BSD发明的,主要用来一台电脑的两个进程间通信,然后把它用到了两台电脑的进程间通信。所以,可以把它简单理解为进程间通信,不是什么高级的东西。主要做的事情不就是:

A发包:发请求包给某个已经绑定的端口(所以我们经常会访问这样的地址182.13.15.16:1235,1235就是端口);收到B的允许;然后正式发送;发送完了,告诉B要断开链接;收到断开允许,马上断开,然后发送已经断开信息给B。

B收包:绑定端口和IP;然后在这个端口监听;接收到A的请求,发允许给A,并做好接收准备,主要就是清理缓存等待接收新数据;然后正式接收;接受到断开请求,允许断开;确认断开后,继续监听其它请求。

可见,Socket其实就是I/O操作。Socket并不仅限于网络通信。在网络通信中,它涵盖了网络层、传输层、会话层、表示层、应用层——其实这都不需要记,因为Socket通信时候用到了IP和端口,仅这两个就表明了它用到了网络层和传输层;而且它无视多台电脑通信的系统差别,所以它涉及了表示层;一般Socket都是基于一个应用程序的,所以会涉及到会话层和应用层。

参考资料及书单

《物联网系统开发:从0到1构建IoT平台》
《物联网之魂:物联网协议与物联网操作系统》