zeroconf与mDNS
[toc]
基础概念
路由
路由中有以下几种形式
单播:在网络地址和网络节点之间存在一一对应的关系。
任播:根据路由拓扑自动决定送到“最近”或“最好”的目的地
多播:是一种群组通信,它把信息同时传递给一组目的计算机。常指IP多播,组播地址224.0.0.0~224.0.0.255
广播:向指定网络范围内所以设备发送信息,主机标识段host ID 为全1 的IP 地址为广播地址,ARP、DHCP都使用了广播
地域性广播:一种“特殊”的多播
DNS
Domain Name System,域名服务,将域名和ip地址互相影射的分布式数据库,使用TCP和UDP的53端口
TCP:面向连接的协议,提供可靠的数据传输,一般服务质量要求比较高的情况,使用这个协议。
UDP:用户数据报协议,是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
zeroConf
Zero configuration networking,零配置网络服务规范是一种让用户武穴使用DHCP、DNS等设置就能自动连接设备的一种规范,主要包含以下协议
- Link-Local Address: 无需利用DHCP Server 取得设备地址和IP的相关资料 【RFC3927】
- Multicast Dns: 不需要DNS Server 就可以解决domain 和ip的绑定关系 【RFC6762】
- DNS-SD(dns-based service discovery): 不需要目录服务器,就可以自动发现设备服务 【RFC6763】
mDNS
原理和特点
Multicast DNS (mDNS),多播DNS,使用5353端口,组播地址为 224.0.0.251
或 [FF02::FB]
。在一个没有常规DNS服务器的小型网络内可以使用mDNS来实现类似DNS的编程接口、包格式和操作语义,mdns协议使用DNS协议一样的数据包
若主机开启了mDNS,在进入局域网内时会向224.0.0.251地址发送信息,信息内容包含,ip地址端口号,服务名等;
同时其mDNS服务会向其它mDNS询问获取局域网内的服务。
mDNS的顶级域名用 .local
和普通域名区分开的.
DNS-SD
DNS Service Discovery是一种基于 DNS 协议的服务发现协议,设备之间可以通过该协议自动发现服务
使用如下格式
<instance>.<service>.<transport>.<domain>
流程
启动DNS-SD的主机在进入局域网后或启动DNS-SD后会向组播地址发送组播消息,包括主机名、IP信息等,其他拥有相应服务的主机会响应
关闭DNS-SD的主机在关闭DNS-SD后会向组播地址刷新组播消息,清除信息
技术应用
avahi、bonjour、WiSe-Zeroconf是zeroconf协议的常用实现
在苹果家族中常使用Bonjour、linux中常用avahi、在嵌入式领域常用WiSe-Zeroconf
小玩具
安装&下载:rocket:
使用golang的zeroconf
包进行简单封装的玩具
server端:amd64-linux amd64-mac amd64-win
client端:amd64-linux amd64-mac amd64-win
演示
AVAHI
安装
1 | yum install nss-mDNS avahi avahi-tools -y |
avahi-tools是avahi的工具包,包含avahi-browse、avahi-publish-address 、 avahi-resolve-host-nameavahi-browse-domains、avahi-publish-service、avahi-set-host-name、avahi-daemon、avahi-resolve、avahi-publish、avahi-resolve-address
常用的avahi-browse的功能如下
1 | -D --browse-domains 浏览域而不是服务 |
添加服务
创建文件 /etc/avahi/services/wltHello.service
1 | <?xml version="1.0" standalone='no'?> |
重启服务
1 | systemctl restart dbus |
查询服务
1 | [root@localhost ~]# avahi-browse -vrtp _wlt@*Hello._tcp |
通过avahi-browse即可在局域网内通过avahi-browse发现服务
在实际生产中,我们可以在开启服务时同时添加mDNS服务,消费者机器通过avahi-browse查询服务得到开启服务的ip地址,再进一步与服务建立链接。除此之外avahi还暴露了一些api:https://www.avahi.org/doxygen/v0.7/html/index.html