什么是mDNS

https://www.logcg.com/archives/972.html

它的作用是在没有 DNS 的环境当中让相同网段里的设备互相通信

https://esp-idf-zh.readthedocs.io/zh_CN/latest/api-reference/protocols/mdns.html

  • mDNS属性
  1. 主机名(hostname): 设备将要相应的主机名
  2. 默认实例(default_instance): 设备的友好名字
  • mDNS 服务
    mDNS 可以广播你的设备所提供给的网络服务
  1. 服务(service): 所需的服务类型,使用下划线作为前缀。一些通过类型可以在 这里 找到。
  2. 协议(proto): 服务运行所需的协议,以下划线作为前缀,例如: _tcp 或者 _udp 。
  3. 端口(port): 服务运行所需的端口。
  4. 实例(instance): 服务的友好名字,例如 Jhon’s ESP32 Web Server。如果未定义,则使用 默认实例。
  5. 文本(txt): var=val 类型的字符串数组,用于为你的服务定义属性。
  • mDNS 查询
    mDNS 提供了浏览服务和解析主机 IP/IPv6 地址的方法
    结果用过一个链表对象 mdns_result_t 返回。如果结果是来自主机查询,则只包含 addr 和 addrv6(如果找到)。

  • mDNS工作原理
    首先,在 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 地址和端口号了。

http://pjack1981.blogspot.com/2012/07/avahi.html
Avahi 是一個在內網內, 用來廣播自己是什麼服務以及用來尋找那些服務的一個工具, 有點像是在一個社區內有個廣播系統, 大家利用他就可以找到郵局在那裡, 醫院在那裡, 而不必事先知道郵局或醫院的名字. 據了解 avahi 是利用 multicast 來做到這件事,安裝上要細分的話可以分成 server 以及 client.

在使用 avahi 要注意的一點就是他為了要降低 loading, 所以更新的速度並不是很快, 一般他都是直接從 cache 裡面抓資料給你, 所以有時你會發現有的服務不存在了, 但從 avahi-browse 還是會看到它, 所以拿到資料後, 你還是要處理有可能服務已經不存在的情況. 不過如果有新的服務加進來, 因為是主動 broadcast, 所以你一定會接到更新.

你可能感兴趣的:(基础)