物联网
本片博文基于《物联网——嵌入式开发实战》和《物联网系统开发:从0到1构建IoT平台》编写,推荐想要学习IoT的老哥参考这两本书
物联网的核心技术与产业分类
物联网核心技术有以下几种:
-
传感器 -
组网技术 用于短距离和远程无线通讯,包括
- 短距离:NFC、蓝牙、ZigBee、RFID等
- 远距离:互联网、移动通信网络、NB-IoT、LoRa、卫星通信网络等
-
嵌入式 -
云计算 -
边缘计算
物联网产业目前形成了用、云、边、管、端五大部分:
- 用户应用服务
- 消费驱动应用:以消费市场为目标的应用产业、制造业
- 政策驱动应用:以公共基础设施和政府相关项目为目标的制造业
- 产业驱动应用:以传统工业、农业、物流、车辆制造为背景的物联网升级
- 云计算服务
- PasS平台:以互联网厂商、通信服务商、新创业平台为主导的云平台服务产业
- 云端通用服务:包括AI、大数据处理、网络信息安全等基于传统云服务转移而来的产业
- 边缘端产业
- 边缘计算硬件载体厂商:传统硬件和芯片厂商主导的板卡生产产业
- 边缘计算软件载体厂商:以传统硬件、软件厂商转移、分化而来的软件服务业
- 管理与授权IP型产业
- 非授权频谱无线:提供WiFi、蓝牙、ZigBee等无IP授权需求的基带制造厂商
- 授权频谱无线:提供某一特定IP协议栈接入的授权厂商
- 端计算服务
- 芯片制造业:制造MCU、SoC、通信基带等芯片的制造业
- 传感器制造业:制造传感器设备/芯片的制造业
- 操作系统制造业:生产或高度定制操作系统(以RTOS和嵌入式Linux为主)的软件制造业
- 周边设施制造业:生产屏幕、无线设备、PCB、电源等的传统制造业
物联网设备面临的挑战
- 信息安全
- 云计算可靠性
- 协议授权
- 碎片化
- 能源问题
物联网基本结构
需要注意,物联网并不是简单的“连上网的嵌入式设备”,它的实现形式有很多——可以将数据当场采集、当场处理,再输出到云端,这就是“边缘计算”;也可以将数据采集后传输到多个计算设备,再将结果统一发送到云端或回传数据结果,这就是“分布式计算”;当场采集数据——传输到云端——云端计算——返回结构这样的体系架构仅仅是物联网的实现形式之一
物联网架构
-
USN架构 即国际电信联盟ITU-T制定的泛在感应器体系结构 将物联网设备分成
-
传感器网络层 -
泛在传感器网络接入层 和传感器网络层合并成为物联网感知层,负责采集环境中的数据信息 -
骨干网络层 该层的实际应用为互联网,并很可能被下一代网络NGN取代 -
网络中间件层 -
USN网络应用层 和网络中间件层共同成为应用层,用于实现物联网的智能计算和管理 -
M2M架构 这是USN的简化版本,由欧洲电信标准化协会M2M技术委员会给出 将物联网设备分成
-
应用层 由服务支撑平台等软件应用中间件和物联网具体应用软硬件构成 主要解决计算、处理和决策问题,负责将网络层传输而来的数据分析处理后再以有效信息或具体运动的方式传输到应用端 包括
等诸多方向 -
网络层 由网络管理中间件构成 涉及互联网、移动通信网、无线传感器网络等多种无线数据传输关键技术,该层主要负责将感知层获取的信息安全可靠地传输到应用层 常见的网络层实现有
- 互联网:包括IPv4、IPv6等连接方式
- 移动通信网:3G、4G、5G等移动通信方式
- 无线传感器网络(WSN,Wireless Sensor Net):在众多传感器之间建立一种无线自组网络,包括各种专用物联网协议
-
感知层 由数据采集和组网技术组成,是物联网的基础 应该包括如下结构:
-
公共技术层 该层的技术包括标志识别、安全管理、QoS管理、网络管理等可以被同时应用在物联网技术框架其他三个层次的技术
嵌入式技术
要实现物联网,那就离不开嵌入式开发。嵌入式开发是一个很长的技术栈,涉及从底层电路、计算机原理到操作系统,从蓝牙、WiFi到TCP/IP等大量知识,概括来讲可以分成以下几种:
-
单片机技术 这里单片机开发指以汇编、寄存器、C/C++、库函数等为基础技术的裸机单片机开发,开发者需要掌握单片机基本开发技巧和基础的物联网组网技术 -
嵌入式RTOS技术 在对系统实时性很严格或性能限制的应用场景中处理多任务一般使用实时操作系统增加系统稳定性 常见的RTOS有: FreeRTOS(4KB-9KB ROM)、RT-Thread(2.5KB ROM、1KB RAM)、uCOS(收费)、Keil RTX(专用于Cortex-M内核)等 -
嵌入式Linux技术 在对系统实时性要求相对较低且芯片性能较高的场景,嵌入式Linux具有快速部署、开发简单、复用性强的特点。并且嵌入式Linux具有多种发行版——从带图形界面的到只有串口调试的版本应有尽有,并且代码风格统一、易于修改、裁剪,所以当前有50%的项目选择Linux作为嵌入式操作系统
组网技术
物联网的另一个核心技术就是组网,常见的组网方法有以下几种:
-
蓝牙 由爱立信、诺基亚、东芝、IBM和英特尔在1998年5月联合发布,并经过多次升级迭代沿用至今 蓝牙技术多用于终端和手机等移动设备之间组网,因为它存在以下缺点:
- 功耗高:为了及时响应连接请求,在等待过程中必须使用轮询,导致耗能很高
- 连接过程繁琐:由于蓝牙连接过程中涉及多次信息传递与验证,对设备计算资源是一种浪费
- 安全性较弱:首次配对采用PIN码,一般仅由数字构成,位数很少,一般仅有4-6位;PIN码生成后设备会使用蓝牙自带E2或E3算法加密PIN码,再进行传输和身份验证,在此期间黑客可以通过拦截数据包、伪装目标蓝牙设备、暴力攻击等手段破解PIN码
因此较少用于纯物联网设备 -
WiFi 全称为Wireless Fidelity,在无线局域网的范畴指“无限相容性认证”,实质上是一种商业认证,同时也是一种无线联网的技术,其专利由澳大利亚政府享有,请不要在FSF支持者身边提及这个东西(笑) WiFi连接由AP(Access Point无线接入点)或称为“热点”(hotspot)的设备与Station(接入设备)组成,AP在媒体存取控制层MAC中作为无线工作站和有线局域网络的桥梁,接入设备通过连接到AP来接入有线网络 -
ZigBee 也称为紫蜂,是一种短距离传输的无线网上协议,低速、低功耗、低成本、可靠、安全 分成四层
-
物理层 作为ZigBee协议的底层,为上层提供数据接口等服务,由IEEE 802.15.4协议定义 -
MAC层 负责不同设备之间无线数据链路的建立、维护、结束和确认的数据传送、接收功能,由IEEE 802.15.4协议定义 -
网络/安全层 保证数据传输和完整性,同时可选对数据加密,由ZigBee联盟定义 -
应用/支持层 根据设计目的和需求使多个元器件之间可以进行通信,由ZigBee联盟定义 ZigBee最突出的优势就是低功耗和低成本,但是相应它的速率很低,只有250kb/s,不过完全能够传递传感器数据了 -
3G/4G/5G 主要用于设备上网,但一般需要使用SIM卡并向运营商付费 用途专一 -
NB-IoT Narrow Band Internet of Things即“窄带物联网”,只需消耗180kHz的带宽即可部署于GSM网络或LTE网络,支持低功耗设备在广域网的蜂窝数据连接,因此也被称为低功耗广域网(LPWAN),支持待机时间长、对网络连接要求高的设备的高效连接 主要缺点在于其通信速率较低 -
LoRa 最大优势就是同功率下的穿透性能更好,无限传播距离更远,实现了低功耗和远距离的统一,城镇传输距离可达2-5km,郊区可达15km,且基于IEEE 802.15.4g标准
TCP/IP简介
众所周知,TCP/IP协议簇构成了互联网的基础,要了解TCP/IP必须从OSI七层模型开始,这个模型描述了一层一层对物理网络连接的“封装”——虽然已经品鉴过无数次,但还是再介绍一下OSI模型:
-
物理层:定义电气、机械、信号时序等,利用传输介质为数据链路层提供物理连接,实现比特流在相连计算机节点间的透明传输,并对具体传输介质和物理设备进行抽象,数据链路层只需要了解节点地址即可 集线器HUB工作在这一层 -
数据链路层:定义如何格式化数据并支持错误检测,通过各种控制协议将有差错的物理信道变成无差错能可靠传输数据的数据链路。数据链路层常常被分成介质访问控制(MAC)和逻辑链路控制(LLC)两个子层:MAC子层的主要任务是解决共享网络中多用户竞争信道的问题,并完成网络介质的访问控制;LLC子层 主要任务是建立和维护网络连接。总体上讲数据链路层封装了主机设备的概念并将其转换成MAC地址提供给上一层 交换机Switcher工作在这一层——交换机是一种基于MAC地址识别,能完成封装转发数据包功能的网络设备,它可以记录MAC地址并在数据帧发送者和接收者之间建立临时的交换路径,派发对应的数据帧 -
网络层:控制数据链路层与传输层之间的信息转发,IP、IPX、ICMP、ARP、IARP等协议构成了这一层。这层可以建立、维持和终止网络连接,这层的最核心功能就是选择最佳路径传输路由数据包。网络层封装了主机MAC地址,使得设备可以通过IP地址互相通讯 路由器(Router)工作在这一层,路由器的基础功能就是寻找数据传输目标的IP地址并向其转发数据帧 -
传输层:用于提供可靠和尽力而为的传输,TCP、UDP等我们耳熟能详的网络协议都是传输层的基础。传输层会管理连接和处理传输错误。该层会在网络层的基础上为高层提供可选的是否面向连接的服务,如果提供面向连接服务,这层传输的数据会由目标设备进行确认,如果指定的时间内未收到确认信息,数据会被重发。从传输层开始,OSI模型进入了纯软件的领域,这一层将所有硬件通讯都抽象成同一种通讯方式,根据“是否进行确认”分成了两类,供上层应用选择 -
会话层:负责会话建立,提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。这层抽象了传输发起和结束的过程,上层程序只需要通过会话层提供的接口即可实现获取许可-发起传输的过程。 服务器验证用户登录这个过程是由会话层完成的 -
表示层:该层用于格式化数据,转换为适合OSI系统内部使用的传送语法——这被称为提供格式化的表示和转换数据服务;除此之外表示层还负责了数据压缩和解压缩、加密和解密工作。这一层虽然是很靠近顶层的,但是有一些工作也会被交给特殊的硬件设备——加密和解密十分耗费计算力资源,所以通常使用对应的算法硬件加速设备来进行快速加密和解密。该层抽象了网络通讯的底层数据结构,使得开发者能够以简明的方式向数据帧中写入数据或使用各种协议提供的API 诸如ASCII、JPEG、PNG、MP3、WAV、AVI等多种多媒体数据传输协议都是在这层定义的 -
应用层:为操作系统或网络应用程序提供访问网络服务的接口,完成用户希望的各种工作。网络应用开发者最常接触的就是应用层,这一层实现了TELNET、SSH、HTTP、FTP、SMTP、RIP等面向实际应用的协议,并定义了相关API,开发者只要了解需要使用到的API就可以开发需要的网络程序或实现网络功能。该层将所有底层的网络实现都抽象出来变成一个个API供程序员调用,在嵌入式-物联网开发中开发者会和应用层打交道,也会和底层打交道
事实上OSI七层模型并不经常被使用,因为它是以理论的角度解释网络底层原理,TCP/IP协议栈的内容并不能被OSI精准描述,但是OSI模型可以概括地定义TCP/IP协议的封装过程
TCP/IP协议将网络分成5层,大多数情况下使用的TCP/IP是四层架构——物理层、网络IP层、运输层、应用层,在某些场合会把物理层拆分成物理层和数据链路层
MAC协议
MAC地址(Media Access Control Address)即媒体存取控制地址,也常被称为局域网地址(LAN Address)、以太网地址(Ethernet Address)或物理地址(Physical Address),他是一个用于确认网络设备位置的地址
IP地址位于网络层,MAC地址位于数据链路层,每个设备(实际上是网卡)都必须有唯一的MAC地址——IP地址就是对于MAC地址某种意义上的抽象,IP地址基于逻辑,比较灵活,用户可以任意更改,而网卡的MAC地址则与其物理绑定,无法更改
使用ARP协议把MAC地址和IP地址一一对应。当有发送给本地局域网内一台主机的数据包时,交换机首先将数据包接收下来,然后把数据包内的IP地址按照交换表中的对应关系映射成MAC地址,再将数据包转发到对应的MAC地址的主机上。
IP协议
IP(Internet Protocol)网际协议,负责Internet之上网络之间的通信,并规定了将数据从一个网络传输到另一个网络应遵循的规则,是TCP/IP的核心,该协议分为IPv4和IPv6两个版本
IPv4使用32位二进制数来表示计算机的IP地址,一般分成四组数字来表示,每组数字在0到255。网络中通信的主机都必须有一个唯一的IP地址,网络数据包通过IP地址实现数据准确地发送到目标主机,但是由于IPv4规定的地址数量太少,所以使用NAT协议和子网掩码来在有限的二进制数内表示出所有的IP地址;IPv6则解决了IPv4的问题,将地址长度变为128位,能够为足够的设备提供IP地址支持,特别地,IPv6地址使用8个16位无符号整数表示,这些数之间用冒号分开
还有一个被称为端口号的东西,它并不属于IP协议,但通常端口号和IP地址成对出现,端口号一般用四位整数表示,在同一主机上不能出现重复的端口号,它用于标明主机上用于提供网络服务的端口,一般21表示FTP、23表示Telnet、25表示SMTP、80表示HTTP
NAT协议
NAT协议即网络地址转换(Network Address Translation)协议
NAT协议是由于IPv4地址不够用问题而诞生的,他将整个互联网划分为公网和局域网,公网上的每台主机都分配有唯一的IP地址,局域网内的主机想访问互联网就必须使用路由器进行地址转换,把局域网IP转换成公网IP。NAT协议使用A、B、C、D四个网段来划分网络属性,使用子网掩码来划分局域网和局域网内的子网。
同一局域网内的主机可以直接通信,但不同局域网内的主机无法直接通信,需要使用路由器进行转发
TCP、UDP协议
传输控制协议(TCP,Transmission Control Protocol)是面向连接的传输层通信协议,TCP消息需要双方建立连接,发出的消息需要得到对方应答
用户数据报协议(UDP,User Datagram Protocol)是面向应用的、无连接的传输层通信协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地抓取来自应用程序的数据并尽可能快地将其扔到网络上。在这个协议下,传输数据的速度仅仅受应用程序生成数据的速度、计算机的能力和传输带宽的限制;接收端UDP则会将每个信息段放在队列中,应用程序每次会从队列中读取一个消息段,UDP没有客户端和服务端的概念,所以两节点之间通信也不需要建立连接
因为UDP并不提供数据传输的保证机制,如果在从发送方到接收方的传递过程中出现数据包丢失,协议本身并不能作出任何检测或提示,因此人们通常将UDP协议称为不可靠的传输协议
一般TCP应用较为广泛,但在需要实时性的场合一般使用UDP;但物联网应用强调实时性,所以大部分需要使用UDP,少部分使用TCP
HTTP协议
HTTP协议位于应用层,是一个简单的请求-响应协议,通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息及得到什么样的响应。HTTP适用于从WWW服务器传输超文本到本地浏览器的传输协议。
该协议具有典型的CS(Client-Server)通信架构,由客户端主动发起连接,向服务器请求XML或者JSON数据,然而该协议并不完全适用于物联网,有三个原因:
- 设备必须主动向服务器发送数据,服务器难以主动向设备推送数据
- 安全性不高,而对应的HTTPS协议则对设备算力需求较大
- 需占用资源过多
MQTT协议
MQTT即消息队列遥测传输协议(Message Queuing Telemetry Transport Protocol)是一种基于发布-订阅模式的轻量级消息协议
MQTT非常适合物联网应用,详细信息可以参考MQTT协议相关的教程和文章
网络通信过程
-
发送
- 应用层封装数据包并格式化数据
- 传输层分配对应的端口号并追加TCP头部信息或者UDP头部信息,在封装成下一层数据包
- IP层:将数据包追加IP头部信息,其中包括源IP和目标IP,根据路由表判断使用计算机中的哪个网卡发送数据包
- 数据链路层:追加MAC头部信息,这个头部信息中包含了MAC地址(源地址、目标地址),将数据包正式封装成数据帧
- 物理层:将数据帧转换成比特流电信号在网线或WiFi介质中传输
-
接收
- 物理层:将比特电流信号转换成数据帧并向上传输
- 数据链路层:根据MAC地址进行处理,如果目标MAC地址是自己,则去掉MAC头部信息,剩下信息继续向上传输,否则不接收(一般主机)或根据路由表进行转发(路由器)
- IP层:从IP地址判断数据包是转发还是发送给自己,如果是发送给自己则去掉IP头部信息,剩下信息继续向上传输
- 传输层:去掉TCP头部信息,匹配对应的端口号,区分数据要传输给哪个具体应用,将剩余数据传送到上层
- 应用层:根据应用本身的协议对数据进行处理
以上内容以TCP协议下的数据帧传输为例,实际上所有网络数据的传输都是封装-传输-转发-再传输-解封装的过程
|