从Airplay开始,接触到BCT,这是什么?被迫从安卓变成ios用户和开发。。。开始我的学习之旅,记录成长过程,不定时更新
Bonjour, also known as zero-configuration networking, enables automatic discovery of devices and services on a local network using industry standard IP protocols. Bonjour makes it easy to discover, publish, and resolve network services with a sophisticated, easy-to-use programming interface that is accessible from Cocoa, Ruby, Python, and other languages.
Bonjour,也称为零配置网络,使用行业标准IP协议实现本地网络上设备和服务的自动发现。Bonjour通过一个复杂、易于使用的编程界面,可以从Cocoa、Ruby、Python和其他语言访问,从而轻松发现、发布和解析网络服务。
大概就是说:bonjour是苹果的一个连接网络,从一开始的网络连接到现在的专用bonjour连接,实现IOT物联网的
Apple 的一些产品,比如 homtkit、smart home 最初是通过无线有线网络连接的,而Bonjour 是他们之间的连接协议,只有满足Bonjour 的条件才能正常的通过网络进行控制操作。
Bonjour 作为一种协议,包含了现在大火的 IOT 概念。 Apply的每一款产品只有通过了BCT的测试验证后,才可以证明每个产品设备间可以自由连接和控制。
诸如手机可以操控TV、灯、音响之类,他们背后的原理都是通过Bonjour 来控制的。 如果开发Apply的产品都是需要涉及到BCT验证的。
在这里简单介绍下homtkit、smart home
Homekit 是苹果公司出品的智能家居系统,设置好后能在任何地方设置和控制家里所有智能家居设备。现在很多家电都加入了智能功能,但经常一个家电就是一个 app,例如空调有自己的 app、指纹锁有自己的 app、各种灯也有自己的 app。
而成套的智能家居方案就解决了这个问题,以 HomeKit 来说,在购买决策阶段就可以在支持 Homekit 的产品里挑选,例如 LG 的电视、米家的指纹锁、Aqara 的智能开关,这样以后不用打开乱七八糟的 app,直接点亮 iPhone 下拉菜单栏就能操控常用设备了,或者直接喊一句 Siri 来操控,特别方便。
其它的苹果产品如 Apple Watch、Apple Tv 和 Homepods 也都可以控制家里的智能设备,所以如果你有若干苹果产品,选择 Homekit 是不错的选择。
下面是来自Investopedia的解释
A smart home refers to a convenient home setup where appliances and devices can be automatically controlled remotely from anywhere with an internet connection using a mobile or other networked device. Devices in a smart home are interconnected through the internet, allowing the user to control functions such as security access to the home, temperature, lighting, and a home theater remotely.
智能家居是指一种方便的家庭设置,其中可以使用移动或其他联网设备通过互联网连接从任何地方远程自动控制电器和设备。智能家居中的设备通过互联网相互连接,允许用户远程控制家庭安全访问、温度、照明和家庭影院等功能。
smart home的功能和homekit类似,小伙伴们感兴趣可以自己自行深入学习,这里仅做介绍
Bonjour零配置网络架构支持在局域网或广域网上发布和发现基于TCP/IP的服务。本文档从较高的层次描述了Bonjour架构,并简要描述了可用的Bonjour API。
Tips:有关API级别的更详细内容(包括代码片段),请阅读《DNS服务发现编程指南》或《NSNetServices和CFNetServices编程指南》。
Bonjour是苹果实现的一套零配置网络协议。Bonjour旨在让用户更容易进行网络配置。
例如,Bonjour允许您将打印机连接到网络,而无需为其分配特定的IP地址或手动将该地址输入每台计算机。通过零配置网络,附近的计算机可以发现其存在并自动确定打印机的IP地址。如果该地址是一个动态分配的地址,并且发生了变化,那么他们可以在将来自动发现新地址。
应用程序还可以利用Bonjour自动检测网络上应用程序(或其他服务)的其他实例。例如,两个运行iOS照片共享应用程序的用户可以通过蓝牙个人区域网络共享照片,而无需在任一设备上手动配置IP地址。
Bonjour协议支持使用多播DNS(mDNS)以及在需要时链接本地寻址,以高效和稳健的方式发布和发现服务。
Bonjour是苹果提交给IETF的一套IP零配置网络协议,作为正在进行的标准创建过程的一部分。本节介绍Bonjour解决的问题及其解决方法。
在过去的二十年中,计算机逐渐从AppleTalk、IPX和NetBIOS等特定于平台的协议过渡到互联网协议(IP)。大多数计算机和其他网络设备都使用TCP/IP进行通信。然而,在这一过渡过程中,一部分功能丧失了将设备添加到本地网络,然后从计算机和网络上的其他设备连接到这些设备的能力,所有这些都几乎没有配置。
为了使IP正常工作,每个设备都需要一个唯一的地址,无论是静态分配还是由DHCP服务器动态分配。动态分配的地址可以更改,因此如果没有Bonjour,打印机和其他设备必须手动配置静态地址,以便网络上的计算机可以访问它们。然后,网络管理员必须配置DNS服务器,以便计算机用户不必通过IP地址连接到打印机。因此,看似次要的任务需要大量的配置。因为不适合传统网络管理员角色的人通常会建立网络家庭,通过共享路由器将他们的笔记本电脑连接到互联网,例如,这种配置级别并不实用。
即使在IT专业人员运行的托管网络中,也没有必要为打印机等设备手动配置。人们希望能够插入打印机,将两台笔记本电脑连接在一起,或者在本地网络上查找文件服务器或游戏服务器,而不必浪费时间尝试正确配置。
为了支持这一点,人们需要一种简单可靠的方式来配置和浏览IP网络上的服务。他们希望发现可用的服务并从列表中选择一个,而不必事先知道每个服务的名称或IP地址。IP拥有这种能力符合每个人的利益。这正是Bonjour提供的功能。
零配置IP网络具有很大的潜力。考虑一下打印的日常任务。在计算机或iOS设备上配置打印机后,只需选择应用程序的“打印”命令即可。
把你的笔记本电脑带到客户的公司或邻居家,试着打印一些东西。如果他们有一台支持Bonjour协议的打印机,打印就像在本地网络上一样简单。要打印,请将笔记本电脑连接到客户端的Wi-Fi接入点,然后启动笔记本电脑。或者启动你的笔记本电脑,它会立即找到邻居的家庭无线网络。无论哪种方式,您的笔记本电脑都会自动发现任何可用的打印机。打开文档,选择“打印”命令,“打印”对话框中将显示所有可用的打印机。选择打印机,单击“打印”,文档将打印。
或者说你想和朋友玩网络游戏。你打开游戏,你朋友的游戏副本立即在网络上看到你的副本。或者,如果你在两台电脑上有一个音乐共享应用程序,这些程序本身可以发现彼此并立即交换歌曲列表。类似地,如果您有共享文件夹或打开了个人Web共享,您的共享文件和网页将立即可供其他人使用。
该场景如图1-1所示。在步骤1中,打开邻居家中的笔记本电脑,笔记本电脑要么从路由器中的DHCP服务器获取地址,要么在没有DHCP服务器的情况下为自己分配一个可用的本地地址。在步骤2中,将查询网络中的可用打印机,以便在打开“打印”对话框时,列出邻居的打印机。最后,在步骤3中,您打开计算机上的音乐共享,邻居的计算机会看到并连接。
这些只是可以从零配置IP网络中受益的现有应用程序中的一小部分。零配置IP网络具有增强移动游戏、家庭网络、分布式计算和许多其他网络应用的潜力。此外,零配置IP网络为一类全新的支持IP的数字设备打开了大门。
Bonjour是苹果提出的IP零配置网络方案。Bonjour来自ZEROCONF工作组的工作,该工作组是互联网工程任务组(IETF)的一部分。ZEROCONF工作组对IP零配置网络的要求和建议解决方案主要涵盖三个方面:
Bonjour为所有这三个领域提供了零配置解决方案,如下四节所述。
Bonjour允许服务提供商、硬件制造商和应用程序程序员支持单一网络协议IP,同时在易用性方面开辟新天地。
网络用户不再需要分配IP地址、分配主机名或甚至键入名称来访问网络上的服务。用户只需询问可用的网络服务,然后从列表中选择。
在许多方面,这种浏览对应用程序来说甚至比对用户来说更强大。应用程序可以自动检测他们需要的服务或他们可以与之交互的其他应用程序,允许自动连接、通信和数据交换,而无需用户干预。
寻址问题通过自分配链路本地寻址来解决。链路本地寻址使用为本地网络保留的一系列地址,通常是小型LAN或单个LAN段。为此,IPv6规范将自分配链路本地寻址作为协议的一部分。零配置网络的主要解决挑战是将此功能升级为IPv4。
注意:IPv6链路本地寻址比IPv4链路本地寻址更简单,因此更可靠。因此,您的应用程序支持IPv6非常重要。
在IPv4中,自分配寻址通过在链路本地范围中选择一个随机IP地址并对其进行测试来实现。如果该地址未被使用,它将成为您的本地地址。如果它已经在使用,计算机或其他设备会随机选择另一个地址并重试。
注意:如果一个主机向另一个主机发送数据包时,整个链路层有效负载(物理网络中表示的数据包内容,如以太网)未经修改就到达,则两个主机被视为位于同一本地链路上。实际上,在以太网网络上,这意味着没有IP路由器触及两个主机之间的数据包。
大多数主要操作系统都支持IPv4和IPv6中的链路本地寻址。硬件制造商应在其设备上实现链路本地寻址,以获得Bonjour的全部好处。
计算机或iOS设备上支持链接本地寻址的任何用户或服务都会自动受益于此功能。当您的主机遇到本地网络时,它会找到一个未使用的本地地址并采用它。无需执行任何操作
所提出的本地网络上的名称到地址转换解决方案使用多播DNS(mDNS),其中DNS格式查询使用IP多播在本地网络上发送。因为这些DNS查询被发送到多播地址,所以不需要具有全局知识的单个DNS服务器来回答这些查询。当每个服务或设备看到对其自身名称的查询时,它可以提供自己的DNS功能,并提供具有自己地址的DNS响应。
Bonjour走得更远。它包括一个响应器,用于处理主机或iOS设备上任何网络服务的mDNS查询。这使您的应用程序无需解释和响应mDNS消息。通过注册您的服务,Bonjour mDNSResponder守护程序会自动通告您的服务可用性,以便对您的姓名的任何查询都会自动指向正确的IP地址和端口号。
注意:注册是使用Bonjour API之一执行的。此功能仅适用于在主机或iOS设备上运行的服务。在其他设备(如打印机)上运行的服务需要实现一个简单的mDNSResponder守护进程,该守护进程处理对该设备提供的服务的查询。
Bonjour还为NAT端口映射协议(NAT-PMP)提供内置支持。如果上游路由器支持此协议,OS X和iOS应用程序可以创建和销毁端口映射,以允许防火墙另一侧的主机连接到提供的服务。(NAT端口映射将在“网络概述”中的“防火墙和网络地址转换”中进一步描述。)
要使名称到地址的转换正常工作,必须在本地网络上使用唯一的名称。与传统的DNS主机名不同,本地名称仅在本地网络或LAN段上有意义。您可以像自行分配本地地址一样自行分配本地名称,选择一个;如果它还没有使用,需要做下面的两步:
1.硬件制造商通过让他们的设备发送一个mDNS查询来确定他们选择的名称是否已经在使用,并查找任何响应。如果有响应,设备应选择另一个名称。没有用户界面的设备会将一个递增的更大数字附加到默认名称,直到该名称唯一。例如,如果默认名称为XYZ-LaserPrinter.local的打印机连接到已安装其他两台相同打印机的本地网络,则会测试XYZ-LaserPrinter.local、XYZ-LaserPrinter-2.local和XYZ-LaserPrint er-3.local(未使用并成为其名称)。
2.软件服务在Bonjour注册时提供名称。如果提供的名称已在使用中,Bonjour将默认自动为您重命名服务。
在OS X中,用户可以通过“系统首选项”的“共享”窗格中的“本地主机名”设置为其计算机设置主机名。(在iOS中,主机名是自动生成的,不可配置。)在使用Web浏览器、命令行工具等常规DNS主机名的任何地方都可以使用此主机名。若要向系统指示名称是本地主机名,请附加一个点(.)和本地。主机名;Steven.local.是本地主机名的一个示例。
重要提示:第一个点用作分隔符。为了防止应用程序使用搜索域查找服务,请通过在本地添加最后一个点来完全枚举主机名。。
例如,如果用户在Web浏览器中键入steve.local.,这将告诉系统在本地网络上对steve的请求进行多播,而不是将其发送到传统的DNS服务器。如果本地网络上有一台名为steve的启用Bonjour的计算机,则会向用户的浏览器发送正确的IP地址。这允许用户在没有常规DNS服务器的情况下访问本地主机和服务。
注意:用户可以避免在Bonjour主机名后键入.local.,方法是在“系统首选项”的“网络”窗格的“搜索域”部分输入local,以及任何其他DNS域,如apple.com或earthlink.net。在“网络”面板的“搜索域名”部分列出的连续域中搜索不合格的名称,如steve,在本例中为steve.apple.com,steve.eearthlink.net和steve.local。
可以了解下域命名惯例
Bonjour的最后一个元素是服务发现。服务发现允许应用程序查找特定类型服务的所有可用实例,并维护命名服务和端口号的列表。然后,应用程序可以将服务主机名解析为IPv4和IPv6地址列表,如命名中所述。
命名服务列表提供了服务与其当前DNS名称和端口号之间的间接层。Indirection允许应用程序保留可用服务的持久列表,并在使用服务之前解析实际的网络地址。该列表允许动态重新定位服务,而无需生成大量网络流量来宣布更改。
Bonjour中的服务发现是通过“浏览”完成的。针对给定的服务类型和域发出mDNS查询,任何匹配的服务都会回复其名称。结果是可供选择的可用服务列表。
这与传统的以设备为中心的网络服务理念非常不同。对于处理服务器、网络设备和网络编程的人来说,很容易养成从物理硬件角度考虑服务的习惯。在这种以设备为中心的视图中,网络由多个设备或主机组成,每个设备或主机都有一组服务。例如,网络可能由一台服务器机器和几个客户端机器组成。在以设备为中心的浏览方案中,客户端向服务器查询其正在运行的服务,获取列表(FTP、HTTP等),并决定使用哪个服务。界面反映了物理系统的组织方式。但这不一定是用户逻辑上想要或需要的。
用户通常希望完成某项任务,而不是查询设备列表以了解正在运行的服务。客户只问一个问题:“有哪些打印服务可用?”比问每个可用的设备“您正在运行哪些服务?”并筛选结果以查找打印机更有意义。以设备为中心的方法不仅耗时,而且会产生大量的网络流量,其中大部分都是无用的。以服务为中心的方法发送一个查询,只生成相关的回复。
此外,服务不与特定的IP地址甚至主机名绑定。例如,网站可以由具有不同地址的多个服务器托管。在一个组织内,网络管理员可能需要将服务从一个服务器移动到另一个服务器,以帮助平衡负载。如果客户机存储主机名(在大多数情况下,他们现在这样做),那么如果服务移动到其他主机,他们将无法连接。
Bonjour采用面向服务的观点。查询是根据所需服务的类型而不是提供服务的主机进行的。应用程序存储服务实例名称,而不是地址,因此如果IP地址、端口号甚至主机名发生了更改,应用程序仍然可以连接。通过专注于服务而不是设备,用户的浏览体验变得更加有用和无故障
无服务器寻址、命名和服务发现有可能产生大量的网络流量,但Bonjour采取了许多步骤将流量降至最低。这使得Bonjour可以获得AppleTalk的易用性,同时避免任何不必要的“闲聊” Bonjour使用了几种机制来减少零配置开销,包括缓存、抑制重复响应、指数回退和服务通告,如以下部分所述。
Bonjour使用多播DNS记录缓存来防止主机请求已请求的信息。例如,当一个主机请求LPR后台打印程序列表时,打印机列表通过多播返回,因此所有本地主机都会看到它。下次主机需要后台打印程序的列表时,它的缓存中已经有了该列表,不需要重新发出查询。多播DNS响应者负责维护缓存;应用程序开发人员不需要做任何事情来维护它。
为了防止对同一查询重复回答,Bonjour服务查询包括一个已知答案列表。例如,如果主机正在浏览打印机,则第一个查询不包括打印服务,并从可用的打印服务器获得12个答复。下次主机查询打印服务时,查询将包括已知服务器的列表。列表中已存在的打印服务器没有响应。 Bonjour以另一种方式抑制重复反应。如果一个主机即将响应,并且注意到另一个主机已经使用相同的信息进行了响应,则该主机将抑制其响应。 应用程序开发人员不需要采取任何措施来抑制重复响应。Bonjour处理重复响应抑制。
当主机浏览服务时,它不会连续发送查询以查看是否有新服务可用。相反,主机发出初始查询并以指数方式减少后续查询的频率,例如:1秒后、3秒后、9秒后、27秒后等,最多间隔一小时。 这并不意味着浏览器需要一个多小时才能看到新服务。当一个服务在网络上启动时,它会使用类似的指数后退算法几次宣布其存在。这样,服务通告和发现的网络流量保持在最小,但新服务很快就会出现。 在配备Bonjour的主机上运行的服务在向mDNSResponder守护程序注册时自动宣布。在其他硬件(如打印机)上运行的服务应该以指数级回退的方式实现服务公告,以充分利用Bonjour。