1.8 将 IPv6 连接到互联网
正如在本书前言所说的,网络通信是物联网的四个基本元素之一。我们已经知道,IPv6 允许我们为能想到的所有物体分配一个 IP 地址,允许我们便捷地配置设备的网络参数。
一旦我们将所有的物使用 IPv6 连接后,这些物体就可以在它们本地之间通信,或者与其它连接到 IPv6 网络中的物体通信。在本节,我们将注意力放在物体的因特网侧的通信。
正如我们将在本书中看到的那样,由于我们的设备有能力连接到因特网中,所以产生了新的发展潜力和服务。比如,我们可以将无线传感器网络连接到一个集中的资源库,该资源库负责将接收到的所有信息进行处理并存储历史记录,而这些历史记录可以用于揭露潜在的模型和预测将来的事件。这个基本思想就是我们今天所说的“大数据”,拥有一整套概念和技术的大数据。
返回到网络连通领域,我们的目标是使用 IPv6 连接 IoT 设备到因特网,使其可与其他 IoT 设备、采集服务器甚至与人进行通信。
与 IPv6 连接到因特网相关的一个重要思想是:IoT 设备和 IPv6 因特网的通信是双向的。在 IPv4 中,客户端和服务端的连接总是单方向的。IPv6在这一点做了改进。
IoT 设备的双向通行机制提供了有用的发展潜力,因为不仅这些设备可以发送信息到因特网中的某个地方,而且因特网中的任何点都能发送信息、请求或命令到 IoT 设备。这可以用于几个不同的场景:
- 管理:用于管理 IoT 设备执行一些状态测试,通过远程更新默写参数、配置、固件,提供对硬件平台更好的、更有效的控制使用,提升基础设施的安全性。
- 控制:发送命令和控制执行器给 IoT 设备,让其执行一定的动作。
- 通信:通过一些接口发送信息到 IoT 设备。
IPv6 也被部署在组成因特网的所有不同网络中,这意味着当我们连接自己的网络到IPv6 网络时,有多重场景供我们选择。下面是按照优先级顺序列举的三种常见场景,其中原始 IPv6 连接是最好的选择。
- 原始 IPv6 连接:这种场景应用于既有 ISP 提供的连接到因特网的服务,又有在网络中有支持 IPv6 的路由器和网络设备。原始 IPv6 是指包在从源到目的地路径中的任何地方流动时都没有被改变或者被隧道化。双栈网络是很常见的 —— 在相同的接口/设备、相同的时间,原始 IPv6 和原始 IPv4 都被使用。本地 IPv6 场景包括这两部分:只有 IPv6 和双栈。
从图片可以看到,路由器 R2 与 IoT 设备云相连,路由器 R1 与 IPv6 因特网相连。R1 通过发送前面所说的 RA 为 LAN1 中的设备自动配置 IPv6 地址(包括 R2)。
- 没有 IPv6 连接:在这种场景,我们面临着当前最常见的一个问题 —— 缺少来自 ISP 支持的 IPv6 连接。尽管我们的 IPv6 已经在路由器上被支持,但是 ISP 只支持 IPv4。对应的解决方案是使用一个叫做 IPv6 转换装置的设备。这种情形下,最简单、最有用的是 6in4 隧道。6in4 隧道是基于点对点隧道,将 IPv6 包封装到 IPv4 内部。
上图展示了这个解决方案,从 R1 挖一条隧道连接到“远程隧道结束点” —— IPv4 与 IPv6 因特网的交接点。这由一个既可以连接 IPv4 又可以连接 IPv6 的路由器实现。原始 IPv6 数据从我们的网络(LAN1 和 LAN2)流出到达 R1,R1 将 IPv6 的包(包括数据)放到一个新的 IPv4 包里面。IPv4 包中包含与隧道终点相对应的IPv4 目的地址。隧道终点路由器将提取 IPv6的包,并将其以原始 IPv6 包的形式传递给 IPv6 网络。
- 没有 IPv6 连接且没有 IPv6 路由器:这种场景指 IPv6 网络既没有 ISP 的支持,又没有能够连接网络到 IPv6 因特网的路由器支持。前面已经说了,可以通过 6in4 隧道解决没有 ISP 支持的问题,但是在这个场景,我们也必须面临没有不支持 IPv6 的路由器,这导致不能创建隧道。对应的解决方案是添加一个机支持 IPv4 又支持 IPv6 的路由器,然后创建一个从这个路由器到 IPv4 因特网中某处隧道终点路由器的 6in4 隧道。
在这种场景中,新增了一个路由器 R3。R3 用于创建一个朝向隧道终点路由去的 6in4 隧道,同时也用于给我们的网络提供 IPv6 网关服务 —— 发送 RA 到 LAN1 中的 IPv6 自动配置设备。封装/解封装处理过程与前面的场景完全一样。这里主要的不同点是 6in4 隧道需要一个公用的 IPv4 地址,因此R3除了需要 IPv6 地址外还需要一个公共 IPv4 地址。如果该路由器被连接到支持 ISP 的网络中,这是很容易办到的。但是在我们的网络中,我们通常只有使用 NAT 的私有地址。
上面描述的场景都基于一个比较好的基础架构 —— 至少 2 个路由器和 2 个局域网。这三种场景都可以被简化为下图中只有一个路由器的场景。
需要注意到,这与先前的情形一样,缺乏支持 IPv6 的 ISP 和路由器(或者后者可以用一个支持 IPv6 的路由器代替)。
最后的案例是最常见的,因为 IoT 和无线传感器网络不能被部署到任何地方(包括一些通过无线技术连接的远程网络)。在这种情形下,设备数量、电源消耗都受到严重的限制。例如,一个传感器的云可能被部署到乡村,用于检测温度和湿度,而这些所有的传感器仅仅通过一个使用 IPv6 移动手机网络(GRPR,3G 或者 LTE)的路由器连接到一起。