IoT 物联网时代,如何优化你的网络 - DNS 域名解析服务——设备接入类
IoT 物联网时代,如何优化你的网络- DNS 域名解析服务
1.域名解析服务
设备以访问指定域名和端口方式接入 IoT 物联网平台时,遇到的第一个问题就是接入服务器域名的 DNS 解析。域名(Domain Name),是由一串用点分隔的名字组成的互联网上某台计算机或某组计算机的标识,它的目的是为了方便人们更简单便捷地访问互联网上的服务。在实际的系统实现中,域名通过 DNS(Domain Name System)系统转化为服务器的 IP 地址,以方便机器通过 IP 进行寻址和通信。上述行为,我们称之为域名解析(Domain Name System)。
递归查询
递归查询时如果客户端所询问的本地域名服务器不知道被查询的域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他顶级域名服务器继续发出查询,直到查询到结果后,再层层传递回来。

迭代查询
迭代查询时如果客户端所询问的本地域名服务器不知道被查询的域名的 IP 地址,那么会告知下一级域名服务器的列表,供客户端询问。

实际场景
实际上,在 DNS 查询过程中,本地 DNS 服务器会代理客户端做迭代查询。但本地 DNS 没有域名解析结果的决定权,仅仅代理了用户向权威 DNS 获取域名解析结果的过程。本地 DNS 上有缓存模块,当目标域名存在缓存解析结果并且 TTL 未过期时,本地 DNS 会返回缓存结果,否则,本地 DNS 会一级一级地迭代查询各个层级域名的权威 DNS 直至获取最终完整域名的解析结果。同时客户端也会根据 TTL 值做缓存的机制,这样可以减少查询的次数,加快域名解析过程。

我们以访问 pk.iot-as-mqtt.cn-shanghai.aliyuncs.com 为例,一次完整的域名解析流程包括:
2.DNS 域名解析实验
2.1 DNS 域名解析
如果你要访问域名 pk.iot-as-mqtt.cn-shanghai.aliyuncs.com,首先要通过 DNS 查出它的 IP 地址是 139.196.135.135。
我们可以使用 dig 命令来查看域名对应的 IP 列表,具体如下:

上图展示了当前 mac 电脑从本地 DNS 服务器获取到域名的 IP 列表,TTL 值(Time to live)是 18s。
2.2 DNS 解析完整过程
DNS 服务器根据域名的层级进行分级查询,就是从根域名开始,依次查询每一级域名的 NS 记录,直到查到最终的 IP 地址,过程大致如下:
其中,每一级域名都有自己的 NS 记录,NS 记录指向该级域名的域名服务器。这些服务器知道下一级域名的各种记录。
我们通过 dig +trace 能了解完整解析过程,具体如下:

上图展示了 DNS 完整过程,
3.物联网场景 DNS 解析
3.1 域名解析潜在问题
当我们了解 DNS 域名解析服务完整过程后,会发现传统域名解析存在以下问题:
域名劫持
域名劫持一直是困扰许多开发者的问题之一,其表现即域名 A 应该返回的 DNS 解析结果 IP1 被恶意替换为了 IP2,导致 A 的访问失败或访问了一个不安全的站点。
调度不精准
除了域名劫持问题,基于传统 Local DNS 的域名解析还会带来域名调度精准性的问题。对于类似 CDN 域名访问这类需要按地域、运营商进行智能解析调度的场景,精准调度的诉求是十分强烈的。
解析生效滞后
部分业务场景下开发者对域名解析结果变更的生效时间非常敏感(这部分变更操作是开发者在权威 DNS 上完成的),比如当业务服务器受到攻击时,我们需要最快速地将业务 IP 切换到另一组集群上,这样的诉求在传统域名解析体系下是无法完成的。
延迟大
DNS 首次查询或缓存过期后的查询,需要递归遍历多个 DNS 服务器以获取最终的解析结果,这增加了网络请求的前置延时时间。特别是在移动互联网场景下,移动网络质量参差不齐,弱网环境的 RTT 时间可能高达数百毫秒,对于一次普通的业务请求而言,上述延时是非常沉重的负担。另一方面,弱网环境下的解析超时、解析失败等现象屡见不鲜,如何合理优化 DNS 解析对于整体网络访问质量的提升至关重要。
3.2 阿里云 HTTPDNS 服务
阿里云 HTTPDNS 服务正在这样的背景下应运而生,为我们提供一个更安全、稳定、高效的递归 DNS 服务代理了域名解析的过程。
HTTPDNS 使用 HTTP 协议进行域名解析,代替现有基于 UDP 的 DNS 协议,域名解析请求直接发送到 HTTPDNS 服务端,从而绕过运营商的本地 DNS,将终端用户的 IP 信息直接交付给权威 DNS,避免本地 DNS 的坐标干扰,用户在权威 DNS 变更的解析结果将快速同步给 HTTPDNS,覆盖原有的缓存记录,帮助用户实现秒级的域名解析切换。
3.3 物联网场景 DNS 实战
但我们在 IoT 物联网平台控制台创建产品后,会生成对应设备接入指定域名,参考下图:

接下来我们要在 HTTPDNS 的控制台,添加 IoT 物联网设备的接入域名解析服务,参考下图:

然后,通过直接访问 HTTPDNS 的 IP 获取设备接入域名的 IP 列表,参考下图:

最后,IoT 设备就可以直接访问 IP 列表中的一个 IP,建立与 IoT 物联网平台的 MQTT 长连接通道。
物联网平台产品介绍详情:https://www.aliyun.com/product/iot/iot_instc_public_cn

阿里云物联网平台客户交流群
评论