概述

Bonjour完成三个操作:

  1. 发布服务
  2. 发现服务
  3. 解析服务

发布服务

需要通过mDNS注册服务,可以使用Bonjour的高级API或者直接用mDNSResponder。Bonjour也可以通过动态DNS更新,在常规的DNS服务上,储存记录。
注册服务时,会生成3个相关的DNS记录:

  1. 服务记录SRV
  2. 指针记录PTR
  3. 文本记录TXT

TXT包含使用服务所需要的额外数据,也可能常常是空白的。

服务记录

向使用者提供服务接口,使用者记录该名字,以便长期访问。连接的时候,使用者执行一个DNS 询问,得到主机和端口名字。
这样有两个好处:一是可读性强。二是,即便端口、ip、甚至主机变化之后,仍然能够访问服务。

服务记录包含两个信息,主机名和端口号。
主机名
服务目前能够被访问的域名。使用主机名而不是IP地址的原因是,我们可能遇到多宿主主机,具有多个IP,或者有ipv4和ipv6两个地址。这样我们能够更好的处理这些类似情况。

端口号
标识TCP或者UDP的端口。

服务记录命名约定

..
实例名.服务类型.域名

实例名:服务实例名字,可以是一个UTF8的字符串,具有可读性。

服务类型: 标准的IP协议名字,前面加一个下划线,跟着带下划线的TCP、UDP。比如UDP下的普通的FTP服务为:_tftp._udp

域名:标准的DNS域名。比如baidu.com ,对于本地一般是.local。

一个服务记录示例:

PrintsAlot._printer._tcp.local. 120 IN SRV 0 0 515 blackhawk.local.

以上将在mDNS上创建一个打印机,叫blackhawk.local。120 代表缓存的time-to-live (TTL) 值用于缓存。两个0代表权重和优先级,传统DNS中遇到多个记录会根据这两个值来选择,对于mDNS,会被忽略。

指针记录

指针记录启用服务发现,通过映射服务类型,到该服务类型指定实例的名字列表。该记录增加了另一个间接层,所以可以通过查找该服务类型的PTR记录标签,就可以找到这些服务。

指针记录只包含一个信息:服务实例的名字。这个名字和SRV记录的名字一样。指针记录命名合服务记录一样,只是没有实例名字:

.
服务类型.域名
以下是名为PrintsAlot的打印后台处理程序的PTR记录示例:

_printer._tcp.local. 28800 PTR PrintsAlot._printer._tcp.local.

文本记录

包含一些特殊描述,通常为100-200字节,也可能是空白的。

从历史上看,此记录已用于在同一端口上以相同IP地址运行的多个服务,例如,在同一打印服务器上运行的多个打印队列。在这种情况下,TXT记录中的其他信息可用于标识预期的打印队列,如本示例所示:

这种做法是必要的,因为历史上服务类型已经与公共的端口相关联。Bonjour 希望每个实例服务在不同的动态分配端口,而不是在公共端口上。使用TXT记录可以指定客户端在哪一个实例上通讯。

不同服务类型的定义不一样,所以每一个新服务要自定义TXT的数据格式。

发布示例

举一个具体的例子,考虑一个在本地网络上共享音乐的假想设备-一个启用IP的自动点唱机。假设其传输协议为TCP,并且其应用协议的名称为music。当有人将设备插入以太网集线器时,会发生很多事情,如图4-1所示。
1.给自己分配IP:

设备会从子网掩码为255.255.0.0的IPv4本地链接范围169.254.0.0中随机选择本地链接IP地址169.254.150.84,并发布到网络。因为没有响应,所以表面169.254.150.84可用,分配成功。

2.启动mDNS响应

启动自己的多播DNS响应器,请求主机名eds-musicbox.local,发布到网络。一样的,没有响应,表明可用,分配成功。

3.启动音乐服务

设备在TCP端口1010上启动音乐共享服务,

4.发布服务
在本地以Ed’s Party Mix的名义发布_music._tcp类型的服务,在本地域名.local,请首先确保不存在使用相同名称的服务。这产生了两个记录:

  • 一个SRV记录,名叫 Ed’s Party Mix._music._tcp.local. 指向 eds-musicbox.local. ,在在TCP 端口1010。
  • 一个PTR 记录,名叫_music._tcp.local,指向Ed’s Party Mix._music._tcp.local.服务。

发布服务时,如果域名或服务名称不可用,需要选择新的名字。

发现服务

服务发现,使用服务发布期间注册的DNS记录来寻找指定服务类型的所有命名实例。应用需要执行一个匹配服务类型的PTR记录问询()query 。比如 _http._tcp。每个设备上的mDNS responders 返回PTR记录和服务实例名称。以下是一个音乐分享服务示例:

1.客户端应用程序,向标准多播地址224.0.0.251,发出对本地域的_music._tcp类型的服务查询。网络上的每一个mDNS responder 都会收到。

2.只有具有音乐分享的设备用一个PTR记录来响应该查询。返回的PTR包含读物实例的名字: Ed’s Party Mix._music._tcp.local。应用收到该PTR后,提取到服务实例的名字,将其添加到音乐服务列表。

解析服务

通常来说,发现服务一下子就完成了,比如用户选择了一个打印机。这个操作会保存服务实例的名字,这是给定服务的稳定标记符。主机、ip、端口可能随时会变,但是用户不需要因此重选一次。相应地,服务在没有实际使用的时候,并不会将其解析为socket信息,直到真正使用的时候。

为了解析服务,应用会根据服务名字在DNS上查询SRV记录。mDNS responders 将返回对应服务的SRV记录。

解析音乐分享服务实例

1.首先应用发出一个DNS查询到多播地址 224.0.0.251 ,询问Ed’s Party Mix._music._tcp.local. SRV 记录。

2.该询问会返回主机名和端口名 (eds-musicbox.local., 1010)

3.客户端发出一个多播请求,查询IP地址。

4.客户端拿到IP地址 169.254.150.84。客户端使用该IP和端口号连接服务了。

以上过程每一次使用服务都会发生一次,所以总是会找到当前的地址和端口号。

以上参考:
https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/NetServices/Articles/NetServicesArchitecture.html#//apple_ref/doc/uid/20001074-SW1

Bonjour 与mDNS:
https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/NetServices/Articles/faq.html#//apple_ref/doc/uid/TP40008762-SW1

mDNS接口说明:
https://developer.apple.com/library/archive/documentation/Networking/Conceptual/dns_discovery_api/Introduction.html#//apple_ref/doc/uid/TP40002475-SW1

苹果Bonjour 操作与对应mDNS记录相关推荐

  1. 苹果手机计算机怎么看之前的记录,苹果怎么查之前的通话记录吗(苹果手机怎么查通话录音内容)...

    苹果怎么查之前的通话记录吗(苹果手机怎么查通话录音内容) 如何查询6个月以前的通话记录是网上常见的问题,因为不管是移动,联通,还是电信,都只可以查询最近6个月内的通话记录,那六个月以前的通话祥单是否有 ...

  2. 苹果怎么找计算机历史记录,苹果备忘录怎么查看历史更改记录?有可以查看历史记录的便签软件吗...

    原标题:苹果备忘录怎么查看历史更改记录?有可以查看历史记录的便签软件吗 作为iOS系统自带的一款记事小工具,苹果备忘录的功能很完善.因此,在它上面记录待办事项,很方便!只不过,苹果备忘录有一个小小的缺 ...

  3. git只提交一张图片_Git 图形化操作之合并提交记录

    Git 图形化操作之合并提交记录 Git 图形化操作之合并提交记录 目录1.显示日志2.合并提交记录3.推送合并的提交 独立观察员 2020 年 9 月 24 日 前言:当我们使用 Git 时,有时会 ...

  4. Git 图形化操作之合并提交记录

    Git 图形化操作之合并提交记录 独立观察员 2020 年 9 月 24 日 目录 1.显示日志 2.合并提交记录 3.推送合并的提交 前言:当我们使用 Git 时,有时会遇到刚提交推送完一次修改,发 ...

  5. 苹果如何分屏_玩转mac—苹果电脑操作教程

    永新Apple / Huawei Store(中国移动合作商):苹果+华为(荣耀)专卖.售后维修.技术支持.新机置换.分期付款:移动通信服务: 永新店:建设西路70号(三湾大酒店旁)   微信手机:1 ...

  6. 苹果手机11计算机怎么看历史记录,苹果怎么查到全部通话记录(苹果11怎么看所有的通话记录)...

    苹果怎么查到全部通话记录(苹果11怎么看所有的通话记录) 查找以前的苹果手机历史通话记录是让很多人感到棘手的问题,我们会发现,在iPhone手机的通话记录中,只可以查看到最近100条通话记录.殊不知, ...

  7. 苹果手机计算机的使用记录,苹果iPhone手机求一款记录日常工作内容的便签app

    原标题:苹果iPhone手机求一款记录日常工作内容的便签app 经常使用苹果手机的人,应该会注意到:iPhone手机桌面上有一款名叫"备忘录"的app软件.只是,不知道大家使用过这 ...

  8. C#进行单击操作、单击位置记录、捕获全局左右键单击事件

    自己封装了AClick.cs和Win32Api.cs两个类,下面有源码,直接调用即可 源码地址:C#单击操作.位置记录.捕获单击事件源码 效果图: 1.单击操作 new AClick().AutoCl ...

  9. 【错误记录】C 语言中通过指针操作字符串常量出错记录 ( 只有 栈内存 或 堆内存 中的数据才能通过指针修改 | 不要通过指针修改常量区的字符串 )

    文章目录 一.报错记录 二.修改方案 一.报错记录 执行下面的代码 , 报错如下 : 执行的错误代码 : #include <stdio.h> #include <stdlib.h& ...

最新文章

  1. QT如何实现对于字符串数学公式计算
  2. 【设备】WIN10怎么用佳能LIDE120扫描仪?
  3. 电脑练习打字软件_如何使用电脑键盘练习打字【拼音打字】
  4. vc 2010 下打包dll 的问题
  5. Linux运维系统工程师系列---17
  6. C#会对于未赋值的变量/成员变量,给予一个初始值吗?
  7. 大型地震灾害应急通信系统解决方案
  8. win7网络适配器_win7网络重置
  9. 计算机毕业设计太难做不出来怎么办?
  10. Python爬取2万条相亲数据!看看中国单身男女都在挑什么
  11. 4094. Spiral matrix
  12. 鸿蒙系统有没有红外遥控,红外遥控与蓝牙遥控的区别
  13. node-opcua的使用 --- [2] 添加对象和变量
  14. TypeScript 基础数据类型与接口
  15. 市场调研报告-全球与中国2-氨基-5-碘吡啶市场现状及未来发展趋势
  16. C-Lodop提示“网页还没下载完毕,请稍等一下再操作.”
  17. python爬取网页停止工作_python人员api停止工作
  18. Android的含义百度百科,android是什么意思
  19. HTML简单的图片瀑布流
  20. 使用vue全家桶搭建的vue小说阅读器,已部署到服务器可预览。

热门文章

  1. vue2组件系列第二节:按钮
  2. EasyBCD引导Ubuntu出错(警告)“EasyBCD and UEFI”
  3. 免费的JSP服务器-SAE主机
  4. 从0搭建Android直播系统
  5. iPhone 的尺寸
  6. 2023年《计算机工程》最新投稿经验
  7. 2015GPNU新生赛题解
  8. IDEA创建MAVEN项目卡在Generating project in Batch mode
  9. Android 颜色和颜色透明度列表
  10. Spring Security继承AbstractAuthenticationProcessingFilter验证成功后自动跳转地址“/”