mdns
(即多播dns
,Multicast DNS
)主要实现了在没有传统DNS
服务器的情况下使局域网内的主机实现相互发现和通信,使用的端口为5353
,遵从dns
协议,使用现有的DNS
信息结构、语法和资源记录类型,并且没有指定新的操作代码或响应代码。
在局域网中,设备和设备之前相互通信需要知道对方的ip
地址等信息,大多数情况,设备的ip
不是静态的,而是通过dhcp
协议动态分配的,如何发现设备彼此间的服务呢?现在物联网设备和app
之间的通信,要么通过广播,要么通过组播,发一些特定信息,感兴趣的设备应答,实现局域网设备的发现,当然mdns
比这强大的多。
mdns
使用组播地址为224.0.0.251
(ipv6
:FF02::FB
),端口为5353
。mdns
是用于局域网内部的,并且主机的域名以.local
结尾,每个进入局域网的主机,如果开启了mDNS
服务的话,都会向局域网内的所有主机组播一个消息——我是谁(域名)和IP
地址是多少。然后其它有mdns
服务的主机就会响应,也会告诉你——它是谁(域名)和IP
地址是多少。当然设备需要服务时,就是使用mdns
查询域名对对应的ip
地址,对应的设备收到该报文后同样通过组播方式应答,此时其它主机设备也是可以收到该应答报文,其它主机也会记录域名和ip
以及ttl
等,更新缓存。
比如,A
主机进入局域网,开启了mDNS
服务,并向mDNS
服务注册以下信息:提供FTP
服务,IP
是192.168.1.101
,端口是21
。当B
主机进入局域网,并向B
主机的mDNS
服务请求,要找局域网内FTP
服务器,B
主机的mDNS
就会去局域网内向其它的mDNS
询问,并且最终告诉你,有一个IP
地址为192.168.1.101
,端口号是21
的主机,也就是A
主机提供 FTP
服务,所以B
主机就知道了A
主机的IP
地址和端口号了。