【Airplay_BCT】关于Bonjour的概念解答

2023-02-16 13:43:10 浏览数 (1)

1.什么是Bonjour?

Bonjour,也称为零配置网络,可以自动发现 IP 网络上的计算机、设备和服务。 Bonjour 使用行业标准 IP 协议,允许设备自动发现彼此,无需输入 IP 地址或配置 DNS 服务器。具体来说,Bonjour 可以在没有 DHCP 服务器的情况下自动分配 IP 地址,在没有 DNS 服务器的情况下进行名称到地址的转换,以及在没有目录服务器的情况下进行服务发现。 Bonjour 是一个开放协议,Apple 已将其作为正在进行的标准创建过程的一部分提交给 IETF。要了解更多信息,请查看 Bonjour 协议规范,其中详细介绍了构成链路本地和广域 Bonjour 的技术。

2.什么是mDNSResponder?

mDNSResponder 是一个 Bonjour 系统服务,它实现了用于发现本地网络上的服务的多播 DNS 服务发现和用于发现世界任何地方的服务的单播 DNS 服务发现。 mDNSResponder 内置于 OS X 和 iOS 中,可以作为 Windows 版 Bonjour 的一部分下载。 iTunes、iPhoto、Messages 和 Safari 等应用程序使用 mDNSResponder 实现零配置网络音乐共享、照片共享、聊天和文件共享,以及发现打印机和网络摄像头等硬件设备的远程用户界面。 mDNSResponder 还用于发现和打印到连接到 AirPort Extreme 和 Express 基站的 Bonjour 打印机和 USB 打印机。 mDNSResponder 是开源的,鼓励硬件设备制造商将 mDNSResponder 源代码直接嵌入到他们的产品中,以从零配置网络中获益

3. Bonjour 是否在多个子网之间工作?

是的。 OS X 的第一个 DNS 服务发现 (DNS-SD) 版本集中在单链路网络的多播 DNS (mDNS) 上,因为这是 IP 软件服务的最差环境。 Bonjour 使用动态 DNS 更新 (RFC 2316) 和单播 DNS 查询来启用广域服务发现。

4. 当我断开设备与网络的连接时,它是否仍然可见?

是的,有一段时间了。最终,DNS 记录达到其生存时间间隔并消失。作为APP开发者,如果你使用Bonjour连接主机,连接失败,你可以要求Bonjour重新确认记录。这个过程在 NSNetServices 和 CFNetServices 编程指南中有进一步的描述。

5. 我需要做什么才能在 iOS 中通过蓝牙支持 Bonjour?

在 iOS 5 及更高版本中,应用程序必须明确选择通过蓝牙进行服务发现,并且必须使用低级 DNS 服务发现 C API 解析服务。有关详细信息,请参阅 iOS 5 及更高版本上的蓝牙 Bonjour。

6. 我应该让服务浏览器运行多长时间?

浏览器会消耗资源,因此如果您不希望使用这些数据,则不应让它们继续运行。但是,在连接到服务时保持服务浏览器运行通常是个好主意。如果该连接失败,正在运行的浏览器的存在会促使 Bonjour 更积极地重新验证可能过时的服务条目,这可以使服务列表更加准确。

通常,如果您没有显示任何包含该列表的用户界面元素,并且您没有主动连接到任何服务,您应该停止浏览器。但是,这只是一般性建议;在任何情况下,您都应该尽一切可能为您的用户带来最佳体验。

7. Bonjour 是否支持“SOAP”RPC over HTTP?

是的。 Bonjour 定义了一种用于发现服务的新协议 (DNS-SD),但是,它对您发现的服务类型没有任何限制。因此,您可以像发现 Messages 好友和 iTunes 音乐库一样轻松地发现 SOAP 服务。换句话说,Bonjour 支持基于 HTTP 的 SOAP 以及在 TCP/IP 或 UDP/IP 之上分层的所有其他应用程序协议。

8. Bonjour 有订阅或通知机制吗?

是的。许多人似乎没有意识到 Bonjour 也进行通知的原因可能是因为它只是发现协议的固有属性。使用精心设计的发现协议,您用于发现某些信息的同一协议也可用于发现对该信息的更改。静态信息的发现,和可变信息的发现,以及可变信息何时发生变化的发现,都只是同一光谱上的不同点。有关使用 Bonjour“通知”的应用程序示例,请查看消息。当您将状态从“有空”更改为“离开”或输入状态消息时,本地网络上的所有其他消息客户端都会收到更改通知。

9、注册服务时,name参数应该传入什么?

默认情况下,您应该选择一个唯一描述服务的人类可读名称。例如,iTunes 通过组合计算机用户的名字和姓氏来选择默认的音乐共享名称,如“艾萨克·牛顿的音乐”。对于大多数硬件设备,默认服务名称应该是产品的完整品牌和型号。例如,类似“Apple MacBook Pro”的内容。请记住,这只是开箱即用的默认名称,应该允许用户自定义服务名称以区分网络上的多个设备或服务。

对于正在注册服务的 OS X 应用程序开发人员,在给定计算机上拥有该服务的一个实例可能是有意义的(而不是可能在多个帐户中运行的应用程序的每个实例一个)。在这种情况下,与其让您的应用程序呈现自己的用户界面供用户输入广告服务的名称,不如使用共享首选项中系统提供的默认名称(称为“计算机名称”)进行注册更为方便控制板。如果您在注册时为服务名称传入一个空字符串(“”),系统将自动使用“计算机名称”。传入一个空字符串也将通过自动在名称末尾附加一个数字来处理名称冲突。

但是,有些服务可以在同一台计算机上托管多个实例。例如,具有三台打印机的打印服务器应将每台打印机作为一流实体进行通告。每台打印机都应使用可有效识别打印机本身的描述性名称进行广告宣传。这一点很重要,因为名为“Marketing’s Transparency Printer”的打印机将来可能会转移到不同的打印服务器,但用户不必了解这些操作细节。他们仍然会看到以相同名称在网络上发布的相同服务,即使它现在位于不同的打印服务器上。

10、注册服务时“type”参数应该传入什么?

您必须传递“_applicationprotocol._transportprotocol”形式的字符串。当前“_transportprotocol”必须是“_tcp”或“_udp”。您的“应用程序协议”必须为 15 个字符或更少,并且应该在 IANA 注册,以便他们可以将您添加到已注册协议名称和端口号的列表中。请参阅 QA1312 以获取 OS X 使用的服务类型列表。

11、注册服务时domain参数应该传入什么?

如果您传递一个空字符串 (“”),那么您的服务将使用本地链路多播和用户选择的单播 DNS 域(如果适用)进行注册。

如果您传入“本地”,则您的服务仅使用链接本地多播注册,而不是在任何用户选择的单播 DNS 域中注册。

除了“本地”域之外,如果您有某些特殊原因想要在特定的远程域中注册您的服务,则只需传递特定的字符串。

12. 当网络中的两台设备都使用相同的服务名称时应该怎么办?

在极少数发生名称冲突的情况下,您的设备应在名称末尾添加一个数字,例如:“Apple Mac mini (2)”

调用 Bonjour API(如 DNSServiceRegister 和 CFNetServiceRegisterWithOptions)的应用程序和设备将在发生名称冲突时自动获得此名称更改行为。对于有屏幕且能够进行用户输入的设备,您可以选择提示用户输入一个更独特的名称,而不是附加数字。

13.TXT记录有什么用?

TXT 记录的具体性质及其使用方式取决于服务类型。每个服务类型将定义零个或多个名称/值对,用于存储有关每个服务的元数据。这些名称/值对的格式应如基于 DNS 的服务发现的第 6 节所述。

14. 用户在我的应用程序中浏览网络并选择他们希望使用的服务实例后,我应该将该 IP 地址保存在我的应用程序的首选项文件中,对吗?

错误的。这是一个常见的错误。使用 DHCP(以及链路本地寻址)假设服务实例明天将具有相同的 IP 地址是不安全的。地址可以改变。服务名称是服务实例的预期稳定标识符。将实例名称(名称、类型和域)保存在应用程序的首选项文件中,然后在用户每次访问该服务时按需解析它。另请注意,您不应该存储主机名和端口号,因为您不应该假设服务实例明天一定会在相同的端口号上运行。不是存储主机名,而是存储服务实例名称(名称、类型和域),然后当您在使用时解析服务实例名称时,您一定会获得最新的 IP 地址和端口号.

15. 我的硬件设备有一个用于配置的内置网络服务器。我应该使用 Bonjour 注册吗?

是的。您应该注册设备上运行的每项服务,例如 HTTP、FTP、SSH、Telnet。在 OS X 上,Safari 网络浏览器可以发现使用 Bonjour 公布的网络服务器,Windows 上的 Internet Explorer 可以在安装 Bonjour for Windows 后发现网络服务器。此外,OS X 中的终端应用程序可以发现 FTP、SSH 和 Telnet 服务器。

0 人点赞