[经验分享] 【得捷电子Follow me第4期】基础任务一加餐:使用mDNS服务向局域网发布自身IP地址

HonestQiao   2024-1-14 21:05 楼主

在 【得捷电子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扩展库即可:

image.png  

 

三、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。

 

编译下载后,运行结果如下:

image.png  

四、局域网访问

在局域网的其他电脑上,现在就可以使用 mDNS名称来进行访问了。

在代码中,使用 mDNS名称arduino_pico,来向局域网发布自身的IP,那么,使用 arduino_pico.local 来访问即可。

现在要ping开发板,可以用如下的命令:

ping arduino_pico.local

image.png  

 

五、总结

mDNS是一个在局域网环境中,非常有用的服务。

在苹果的设备上(Mac、macbook、iphone、ipad等设备)都提供了这个服务。

很多Linux设备也提供这个服务。

Windows的设备默认可能没有提供,但是如果安装了iTunes之类的软件的话,也提供了这个服务。

通过mDNS服务,就可以利用这个服务,在局域网内进行交互,就要方便很多了。

在后续的分享中,还会分享如何使用mDNS发布WWW服务。

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复