局域网设备发现——mDNS协议
作者:互联网
背景
在一次小程序开发需求中,需要开发投影仪设备遥控功能。为了提升用户的体验需要实现手机与投影仪设备之间的近场发现(类似于局域网之间的设备进行WIFI配对)。最初选型为局域网内的设备发现,后根据小程序文档得知 iOS 微信客户端 7.0.18 及以上版本无法使用 mDNS 相关接口,安卓版本不受影响。所以将使用蓝牙功能来补充局域网设备发现的部分缺陷。本篇幅不介绍蓝牙相关的能力开发。
介绍
通常我们做网络之间的通讯无论是 TCP、UDP或者是 HTTP等协议我们都需要知道对等方的 IP地址(域名)和端口号。但是在局域网环境下一般来说设备的IP地址都是由 DHCP进行动态分配,不能保证同一设备在同一局域网段内的 IP地址每次都相同。此时如果一台主机在局域网内建立了网络服务,作为客户端是无法得知服务的 IP地址的,也就无法建立网络通讯,此时我们就需要用到 mDNS协议。
mDNS
-
mDNS 基于 UDP 协议。
-
mDNS 一般作用在一个局域网内的,有特定的 IP 地址,也就是 224.0.0.251,有特定的端口 5353。
-
mDNS 的作用是实现局域网内的服务发现,查询,注册
每个进入局域网的主机,如果开启了 mDNS 服务的话,都会向局域网内的所有主机组播一个消息,核心内容是:我是谁,和我的IP地址是多少。
举个例子:
A 主机进入局域网,开启了 mDNS 服务,并向 mDNS 服务注册以下信息:我提供 TCP 服务,我的 IP 是 192.168.1.101,端口是 9504。当 B 主机进入局域网,并向 B 主机的 mDNS 服务请求,我要找局域网内 TCP 服务器,B主机的 mDNS 就会去局域网内向其他的 mDNS 询问,并且最终告诉你,有一个IP地址为 192.168.1.101,端口号是 9504 的主机,也就是 A 主机提供 TCP 服务,所以 B 主机就知道了 A 主机的 IP 地址和端口号了。
上述这些就能对近场设备发现功能的实现提供一些思路,我们只需要让投影仪设备在 mDNS服务上注册一条提供 TCP服务的信息,此时手机端小程序调用mDNS接口发现投影仪设备给出的信息,再建立小程序与投影仪之间的 TCP连接,后面的内容实现起来就是常规操作了
调试工具
-
avahi:Linux下实现(http://www.avahi.org/)
-
jmDNS:JAVA实现(http://jmdns.sourceforge.net/)
-
Bonjour:MAC OS实现(默认安装)和 Windows下实现(需要安装Bonjour Print Services)
文档
-
avahi操作方法:https://blog.csdn.net/baidu_26678247/article/details/117934516
-
Bonjour Windows下操作方法:首先安装完成 Bonjour Print Services后即可在命令行中使用 dns-sd命令,后续操作文档:https://docs.oracle.com/cd/E56344_01/html/E54077/dns-sd-1m.html
标签:协议,mDNS,主机,TCP,局域网,IP地址,设备 来源: https://www.cnblogs.com/Taurus12C/p/mDNS.html