mDNS / DNS-SD
2020-05-07 本文已影响0人
小石头成长记
mDNS / DNS-SD由RFC 6762 和 6763 定义
[1] http://tools.ietf.org/html/rfc6762
[2] http://tools.ietf.org/html/rfc6763
有多个版本的实现
- avahi – Linux implementation (http://www.avahi.org/)
- jmDNS – Java implementation (http://jmdns.sourceforge.net/)
- Bonjour – MAC OS (installed by default)
- Bonjour – Windows (https://support.apple.com/kb/DL999?locale=en_US)
说明:
本文通过avahi试验了局域网服务注册,发现,服务离线的过程。
试验在两台linux虚拟机上进行,共IP分别为。
1、192.168.182.147
2、192.168.182.148
1. avahi install
sudo apt-get install avahi-deamon
sudo apt-get install avahi-utils
avahi-deamon为核心处理程序,在系统后台运行。
2.注册服务
格式:
avahi-publish-service SERVICE-NAME _APPLICATIONPROTOCOL._TRANPOSRT-PROTOCOL PORT “DESCRIPTION” --sub SUBPROTOCOL
在192.168.182.147终端运行:
avahi-publish-service light _coap._udp 5683 “/mylight” --sub
_floor1._sub._coap._udp
在192.168.182.148终端运行相同命令:
avahi-publish-service light _coap._udp 5683 “/mylight” --sub
_floor1._sub._coap._udp
由于SERVICE-NAME与192.168.182.147冲突,所以进行了重命名:

3.服务发现
在任一台虚拟机输入
avahi-browse -rp _floor1._sub._coap._udp
或
avahi-browse -rp _coap._udp
会得到以下信息,包括两台机器的light服务

4.服务离线
在192.168.182.148终端终止avahi-publish-service。
在服务发现终端页会得到以下输出:

设备/服务发现是物联网设备/服务互操作的重要操作环节。
HomeKit等知名系统采用了该方案。
在局域网环境有分布式操作需求时,可能也需要采用类似方案。
5.开发移植
avahi是开源的,c语言实现。可以在以下链接下载并编译。
http://www.linuxfromscratch.org/blfs/view/svn/basicnet/avahi.html
在工程目录../example 下有publish 和 browser的demo实现。