zoukankan      html  css  js  c++  java
  • 网络协议之mDNS

    DNS(Domain Name System,域名系统)因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,
    而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
    DNS协议运行在UDP协议之上,使用端口号53。
    在RFC文档中RFC 2181对DNS有规范说明,RFC 2136对DNS的动态更新进行说明,RFC 2308对DNS查询的反向缓存进行说明。

    一、mDNS
    mdns 即多播dns(Multicast DNS),mDNS主要实现了在没有传统DNS服务器的情况下使局域网内的主机实现相互发现和通信,
    使用的端口为5353,遵从dns协议,使用现有的DNS信息结构、名语法和资源记录类型。并且没有指定新的操作代码或响应代码。
    在局域网中,设备和设备之前相互通信需要知道对方的ip地址的,
    大多数情况,设备的ip不是静态ip地址,而是通过dhcp协议动态分配的ip 地址,如何设备发现呢,就是要mdns大显身手,
    例如:现在物联网设备和app之间的通信,要么app通过广播,要么通过组播,发一些特定信息,感兴趣设备应答,
    实现局域网设备的发现,当然mdns 比这强大的多
    1.mDNS 基于UDP 协议
    组播地址: 组播地址使用的是D类地址,地址范围为:224.0.0.0—239.255.255.255
    2.mdns工作原理简单描述:
    mdns 使用组播地址为: 224.0.0.251 (ipv6: FF02::FB) 端口为5353,mdns是用于局域网内部的,并且主机的域名为.local 结尾,每个进入局域网的主机,如果开启了mDNS服务的话,都会向局域网内的所有主机组播一个消息,我是谁(域名),和我的IP地址是多少。然后其他有mdns服务的主机就会响应,也会告诉你,它是谁(域名),它的IP地址是多少。
    当然设备需要服务时,就是使用mdns 查询域名对对应的ip地址,
    对应的设备收到该报文后同样通过组播方式应答,
    此时其他主机设备也是可以收到该应答报文,其他主机也会记录域名和ip 以及ttl 等,更新缓存
    比如,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提供的服务要远远多于这个,当然服务多但并不复杂。
    3.mDNSResponder与Bonjour的关系:
    The mDNSResponder project is a component of Bonjour,
    Apple's ease-of-use IP networking initiative:
    Bonjour是法语中的Hello之意。它是Apple公司为基于组播域名服务(multicast DNS)的开放性零配置网络标准所起的名字。
    使用Bonjour的设备在网络中自动组播它们自己的服务信息并监听其它设备的服务信息。
    设备之间就像在打招呼,这也是该技术命名为Bonjour的原因。
    Bonjour使得局域网中的系统和服务即使在没有网络管理员的情况下也很容易被找到。

    举一个简单的例子:在局域网中,如果要进行打印服务,必须先知道打印服务器的IP地址。此IP地址一般由IT部门的人负责分配,然后他还得全员发邮件以公示此地址。有了Bonjour以后,打印服务器自己会依据零配置网络标准在局域网内部找到一个可用的IP并注册一个打印服务,名为“print service”之类的。当客户端需要打印服务时,会先搜索网络内部的打印服务器。
    由于不知道打印服务器的IP地址,客户端只能根据诸如"print service"的名字去查找打印机。

    在Bonjour的帮助下,客户端最终能找到这台注册了“print service”名字的打印机,并获得它的IP地址以及端口号。

    备注:随笔中内容来源于网上资料整理,仅供参考。

  • 相关阅读:
    Delphi 2009增强之Exit函数
    带小数的10进制转16进制
    产生指定长度的随机字符串
    在delph 2009中,利用Build Events调用UPX
    WMI信息获取
    MYSQL 存储过程学习笔记
    将窗体透明化
    倒计时
    通过程序开启XP的ClearType显示效果
    使用ODAC调用ORACLE的自定义函数和存储过程
  • 原文地址:https://www.cnblogs.com/Alanf/p/8653223.html
Copyright © 2011-2022 走看看