mDNS / DNS-SD由RFC 6762 和 6763 定義
[1] http://tools.ietf.org/html/rfc6762
[2] http://tools.ietf.org/html/rfc6763
有多個(gè)版本的實(shí)現(xiàn)
- 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試驗(yàn)了局域網(wǎng)服務(wù)注冊(cè),發(fā)現(xiàn),服務(wù)離線的過程。
試驗(yàn)在兩臺(tái)linux虛擬機(jī)上進(jìn)行,共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為核心處理程序,在系統(tǒng)后臺(tái)運(yùn)行。
2.注冊(cè)服務(wù)
格式:
avahi-publish-service SERVICE-NAME _APPLICATIONPROTOCOL._TRANPOSRT-PROTOCOL PORT “DESCRIPTION” --sub SUBPROTOCOL
在192.168.182.147終端運(yùn)行:
avahi-publish-service light _coap._udp 5683 “/mylight” --sub
_floor1._sub._coap._udp
在192.168.182.148終端運(yùn)行相同命令:
avahi-publish-service light _coap._udp 5683 “/mylight” --sub
_floor1._sub._coap._udp
由于SERVICE-NAME與192.168.182.147沖突,所以進(jìn)行了重命名:

3.服務(wù)發(fā)現(xiàn)
在任一臺(tái)虛擬機(jī)輸入
avahi-browse -rp _floor1._sub._coap._udp
或
avahi-browse -rp _coap._udp
會(huì)得到以下信息,包括兩臺(tái)機(jī)器的light服務(wù)

4.服務(wù)離線
在192.168.182.148終端終止avahi-publish-service。
在服務(wù)發(fā)現(xiàn)終端頁會(huì)得到以下輸出:

設(shè)備/服務(wù)發(fā)現(xiàn)是物聯(lián)網(wǎng)設(shè)備/服務(wù)互操作的重要操作環(huán)節(jié)。
HomeKit等知名系統(tǒng)采用了該方案。
在局域網(wǎng)環(huán)境有分布式操作需求時(shí),可能也需要采用類似方案。
5.開發(fā)移植
avahi是開源的,c語言實(shí)現(xiàn)。可以在以下鏈接下載并編譯。
http://www.linuxfromscratch.org/blfs/view/svn/basicnet/avahi.html
在工程目錄../example 下有publish 和 browser的demo實(shí)現(xiàn)。