组播DNS (mDNS)

在上一节教程中我向您介绍了如何使用NodeMCU连接WiFi。当NodeMCU成功联网后,它会拥有一个IP地址。但是这个IP地址是一串数字,很难记忆和使用。有没有更好的方法来代替NodeMCU的IP地址。这就好像我们为NodeMCU的IP地址起一个“外号”,每次需要通过网络来访问NodeMCU的时候都可以用这个“外号”而不再使用IP地址了。

这就引出了我这节课要给您介绍的新概念————mDNS(Multicast Domain Name System)。

在之前的章节中,我曾给您介绍过DNS的概念。这里我们将要介绍的mDNS比DNS多了一个小m作为前缀。那么这两者之间是否有什么关联呢?

DNS通常用于互联网范围。但由于大部分的局域网环境缺少DNS服务器,所以我们无法在局域网环境里使用DNS服务。因此我们这一节课的主角mDNS就要派上大用场了。

mDNS的网址一般由两部分组成。如 esp8s66.local、 taichimaker.local、 taichi-maker.local、 my-iot-device.local。

从以上mDNS网址不难看出,它们都使用local作为网址的结尾。当我们在使用电脑发送网络请求时,电脑一旦看到local作为结尾的网址就会知道这个网址不在互联网中而在电脑所处的局域网里面。因此电脑将不会向互联网发送请求而是向局域网内的所有设备发送mDNS请求。

另外,mDNS网址的前半部分就是局域网中各个设备的独立标识了。比如前面举例中的esp8266、 taichimaker、 taichi-maker、 my-iot-device。

为了更好的让您理解mDNS是如何工作的,我们来假设在一个局域网中有很多台设备。在这些设备中有一台是我们使用的电脑,另一台设备是预先设置好mDNS服务的ESP8266-NodeMCU。我们在为NodeMCU设置mDNS服务时为它定义的mDNS设备标识是“taichi-maker”。那么这个NodeMCU的mDNS网址就是taichi-maker.local了。

做好了以上这些工作以后,当我们通过电脑访问taichi-make.local网址时,电脑都会向局域网的所有设备发送mDNS请求。局域网中的设备里可能有一些根本就没有预先设置好mDNS服务。这些没有mDNS服务的设备对于电脑的请求会完全忽略。另外那些预先设置好mDNS服务的设备在接收到电脑的请求后就会提起精神了,它们会查查电脑的mDNS请求中设备标识部分和自己的设备标识是否一致。如果不一致,这些设备也就同样会忽略电脑请求。不过有一个设备在收到电脑的mDNS请求时会特别的兴奋,它就是设备标识为“taichi-maker”的ESP8266-NodeMCU。它知道电脑在找的就是它,于是它会向电脑发送一个答复。这个答复里面就包含它自己的IP地址。当电脑收到了来自NodeMCu的答复后,也就知道了taichi-maker.local这个网址所对应的IP地址信息,接下来电脑就可以用这个IP地址信息与NodeMCU进行网络通讯了。

以下示例程序可以让NodeMCU实现mDNS服务,这样我们想要与NodeMCU进行网络通讯时就不用总是记住它的IP地址,而只要使用NodeMCU的mDNS网址就可以了。