物联网网络通信
网络通信是当代物联网发展最重要的一环,它是将各种设备交流信息传递的媒介,物联网通信常用的架构是CS架构,如套接字socket就是为了C/S架构软件的开发。实现客户端client和服务器server的通信。
网络协议架构
在网络历史的早期,国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同出版了开放系统互联的七层参考模型。一台计算机操作系统中的网络过程包括从应用请求(在协议栈的顶部)到网络介质(底部) ,OSI参考模型把功能分成七个分立的层次。
具体怎么理解呢?首先从物理层开始。
物理层
我们如果想要和不同地方的人通信,比如发个微信什么的,需要通过互联网,不管是用网线还是wifi都需要一个物理连接,刚刚说的网线,WIFI什么的就是中间的物理连接,他们传输的是电信号,即一些二进制数据。显而易见的是一堆二进制信号如果没有规则,它也就是一些没有用的数字,那么有人就制定了规则,通过规则使得这些二进制数有意义,比如8位为一组,谁分?数据链路层分。
数据链路层
因为互联网早期公司众多,没有统一标准非常乱,后来互联网形成了统一标准即以太网协议Etherne。
它规定,一组电信号称为一个数据包,也叫做一帧,一帧分为报头head和数据data两部分。
在计算机通信里上述的源地址和目标地址就是Mac地址,这个东西是网卡地址,出厂就有,不能更改,除非换了(前六位是厂商编号,后六位是流水线号)。至此计算机也就可以在局域网通信了,因为每个计算机都有独特的Mac码。在报头里写上我是谁,我要找谁,我这是个啥,加上我要发的东西,这些东西打为数据包,在物理层以二进制的形式发出去,局域网内接收。至于怎么确认收到的那个就是我们想象中要接受的那个呢,这就是广播机制。我们把这个包发到局域网里,让它自己对应,比如要发给王二,就喊一声王二,王二听到了自己出来拿走,万一别人拿走了打开看了,但是看到是给王二的,那他拿走指定不合适,就不拿了还在那放着等王二拿。那么王二给别人传也一样,只是把源地址和目标地址变更一下。
到这里似乎已经可以让所有设备通信了,只要局域网足够大不就行了嘛,但是如果设备量很多,就好比我们的卧室来了300个人,别说找人说话,出卧室都难,这时,引入了网络层。
网络层
还是王二,王二想给另一个屋子的张三发东西,把墙打烂肯定不是一个聪明的办法,此时肯定找个中间人通过中间人建立连接,所以王二就广播了一个数据包,让老二屋子的负责人听见了,王二屋子的负责人又去找张三屋子的负责人,张三屋子的负责人在他们屋子广播,张三听到了就建立起了联系,王二不用把墙打烂,干净又卫生何乐而不为。言归正传,这个负责人就是网关。
Mac地址是那个人 IP地址是一个局域网 网关就是一个负责人
每次联网访问,计算机会判对我们是谁在哪个屋子,如果是局域网的那就直接基于Mac广播发包,如果不是就告诉网关来转发,IP和Mac地址包含了我们在互联网中的位置。数据链路层会把网络层的数据包继续封装,然后发给网关,网关再发给对方网关,对方网关再做广播。
当发送时需要通过ARP协议来获取对方Mac地址,在通信前首先需要知道对方的Mac地址,即我们的机器需要发送一个ARP包出去(广播)
在局域网中通过给此局域网内的ip发送ARP包即可返回对方的Mac地址,通过ip做为约束条件即可准确定位。此处FF FF FF FF FF FF是以一种功能,当目标IP解包后,这里就变成了对方的Mac值。
不在局域网中,通过IP(子网掩码)来进行判断,已经不在局域网,此时目标IP变成网关,网关返回自己的Mac地址,继续发包,以此类推,历经千辛万苦与对方建立通信。即使用户体会不到网关的存在,但是它也是在工作的。
传输层
传输层会在下面提及,但是这里有个重要的东西就是端口,因为我们通过ip和Mac只可以定位到我们的位置,而主机的若干软件需要被识别,识别的认证就是端口,而传输层的功能就是建立从端口到端口的通信
端口范围0-65536 0-1023为系统占用端口
应用层
最上面的三层统称为应用层,大家都可以开发自己的应用程序,各种各样的数据,而它的作用就是规定应用程序的数据格式。
此图解释了数据封包的全部过程
知道了网络协议架构对其他只是的学习是一个大的基础,但是,选择什么样的物联网组网技术仍是一个难题,根据需求不同,以下列举了一些个组网技术,并分别列出其优缺点
TCP/UDP协议
TCP是一种面向连接的,可靠的,基于字节流的传输层通信协议
UDP是一种无连接的传输协议 简单来说就是不管收没收到,反正发了。
TCP | UDP | |
可靠性 | 可靠 | 不可靠 |
连接性 | 面向连接 | 无连接 |
效率 | 效率低 | 效率高 |
功耗 | 高 | 低 |
UDP更适合对功耗要求低可靠性不高的场合,如收集数据,QQ聊天,即时通话等
TCP适合文件传输,接收邮件,远程登录等
HTTP协议
HTTP是基于C/S架构的模式,并且面连接的(TCP)之上,Hyper Text Transfer Protocol 超文本传输协议(超链接)典型的HTTP事务处理如下:
- 客户端与服务器建立连接
- 客户端对服务器发出请求
- 服务器接受请求,根据其请求返回相应的文件作为应答
- 客户端与服务器关闭连接
HTTP协议必须由客户端主动向服务器发送请求,服务器无法主动通知客户端,而且实现HTTP的硬件资源要求更高,成本大,不适合应用于物联网
MQTT和CoAP
MQTT是一个基于C/S架构的消息发布/订阅传输协议,是在TCP之上。
在设备与设备(M2M)通信和物联网(IoT)下应用广泛,现已经在医疗设备,智能家居,以及一些小型化设备中广泛使用。其优点有:
- 适合网络代价昂贵,带宽低,不可靠的环境
- 能在处理器和内存资源有限的嵌入式设备中运行
- 使用发布、订阅消息模式,提供一对多的消息发布,解除应用程序耦合
- 使用TCP/IP提供网络连接
- 提供Last Will和Testament特性通知有关各方客户端异常中断机制
CoAP (Constrained Application Protocol)是一种在物联网世界的类web协议,名字翻译来就是“受限应用协议”。其优点有:
- COAP协议网络传输层为UDP。
- 它基于REST,server的资源地址和互联网一样也有类似url的格式,客户端同样有POST,GET,PUT,DELETE方法来访问server,对HTTP做了简化。
- COAP是二进制格式的,HTTP是文本格式的,COAP比HTTP更加紧凑。
- 轻量化,COAP最小长度仅仅4B,一个HTTP的头都几十个B了。
- 支持可靠传输,数据重传,块传输。确保数据可靠到达。
- 支持lP多播,即可以同时向多个设备发送请求。
- 非长连接通信,适用于低功耗物联网场景。
CoAP | MQTT | |
通信机制 | 同步 | 异步 |
连接方式 | UDP | TCP |
使用场景 | 物联网 | 推送 |
功耗 | 低 | 高 |
支持平台 | 物联网平台:阿里云等云平台 | 通信平台:移动,电信等 |
反向控制 | 不支持 | 支持 |
MQTT是保持连接的,即时性很好
CoAP是无连接响应式通讯,不能不懂推送,等客户端访问才可以携带回去,即时性相对差。