开发者社区> 桃子红了呐> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

mDNS原理的简单理解——每个进入局域网的主机,如果开启了mDNS服务的话,都会向局域网内的所有主机组播一个消息,我是谁,和我的IP地址是多少。然后其他也有该服务的主机就会响应,也会告诉你,它是谁,它的IP地址是多少

简介:
+关注继续查看

MDNS协议介绍

mDNS multicast DNS , 使用5353端口,组播地址 224.0.0.251。在一个没有常规DNS服务器的小型网络内,可以使用mDNS来实现类似DNS的编程接口、包格式和操作语义。MDNS协议的报文与DNS的报文结构相同,但有些字段对于MDNS来说有新的含义。

每个进入局域网的主机,如果开启了mDNS服务的话,都会向局域网内的所有主机组播一个消息,我是谁,和我的IP地址是多少。然后其他也有该服务的主机就会响应,也会告诉你,它是谁,它的IP地址是多少。mDNS的域名与普通DNS的域名是通过后缀.local区分开来的。如果一台终端需要访问一个mDNS域名,他就会向局域网内发送组播,询问该域名的IP是多少。

例如: 

一个设备接入网络,首先查询名称是否冲突,并通告当前服务器信息

冲突检测结束后,发送MDNS通告,通知其它设备更新DNS缓存

其它设备对该域名访问时,会发起MDNS查询

 

mDNS原理的简单理解

转载自:http://www.binkery.com/

在局域网内,你要通过一台主机和其他主机进行通信,你需要知道对方的 ip 地址,但是有些时候,你并不知道对方的 ip 地址,因为一般使用 DHCP 动态分配 ip 地址的局域网内,各个主机的 IP 地址是由 DHCP 服务器来帮你分配 IP 地址的。所以在很多情况下,你要知道对方的 IP 地址是比较麻烦的。

鉴于发现这篇文章最近的浏览量比较多,晚上也有不少转载,特别声明一下,文章水平可能不大够,只是我当时的一些理解,所以希望大家以批判的角度来看,然后又什么问题欢迎讨论。真心不希望误导大家^_^

mDNS 的工作原理

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

mDNS 协议规定了一个端口,5353。

mDNS 基于 UDP 协议。

每个进入局域网的主机,如果开启了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提供的服务要远远多于这个,当然服务多但并不复杂。

在Apple 的设备上(电脑,笔记本,iphone,ipad等设备)都提供了这个服务。很多Linux设备也提供这个服务。Windows的设备可能没有提供,但是如果安装了iTunes之类的软件的话,也提供了这个服务。

这样就可以利用这个服务开发一些局域网内的自动发现,然后提供一些局域网内交互的应用了。

jmDNS 是一个 JAVA 平台的,提供 mDNS 服务的第三方库。在这个 jar 包引入到 Android 项目里,就可以获得 mDNS 服务了。Android 在 3.x 还是 4.x 之后已经提供局域网内自动发现的 API 了,所以不需要使用 jmDNS 第三方库就能实现了。















本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/7567029.html,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
VUE系列 ---- 网络模块axios(一 )
​ 目录   一、选择什么网络模块? ★传统的Ajax是基于XMLHttpRequest(XHR)      ☆自己封装的话比较麻烦,可能存在很多bug ★Jquery-Ajax是Jquery的一部分      ☆整个Vue是没有使用到Jquery的      ☆为了网络请求而去引入Jquery是不合理的      ☆Jquery的体积和Vuejs差不多 二、为什么选择axios  ☆在浏览器中发送XMLHttpRequest请求      ☆在node.js中发送http请求       ☆支持Promise API        ☆拦截请求和响应         
31 0
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(3)
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(3)
29 0
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(2)
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(2)
18 0
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(1)
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(1)
29 0
纳税服务系统七(投诉管理模块)【显示投诉信息、处理回复、我要投诉、Quartz自动受理、统计图FusionCharts】(四)
接下来,就是来开发我们的投诉受理管理模块了…..我们来看看原型图与需求吧
51 0
LeetCode 304 Range Sum Query 2D - Immutable(范围求和2D - 不可变)
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/51783388 翻译 给定一个2D矩阵matrix,找出其中以左上角(row1,col1)和右下角(row2,col2)定义的矩形边界的元素的和。
760 0
SDK窗口中增加菜单 以及 对菜单做出相应的消息响应
  对于用MFC写程序的人来说会觉得菜单很简单 直接用 APP wizard生成就行了  消息处理也是 由MFC来完成 实际上根本不知道  菜单的原理 下面就介绍下如何在 SDK写的程序中添加菜单      我所使用的环境是 VC6.
657 0
[转]AJAXCDR:利用 Flash 完美解决 JavaScript 和 AJAX 跨域 HTTP POST/GET 表单请求
javascript的跨域get很容易搞 定,但是跨域post就有点复杂了,今天无意看到大牛“张宴”的文章:http://blog.s135.com/ajaxcdr/ ,思路很不错,转载于此(其实这个思路要是看懂了,也很容易借助silverlight实现) 最近的一个项目中,需要通过 JavaScript 提交表单数据到另一个域名下的PHP接口(因为数据较大,需要HTTP POST方式提交),并获取PHP接口的返回值,在页面无刷新、无跳转的情况下,更新div标签内的内容。
957 0
4267
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载