《物联网实战指南》读书笔记
文章目录
《物联网实战指南》
文章目录
本书代码链接:
https://github.com/alex1818/Learning-IoT-UPnP
https://github.com/wenh77/Learning-IoT-CoAP
https://github.com/newgogo/Learning-IoT-IoTPlatform
https://github.com/tuksik/Learning-IoT-HTTP
https://github.com/pojoba02/Learning-IoT-Gateway
https://github.com/wrtcoder/Learning-IoT-MQTT
第一章 物联网项目准备
1.1 创建传感器项目
1.2 创建执行器
1.3 创建控制器
1.4 创建摄像头
1.5 总结
第二章 HTTP
2.1 HTTP基础
HTTP是一个无状态的请求/响应协议,客户端从服务器请求信息,然后服务器响应这些请求。一次请求基本是一种方法、一些报头和一些可选的内容组成的。一次响应是由一个三位状态码、一些报头和一些可选的内容组成的。
每个资源最初被认为是一个超文本文件或者HTML文档的集合,后来确定为统一资源定位符URL,客户端只需使用GET方法从响应的服务器请求一个资源。资源由路径、服务器和URL的授权部分确定,并在URL结构中说明。PUT和Delete方法允许客户端从服务器上传和删除内容,而POST方法允许它们将数据发到服务器上的源,如在web表单中。
HTTP定义一组报头,可用于将附加的元信息的请求和响应通过网络发送。这些报头是人能够识别的键值文本对,而键值文本对包含了如何编码、有效期多长、期望的文本类型等信息。内容的类型由content-type报头确定,它确定了要传输内容的类型。报头也提供一种从客户端到服务器的认证方法和一种引进HTTP状态的机制。通过引入cookie文本字符串,服务器可以要求客户端记住cookie,客户端可以将每个请求添加到服务器。
HTTP工作在IP的顶层,HTTP中,机器使用IP地址寻址,它让不同解决方案来实现不同局域网之间的通信成为可能,虽然最常见的以太网网络中更使用的MAC地址。HTTP通信随之完成客户端和服务器之间的TCP,tcp连接确保数据报不丢失并以发送的顺序接收。连接端点由相应的IP地址和端口号定义,默认指定的端口号是80,但也可以使用其他端口号,HTTP端口号8080比较常见。
加密可以通过SSL或者TLS来完成,加密之后,通常成为https。通信使用分离端口,端口号通常是443,。在这种情况下,常见的服务器或者客户端可以使用基于公钥构架PKI的X.509证书进行认证,任何访问该证书的公共部分可以对私有部分拥有者的数据进行加密,私有部门的信息需要解密。这些证书允许服务器域名或者客户端身份认证。它提供了一种方法来检查谁是发行人员以及当证书被撤销之后证书是否无效。
HTTP是面向服务架构SOA,而通过HTTP方式发布的服务成为web服务。有一种很重要的发布web服务的方式称为简单对象访问协议SOAP,SOAP将web方法、参数、返回值、绑定等编码为一种特殊的xml格式,然后使用网络服务描述余元WSDL进行记录。发布web服务的另一种常用方法使用表述性状态转移REST,这提供了一个更简单的,松散耦合体系结构,其中的方法是基于正常HTTP方法和url的查询参数来实现的,而不是使用xml中的SOAP编码。
基于使用HTTP的最新发展包括互联数据、重新抽象网络,任何类型的数据都可以通过统一资源标识符URI来识别。这些数据的语义表征被分为三元组和语义数据格式,例如资源描述框架RDF、机器可读或者简化的RDF三元组TURTLE等容易被人阅读。而基于HTTP的互联网资源的集合被称为web,其后web额进步更名为“语义web”。
2.2 让HTTP支持传感器
2.3 添加HTTP支持的执行器
2.4 为控制器添加HTTP支持
第三章 UPnP协议
通用即插即用UPnP是一个协议或者多协议架构,帮助自组织IP网络中的设备发现彼此,检测每个设备托管的服务并执行动作和报告事件。自组织网络没有预定义的拓扑结构或配置;这里,设备发现自己、适应周围的环境,UPnp很大程度上用于家庭或办公室环境中的消费电子。
3.1 UPnP介绍
UPnP是一个很常见的协议。它被用在家庭及办公室几乎所有拥有网络功能的消费电子产品上,正因为如此,它是数据生活网络联盟DLNA的重要组成部分。UPnP的标准机构是UPnP论坛(upnp.org)。UPnP主要是基于HTTP的应用程序,其中客户端和服务器都是参与者。虽然这里用的是HTTP,然而,扩展后,它还可以用在tcp以及udp上,其中均使用单播寻址HTTPU和多播寻址HTTPMU。在网络中发现设备使用的是简单服务发现协议SSDP,它是基于HTTP UDP(HTTP的UDP实现)的,且事件订阅和通知是基于通用事件通知结构GENA的。无论SSDP还是GENA都引入了新的http方法来进行时间搜索、通知、订阅和退订。设备依靠使用多播寻址和其他可用的服务来通知网络它们的存在找到对方。然而,它们也使用多播寻址在网络中搜索某些类型的设备和服务。这一服务行为被称为调用SOAP网络服务操作。
3.1.1 提供服务体系结构
UPnP定义符合UPnP标准的设备的对象层次。每一个设备包含一个根设备。每个根设备可以发布零个或更多的嵌入式设备和服务。每个嵌入式设备本身可以反复发布更多的服务和嵌入式设别。每个服务一次发布一组动作和状态变量。设备的操作是可以用SOAP网络服务方法调用服务的方法。操作需要一系列的参数。每个参数都有一个名字、方向和一个状态变量索引。从这个索引可以推断出参数的数据类型。状态变量定义了服务的当前状态,并且每一个状态变量都有一个名称、数据类型以及数量值。此外,状态变量可以是常量、时间触发变量和/或多播事件触发变量。当时间状态变量的值被改变时,他们通过时间消息传播到网络。通常情况下,时间触发状态变量只发给那些使用常规HTTP的订阅者。多播事件触发状态变量是通过使用HTTPMU Notify向多播地址的SSDP发送消息来传播的,但使用不同的端口号。我们并不需要订阅此类事件变量以保持更新的值。
3.1.2 设备和服务能力的文档变化
网络中的每个UPnP兼容设备都会被声明在一个设备描述文DDD中,设备本身持有XML文档。设备让网络知道它的存在时总是包含着这个文档的索引。有意者可以下载文档和任何索引材料,了解设备的类型以及如何与之交互。该文档包含了一些机器可以理解的基本信息,也包含了一些人机接口。最后,设备描述文档还包含了嵌入式设备的索引,如果允许的话,可以索引机器发布的所有服务。设备发布的每一项服务都被描述在一个单独的服务控制协议说明SCPD的文档中,设备海豹了每一个xml文档。即使是用SOAP来调用每一个服务的方法,UPnP兼容服务比正常的SOAP网络服务功能还是要少的多。SOAP和WSDL只是给了设备很多选择,但这也造成了互操作性问题。出于这个原因,我们使用一个简单的服务体系结构,替换掉用WSDL来描述服务的方法,直接使用scpd.xml来实现。
3.2 创建设备描述文档
3.3 创建服务描述文档
3.4 提供一个web接口
3.5 创建UPnP接口
3.6 实现静止图像服务
3.7 使用摄像头
3.8 总结
第四章 CoAP协议
对基于小资源受限设备间的资源受限的IP网络通信来说,HTTPU不是一个很实际的选择,因为它需要太多的资源和太多的带宽。一种特殊的情况是底层网络限制数据报文的大小时使用基于IPv6的低功耗无线个人区域网络6LoWPAN,6LowWPAN是一个基于IPv6的无线网络协议的最新版本。约束应用协议CoAP正在尝试解决这个问题。
4.1 生成HTTP二进制文件
CoAP和HTTPU的主要区别在于,CoAP用更紧凑的二进制头替换HTTPU中使用的文本头,而且它减少了头包含的可用选项的数目。优势在于这更易于编码和解析CoAP信息,CoAP也降低了可用方法集,它可以 让你有四种方法选择,GET、POST、PUT、Delete。此外在CoAP中,方法调用可以使用确认和不确认消息服务。当你收到可确认消息,接收方总是返回一个确认信号。反之,如果在给定的时间内没有收到确认应答信号,发送范会重新发送。响应代码的数量也已减少,使实现更简单。CoAP也脱离了在HTTP使用中的互联网媒体类型方案和其他协议并使用裁剪的内容格式集替代,其中每个格式由一个数而不是其对应的互联网媒体类型识别。分配到不同的选择、方法、状态码和内容格式中的CoAP所用的数字的详细列表可以在http://www.iana.org/assignments/core-parameters/找到。
除了保留的http请求、响应能力和裁剪的集方法和选项,CoAP还提供了一些新的特点。与HTTPU一样,CoAP也支持组播,正如我们在UPNP协议中看到的,这可用于通过防火墙检测设备或通信。CoAP还提供了一套有用的扩展,其中一个扩展提供了一个块传输算法,它允许你传输大容量数据(在受限网络中,大容量数据相比普通的家庭或办公室的IP网络可能是非常小的)。另外一种扩展可以让你有一个事件订阅和通知架构,即当时间发生时发出通知,并且观察到的资源可以订阅。CoAP还支持在单播的情况下通过使用数据传输安全DTLS进行加密。CoAP的未加密版本如下图所示。
4.1.1 寻找开发工具
由于CoAP是比较新的,针对这个协议的开发工具还是比较少。但是有一个Firefox插件可以允许查看并与CoAP资源进行交互,这个工具是Copper(Cu)。基于web的CoAP测试工具可以在http://coap.me/找到,一个CoAP交互服务器可以在http://vs0.inf.ehtz.ch/找到。
4.2 为传感器添加CoAP
4.3 为执行器添加CoAP
4.4 在控制器中使用CoAP
4.5总结
第五章 MQTT协议
我们看到无论HTTP、CoAP还是UPnP都会遇到一个主要问题,即如果穿过防火墙边界。防火墙不仅阻止了传入的连接尝试,它们还会将家庭或者办公网络隐藏在一个单一的IP地址的后面。除非防火墙阻止输出连接,但它只是在显示配置下才能做到这点,如果位于防火墙之外的对话中的所有节点都充当客户端的公用信息中间人broker,并因此允许任何人访问,那么我们就能穿过防火墙边界。消息中间人虽然仅仅作为一个服务器存在,但是它是所有客户端传递消息的中继。使用消息中间人的其中一个协议就是消息队列遥测传输MQTT。
5.1 发布和订阅
MQTT协议基于发布、订阅模式,而不是之前章节研究的请求’/响应模式、事件订阅模式。发布/订阅模式有三种类型的角色actor:
- 发布者Publisher:发布者的作用是连接消息中间人与发布内容。
- 订阅者Subscriber:他们连接到相同的消息中间人并订阅他们感兴趣的内容。
- 消息中间人Message Broker:用来确保发布的内容传达给了对此有兴趣的用户。
5.2 给传感器添加MQTT协议
5.3 给执行器添加MQTT协议
5.4 给控制器添加MQTT协议
5.5 总结
第六章 XMPP协议
6.1 XMPP基础知识
6.2 为对象添加XMPP
6.3 提供额外的安全层
6.4 为执行器添加XMPP支持
6.5 为摄像头添加XMPP支持
6.6 为控制器添加XMPP支持
6.7 串联全部
6.8 总结
第七章 使用物联网服务平台
7.1 选择物联网平台
7.2 使用XMPP接入我们的设备
7.3 创建我们的控制应用
7.4 总结
第八章 创建协议网关
8.1 理解协议桥接
8.2 使用抽象模型
8.3 Clayster抽象模型基础知识
8.4 理解CoAP网关架构
8.5 总结
第九章 安全和互操作性
9.1 理解风险
9.2 攻击模式
9.3 实现安全的工具
9.4 互操作的需要
9.5 总结