mDNS协议

mDNS 的工作原理


首先,在 IP 协议里规定了一些保留地址,其中有一个是 224.0.0.251,对应的 IPv6 地址是 [FF02::FB]。

mDNS 协议规定了端口为 5353,而 DNS 的端口是 53。

mDNS 基于 UDP 协议。DNS 一般也是基于 UDP 协议的,但是也可以使用 TCP 协议。

如果理解了 DNS 协议,再去理解 mDNS 协议就很简单了,区别只是 mDNS 一般作用在一个局域网内的,有特定的 IP 地址,也就是 224.0.0.251,有特定的端口 5353,mDNS 的作用是实现局域网内的服务发现,查询,注册,DNS 作用是实现域名的解析,作用大概是一样的。

每个进入局域网的主机,如果开启了 mDNS 服务的话,都会向局域网内的所有主机组播一个消息,我是谁,和我的IP地址是多少。然后其他也有该服务的主机就会响应,也会告诉你,它是谁,它的 IP 地址是多少。当然,具体实现要比这个复杂点。

比如,A 主机进入局域网,开启了 mDNS 服务,并向 mDNS 服务注册以下信息:我提供 FTP 服务,我的 IP 是 192.168.1.101,端口是 21。当 B 主机进入局域网,并向 B 主机的 mDNS 服务请求,我要找局域网内 FTP 服务器,B主机的 mDNS 就会去局域网内向其他的 mDNS 询问,并且最终告诉你,有一个IP地址为 192.168.1.101,端口号是 21 的主机,也就是 A 主机提供 FTP 服务,所以 B 主机就知道了 A 主机的 IP 地址和端口号了。

大概的原理就是这样子,mDNS 提供的服务要远远多于这个,当然服务多但并不复杂。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Android NSD框架实现mDNS协议的示例代码,该代码可以用于在Android设备上发现其他支持mDNS的设备和服务: ```java // 初始化NsdManager NsdManager nsdManager = (NsdManager) getSystemService(Context.NSD_SERVICE); // 创建一个NsdManager.DiscoveryListener,用于处理发现事件 NsdManager.DiscoveryListener discoveryListener = new NsdManager.DiscoveryListener() { @Override public void onStartDiscoveryFailed(String serviceType, int errorCode) { // 发现服务失败 } @Override public void onStopDiscoveryFailed(String serviceType, int errorCode) { // 停止发现服务失败 } @Override public void onDiscoveryStarted(String serviceType) { // 开始发现服务 } @Override public void onDiscoveryStopped(String serviceType) { // 停止发现服务 } @Override public void onServiceFound(NsdServiceInfo serviceInfo) { // 找到服务 } @Override public void onServiceLost(NsdServiceInfo serviceInfo) { // 服务丢失 } }; // 开始发现服务 nsdManager.discoverServices("_http._tcp", NsdManager.PROTOCOL_DNS_SD, discoveryListener); // 停止发现服务 nsdManager.stopServiceDiscovery(discoveryListener); ``` 在上面的示例代码中,我们首先通过调用`getSystemService()`方法获得了一个NsdManager实例,然后创建了一个NsdManager.DiscoveryListener对象来处理发现事件。接着,我们调用`discoverServices()`方法开始发现支持mDNS协议的服务,该方法传入了一个服务类型字符串和一个协议类型常量。最后,我们可以通过调用`stopServiceDiscovery()`方法停止发现服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值