mDNS知识
1.域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。
2.多播DNS ( mDNS )协议将主机名解析为不包含本地名称服务器的小型网络中的IP地址。 它是一种零配置服务,使用与单播域名系统 (DNS)基本相同的编程接口,数据包格式和操作语义。它的作用是在没有 DNS 的环境当中让相同网段里的设备互相通信。
3.mDNS 是一种组播 UDP 服务,用来提供本地网络服务和主机发现。mDNS 提供了浏览服务和解析主机 IP/IPv6 地址的方法。
4.mDNS属性
- hostname:设备会去响应的主机名,如果没有设置,会根据设备的网络接口名定义 hostname 。例如,my-esp32 会被解析为 my-esp32.local。
- default_instance:默认实例名(即易记的设备名),例如 Jhon's ESP32 Thing。如果没有设置,将会使用 hostname。
5.mDNS服务:mDNS 可以广播设备能够提供的网络服务的相关信息,每个服务会由以下属性构成。
- instance_name:实例名(即易记的服务名),例如 Jhon's ESP32 Web Server。如果没有定义,会使用 default_instance。
- service_type:(必需)服务类型,以下划线为前缀。
- proto:(必需)服务运行所依赖的协议,以下划线为前缀,例如 _tcp 或者 _udp。
- port:(必需)服务运行所用的端口号。
- txt:形如 {var, val} 的字符串数组,用于定义服务的属性。
6.工作原理:
- 在 IP 协议里规定了一些保留地址,其中有一个是 224.0.0.251,对应的 IPv6 地址是 [FF02::FB]。mDNS 协议规定了一个端口,5353。mDNS 基于 UDP 协议。
- 每个进入局域网的主机,如果开启了mDNS服务的话,都会向局域网内的所有主机组播一个消息,我是谁,和我的IP地址是多少。然后其他也有该服务的主机就会响应,也会告诉你,它是谁,它的IP地址是多少。当然,具体实现要比这个复杂点。
- 比如,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 地址和端口号了。