局域网设备发现——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连接,后面的内容实现起来就是常规操作了

 

调试工具

 

文档

上一篇:使用MDNS进行局域网服务发现(.NET Core)


下一篇:LLMNR(链路本地多播名称解析)Java响应器