在 【得捷电子Follow me第4期】基础任务一:静态IP配置、Ping、抓包分析 中,分享了在 W5500_Evb_Pico上的基础网络配置、域名解析、Ping,以及报文分析的步骤。
在网络应用中,IP地址是一个非常重要的信息。
在互联网中,我们可以使用域名访问网站,而不同记住对应的IP。要知道,互联网早期有很多服务,是需要记住IP的。
而在局域网中,可以通过mDNS服务,来让电脑、设备或者开发板,通过局域网名称,向局域网发布自身IP地址,这样子,不管IP怎么变,通过这个特定的名称,就能够访问开发板的网络服务了。
下面,就分享具体的使用步骤。
一、MDNS协议介绍
【网络介绍】mDNS multicast DNS , 使用5353端口,组播地址 224.0.0.251。在一个没有常规DNS服务器的小型网络内,可以使用mDNS来实现类似DNS的编程接口、包格式和操作语义。MDNS协议的报文与DNS的报文结构相同,但有些字段对于MDNS来说有新的含义。
每个进入局域网的主机,如果开启了mDNS服务的话,都会向局域网内的所有主机组播一个消息,我是谁,和我的IP地址是多少。然后其他也有该服务的主机就会响应,也会告诉你,它是谁,它的IP地址是多少。mDNS的域名与普通DNS的域名是通过后缀.local区分开来的。如果一台终端需要访问一个mDNS域名,他就会向局域网内发送组播,询问该域名的IP是多少。
二、安装mDNS支持库
在Arduino IDE中,安装ArduinoMDNS扩展库即可:
三、mDNS服务启用
要启用mDNS服务,在之前完成网络配置的基础上,添加如下的代码即可:
// mDNS
#include <EthernetUdp.h>
#include <ArduinoMDNS.h>
// mDNS
EthernetUDP udp;
MDNS mdns(udp);
void setup() {
// 修改原有的网卡初始化
Ethernet.begin(mac);
// 在联网成功以后,添加如下的代码
// 开启mDNS服务
Serial.println("mdns Begin");
mdns.begin(Ethernet.localIP(), "arduino_pico");
Serial.println("addServiceRecord");
}
void loop() {
// mDNS运行检查
mdns.run();
}
在上述代码中,使用 mDNS名称arduino_pico,来向局域网发布自身的IP。
编译下载后,运行结果如下:
四、局域网访问
在局域网的其他电脑上,现在就可以使用 mDNS名称来进行访问了。
在代码中,使用 mDNS名称arduino_pico,来向局域网发布自身的IP,那么,使用 arduino_pico.local 来访问即可。
现在要ping开发板,可以用如下的命令:
ping arduino_pico.local
五、总结
mDNS是一个在局域网环境中,非常有用的服务。
在苹果的设备上(Mac、macbook、iphone、ipad等设备)都提供了这个服务。
很多Linux设备也提供这个服务。
Windows的设备默认可能没有提供,但是如果安装了iTunes之类的软件的话,也提供了这个服务。
通过mDNS服务,就可以利用这个服务,在局域网内进行交互,就要方便很多了。
在后续的分享中,还会分享如何使用mDNS发布WWW服务。