安卓手機建設(shè)網(wǎng)站百度收錄鏈接
從Airplay開始,接觸到BCT,這是什么?被迫從安卓變成ios用戶和開發(fā)。。。開始我的學(xué)習(xí)之旅,記錄成長過程,不定時更新
Bonjour
下面是蘋果官網(wǎng)關(guān)于bonjour的解釋
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,也稱為零配置網(wǎng)絡(luò),使用行業(yè)標準IP協(xié)議實現(xiàn)本地網(wǎng)絡(luò)上設(shè)備和服務(wù)的自動發(fā)現(xiàn)。Bonjour通過一個復(fù)雜、易于使用的編程界面,可以從Cocoa、Ruby、Python和其他語言訪問,從而輕松發(fā)現(xiàn)、發(fā)布和解析網(wǎng)絡(luò)服務(wù)。
大概就是說:bonjour是蘋果的一個連接網(wǎng)絡(luò),從一開始的網(wǎng)絡(luò)連接到現(xiàn)在的專用bonjour連接,實現(xiàn)IOT物聯(lián)網(wǎng)的
Apple 的一些產(chǎn)品,比如 homtkit、smart home 最初是通過無線有線網(wǎng)絡(luò)連接的,而Bonjour 是他們之間的連接協(xié)議,只有滿足Bonjour 的條件才能正常的通過網(wǎng)絡(luò)進行控制操作。
Bonjour 作為一種協(xié)議,包含了現(xiàn)在大火的 IOT 概念。
Apply的每一款產(chǎn)品只有通過了BCT的測試驗證后,才可以證明每個產(chǎn)品設(shè)備間可以自由連接和控制。
諸如手機可以操控TV、燈、音響之類,他們背后的原理都是通過Bonjour 來控制的。
如果開發(fā)Apply的產(chǎn)品都是需要涉及到BCT驗證的。
在這里簡單介紹下homtkit、smart home
HomeKit
Homekit 是蘋果公司出品的智能家居系統(tǒng),設(shè)置好后能在任何地方設(shè)置和控制家里所有智能家居設(shè)備?,F(xiàn)在很多家電都加入了智能功能,但經(jīng)常一個家電就是一個 app,例如空調(diào)有自己的 app、指紋鎖有自己的 app、各種燈也有自己的 app。
而成套的智能家居方案就解決了這個問題,以 HomeKit 來說,在購買決策階段就可以在支持 Homekit 的產(chǎn)品里挑選,例如 LG 的電視、米家的指紋鎖、Aqara 的智能開關(guān),這樣以后不用打開亂七八糟的 app,直接點亮 iPhone 下拉菜單欄就能操控常用設(shè)備了,或者直接喊一句 Siri 來操控,特別方便。
其它的蘋果產(chǎn)品如 Apple Watch、Apple Tv 和 Homepods 也都可以控制家里的智能設(shè)備,所以如果你有若干蘋果產(chǎn)品,選擇 Homekit 是不錯的選擇。
Smart Home
下面是來自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.
智能家居是指一種方便的家庭設(shè)置,其中可以使用移動或其他聯(lián)網(wǎng)設(shè)備通過互聯(lián)網(wǎng)連接從任何地方遠程自動控制電器和設(shè)備。智能家居中的設(shè)備通過互聯(lián)網(wǎng)相互連接,允許用戶遠程控制家庭安全訪問、溫度、照明和家庭影院等功能。
smart home的功能和homekit類似,小伙伴們感興趣可以自己自行深入學(xué)習(xí),這里僅做介紹
Bonjour零配置網(wǎng)絡(luò)架構(gòu)支持在局域網(wǎng)或廣域網(wǎng)上發(fā)布和發(fā)現(xiàn)基于TCP/IP的服務(wù)。本文檔從較高的層次描述了Bonjour架構(gòu),并簡要描述了可用的Bonjour API。
Tips:有關(guān)API級別的更詳細內(nèi)容(包括代碼片段),請閱讀《DNS服務(wù)發(fā)現(xiàn)編程指南》或《NSNetServices和CFNetServices編程指南》。
Bonjour是蘋果實現(xiàn)的一套零配置網(wǎng)絡(luò)協(xié)議。Bonjour旨在讓用戶更容易進行網(wǎng)絡(luò)配置。
例如,Bonjour允許您將打印機連接到網(wǎng)絡(luò),而無需為其分配特定的IP地址或手動將該地址輸入每臺計算機。通過零配置網(wǎng)絡(luò),附近的計算機可以發(fā)現(xiàn)其存在并自動確定打印機的IP地址。如果該地址是一個動態(tài)分配的地址,并且發(fā)生了變化,那么他們可以在將來自動發(fā)現(xiàn)新地址。
應(yīng)用程序還可以利用Bonjour自動檢測網(wǎng)絡(luò)上應(yīng)用程序(或其他服務(wù))的其他實例。例如,兩個運行iOS照片共享應(yīng)用程序的用戶可以通過藍牙個人區(qū)域網(wǎng)絡(luò)共享照片,而無需在任一設(shè)備上手動配置IP地址。
Bonjour提供高效的服務(wù)發(fā)現(xiàn)
Bonjour協(xié)議支持使用多播DNS(mDNS)以及在需要時鏈接本地尋址,以高效和穩(wěn)健的方式發(fā)布和發(fā)現(xiàn)服務(wù)。
關(guān)于Bonjour的更多概念link
Bonjour概念
Bonjour是蘋果提交給IETF的一套IP零配置網(wǎng)絡(luò)協(xié)議,作為正在進行的標準創(chuàng)建過程的一部分。本節(jié)介紹Bonjour解決的問題及其解決方法。
為什么是Bonjour?
在過去的二十年中,計算機逐漸從AppleTalk、IPX和NetBIOS等特定于平臺的協(xié)議過渡到互聯(lián)網(wǎng)協(xié)議(IP)。大多數(shù)計算機和其他網(wǎng)絡(luò)設(shè)備都使用TCP/IP進行通信。然而,在這一過渡過程中,一部分功能喪失了將設(shè)備添加到本地網(wǎng)絡(luò),然后從計算機和網(wǎng)絡(luò)上的其他設(shè)備連接到這些設(shè)備的能力,所有這些都幾乎沒有配置。
為了使IP正常工作,每個設(shè)備都需要一個唯一的地址,無論是靜態(tài)分配還是由DHCP服務(wù)器動態(tài)分配。動態(tài)分配的地址可以更改,因此如果沒有Bonjour,打印機和其他設(shè)備必須手動配置靜態(tài)地址,以便網(wǎng)絡(luò)上的計算機可以訪問它們。然后,網(wǎng)絡(luò)管理員必須配置DNS服務(wù)器,以便計算機用戶不必通過IP地址連接到打印機。因此,看似次要的任務(wù)需要大量的配置。因為不適合傳統(tǒng)網(wǎng)絡(luò)管理員角色的人通常會建立網(wǎng)絡(luò)家庭,通過共享路由器將他們的筆記本電腦連接到互聯(lián)網(wǎng),例如,這種配置級別并不實用。
即使在IT專業(yè)人員運行的托管網(wǎng)絡(luò)中,也沒有必要為打印機等設(shè)備手動配置。人們希望能夠插入打印機,將兩臺筆記本電腦連接在一起,或者在本地網(wǎng)絡(luò)上查找文件服務(wù)器或游戲服務(wù)器,而不必浪費時間嘗試正確配置。
為了支持這一點,人們需要一種簡單可靠的方式來配置和瀏覽IP網(wǎng)絡(luò)上的服務(wù)。他們希望發(fā)現(xiàn)可用的服務(wù)并從列表中選擇一個,而不必事先知道每個服務(wù)的名稱或IP地址。IP擁有這種能力符合每個人的利益。這正是Bonjour提供的功能。
示例:零配置
零配置IP網(wǎng)絡(luò)具有很大的潛力??紤]一下打印的日常任務(wù)。在計算機或iOS設(shè)備上配置打印機后,只需選擇應(yīng)用程序的“打印”命令即可。
把你的筆記本電腦帶到客戶的公司或鄰居家,試著打印一些東西。如果他們有一臺支持Bonjour協(xié)議的打印機,打印就像在本地網(wǎng)絡(luò)上一樣簡單。要打印,請將筆記本電腦連接到客戶端的Wi-Fi接入點,然后啟動筆記本電腦?;蛘邌幽愕墓P記本電腦,它會立即找到鄰居的家庭無線網(wǎng)絡(luò)。無論哪種方式,您的筆記本電腦都會自動發(fā)現(xiàn)任何可用的打印機。打開文檔,選擇“打印”命令,“打印”對話框中將顯示所有可用的打印機。選擇打印機,單擊“打印”,文檔將打印。
或者說你想和朋友玩網(wǎng)絡(luò)游戲。你打開游戲,你朋友的游戲副本立即在網(wǎng)絡(luò)上看到你的副本?;蛘?#xff0c;如果你在兩臺電腦上有一個音樂共享應(yīng)用程序,這些程序本身可以發(fā)現(xiàn)彼此并立即交換歌曲列表。類似地,如果您有共享文件夾或打開了個人Web共享,您的共享文件和網(wǎng)頁將立即可供其他人使用。
該場景如圖1-1所示。在步驟1中,打開鄰居家中的筆記本電腦,筆記本電腦要么從路由器中的DHCP服務(wù)器獲取地址,要么在沒有DHCP服務(wù)器的情況下為自己分配一個可用的本地地址。在步驟2中,將查詢網(wǎng)絡(luò)中的可用打印機,以便在打開“打印”對話框時,列出鄰居的打印機。最后,在步驟3中,您打開計算機上的音樂共享,鄰居的計算機會看到并連接。
這些只是可以從零配置IP網(wǎng)絡(luò)中受益的現(xiàn)有應(yīng)用程序中的一小部分。零配置IP網(wǎng)絡(luò)具有增強移動游戲、家庭網(wǎng)絡(luò)、分布式計算和許多其他網(wǎng)絡(luò)應(yīng)用的潛力。此外,零配置IP網(wǎng)絡(luò)為一類全新的支持IP的數(shù)字設(shè)備打開了大門。
什么是Bonjour?
Bonjour是蘋果提出的IP零配置網(wǎng)絡(luò)方案。Bonjour來自ZEROCONF工作組的工作,該工作組是互聯(lián)網(wǎng)工程任務(wù)組(IETF)的一部分。ZEROCONF工作組對IP零配置網(wǎng)絡(luò)的要求和建議解決方案主要涵蓋三個方面:
- 尋址(為主機分配IP地址)
- 命名(使用名稱來指代主機,而不是IP地址)
- 服務(wù)發(fā)現(xiàn)(自動查找網(wǎng)絡(luò)上的服務(wù))
Bonjour為所有這三個領(lǐng)域提供了零配置解決方案,如下四節(jié)所述。
Bonjour允許服務(wù)提供商、硬件制造商和應(yīng)用程序程序員支持單一網(wǎng)絡(luò)協(xié)議IP,同時在易用性方面開辟新天地。
網(wǎng)絡(luò)用戶不再需要分配IP地址、分配主機名或甚至鍵入名稱來訪問網(wǎng)絡(luò)上的服務(wù)。用戶只需詢問可用的網(wǎng)絡(luò)服務(wù),然后從列表中選擇。
在許多方面,這種瀏覽對應(yīng)用程序來說甚至比對用戶來說更強大。應(yīng)用程序可以自動檢測他們需要的服務(wù)或他們可以與之交互的其他應(yīng)用程序,允許自動連接、通信和數(shù)據(jù)交換,而無需用戶干預(yù)。
尋址
尋址問題通過自分配鏈路本地尋址來解決。鏈路本地尋址使用為本地網(wǎng)絡(luò)保留的一系列地址,通常是小型LAN或單個LAN段。為此,IPv6規(guī)范將自分配鏈路本地尋址作為協(xié)議的一部分。零配置網(wǎng)絡(luò)的主要解決挑戰(zhàn)是將此功能升級為IPv4。
注意:IPv6鏈路本地尋址比IPv4鏈路本地尋址更簡單,因此更可靠。因此,您的應(yīng)用程序支持IPv6非常重要。
在IPv4中,自分配尋址通過在鏈路本地范圍中選擇一個隨機IP地址并對其進行測試來實現(xiàn)。如果該地址未被使用,它將成為您的本地地址。如果它已經(jīng)在使用,計算機或其他設(shè)備會隨機選擇另一個地址并重試。
注意:如果一個主機向另一個主機發(fā)送數(shù)據(jù)包時,整個鏈路層有效負載(物理網(wǎng)絡(luò)中表示的數(shù)據(jù)包內(nèi)容,如以太網(wǎng))未經(jīng)修改就到達,則兩個主機被視為位于同一本地鏈路上。實際上,在以太網(wǎng)網(wǎng)絡(luò)上,這意味著沒有IP路由器觸及兩個主機之間的數(shù)據(jù)包。
大多數(shù)主要操作系統(tǒng)都支持IPv4和IPv6中的鏈路本地尋址。硬件制造商應(yīng)在其設(shè)備上實現(xiàn)鏈路本地尋址,以獲得Bonjour的全部好處。
計算機或iOS設(shè)備上支持鏈接本地尋址的任何用戶或服務(wù)都會自動受益于此功能。當(dāng)您的主機遇到本地網(wǎng)絡(luò)時,它會找到一個未使用的本地地址并采用它。無需執(zhí)行任何操作
命名
所提出的本地網(wǎng)絡(luò)上的名稱到地址轉(zhuǎn)換解決方案使用多播DNS(mDNS),其中DNS格式查詢使用IP多播在本地網(wǎng)絡(luò)上發(fā)送。因為這些DNS查詢被發(fā)送到多播地址,所以不需要具有全局知識的單個DNS服務(wù)器來回答這些查詢。當(dāng)每個服務(wù)或設(shè)備看到對其自身名稱的查詢時,它可以提供自己的DNS功能,并提供具有自己地址的DNS響應(yīng)。
Bonjour走得更遠。它包括一個響應(yīng)器,用于處理主機或iOS設(shè)備上任何網(wǎng)絡(luò)服務(wù)的mDNS查詢。這使您的應(yīng)用程序無需解釋和響應(yīng)mDNS消息。通過注冊您的服務(wù),Bonjour mDNSResponder守護程序會自動通告您的服務(wù)可用性,以便對您的姓名的任何查詢都會自動指向正確的IP地址和端口號。
注意:注冊是使用Bonjour API之一執(zhí)行的。此功能僅適用于在主機或iOS設(shè)備上運行的服務(wù)。在其他設(shè)備(如打印機)上運行的服務(wù)需要實現(xiàn)一個簡單的mDNSResponder守護進程,該守護進程處理對該設(shè)備提供的服務(wù)的查詢。
Bonjour還為NAT端口映射協(xié)議(NAT-PMP)提供內(nèi)置支持。如果上游路由器支持此協(xié)議,OS X和iOS應(yīng)用程序可以創(chuàng)建和銷毀端口映射,以允許防火墻另一側(cè)的主機連接到提供的服務(wù)。(NAT端口映射將在“網(wǎng)絡(luò)概述”中的“防火墻和網(wǎng)絡(luò)地址轉(zhuǎn)換”中進一步描述。)
要使名稱到地址的轉(zhuǎn)換正常工作,必須在本地網(wǎng)絡(luò)上使用唯一的名稱。與傳統(tǒng)的DNS主機名不同,本地名稱僅在本地網(wǎng)絡(luò)或LAN段上有意義。您可以像自行分配本地地址一樣自行分配本地名稱,選擇一個;如果它還沒有使用,需要做下面的兩步:
1.硬件制造商通過讓他們的設(shè)備發(fā)送一個mDNS查詢來確定他們選擇的名稱是否已經(jīng)在使用,并查找任何響應(yīng)。如果有響應(yīng),設(shè)備應(yīng)選擇另一個名稱。沒有用戶界面的設(shè)備會將一個遞增的更大數(shù)字附加到默認名稱,直到該名稱唯一。例如,如果默認名稱為XYZ-LaserPrinter.local的打印機連接到已安裝其他兩臺相同打印機的本地網(wǎng)絡(luò),則會測試XYZ-LaserPrinter.local、XYZ-LaserPrinter-2.local和XYZ-LaserPrint er-3.local(未使用并成為其名稱)。
2.軟件服務(wù)在Bonjour注冊時提供名稱。如果提供的名稱已在使用中,Bonjour將默認自動為您重命名服務(wù)。
在OS X中,用戶可以通過“系統(tǒng)首選項”的“共享”窗格中的“本地主機名”設(shè)置為其計算機設(shè)置主機名。(在iOS中,主機名是自動生成的,不可配置。)在使用Web瀏覽器、命令行工具等常規(guī)DNS主機名的任何地方都可以使用此主機名。若要向系統(tǒng)指示名稱是本地主機名,請附加一個點(.)和本地。主機名;Steven.local.是本地主機名的一個示例。
重要提示:第一個點用作分隔符。為了防止應(yīng)用程序使用搜索域查找服務(wù),請通過在本地添加最后一個點來完全枚舉主機名。。
例如,如果用戶在Web瀏覽器中鍵入steve.local.,這將告訴系統(tǒng)在本地網(wǎng)絡(luò)上對steve的請求進行多播,而不是將其發(fā)送到傳統(tǒng)的DNS服務(wù)器。如果本地網(wǎng)絡(luò)上有一臺名為steve的啟用Bonjour的計算機,則會向用戶的瀏覽器發(fā)送正確的IP地址。這允許用戶在沒有常規(guī)DNS服務(wù)器的情況下訪問本地主機和服務(wù)。
注意:用戶可以避免在Bonjour主機名后鍵入.local.,方法是在“系統(tǒng)首選項”的“網(wǎng)絡(luò)”窗格的“搜索域”部分輸入local,以及任何其他DNS域,如apple.com或earthlink.net。在“網(wǎng)絡(luò)”面板的“搜索域名”部分列出的連續(xù)域中搜索不合格的名稱,如steve,在本例中為steve.apple.com,steve.eearthlink.net和steve.local。
可以了解下域命名慣例
服務(wù)發(fā)現(xiàn)
Bonjour的最后一個元素是服務(wù)發(fā)現(xiàn)。服務(wù)發(fā)現(xiàn)允許應(yīng)用程序查找特定類型服務(wù)的所有可用實例,并維護命名服務(wù)和端口號的列表。然后,應(yīng)用程序可以將服務(wù)主機名解析為IPv4和IPv6地址列表,如命名中所述。
命名服務(wù)列表提供了服務(wù)與其當(dāng)前DNS名稱和端口號之間的間接層。Indirection允許應(yīng)用程序保留可用服務(wù)的持久列表,并在使用服務(wù)之前解析實際的網(wǎng)絡(luò)地址。該列表允許動態(tài)重新定位服務(wù),而無需生成大量網(wǎng)絡(luò)流量來宣布更改。
Bonjour中的服務(wù)發(fā)現(xiàn)是通過“瀏覽”完成的。針對給定的服務(wù)類型和域發(fā)出mDNS查詢,任何匹配的服務(wù)都會回復(fù)其名稱。結(jié)果是可供選擇的可用服務(wù)列表。
這與傳統(tǒng)的以設(shè)備為中心的網(wǎng)絡(luò)服務(wù)理念非常不同。對于處理服務(wù)器、網(wǎng)絡(luò)設(shè)備和網(wǎng)絡(luò)編程的人來說,很容易養(yǎng)成從物理硬件角度考慮服務(wù)的習(xí)慣。在這種以設(shè)備為中心的視圖中,網(wǎng)絡(luò)由多個設(shè)備或主機組成,每個設(shè)備或主機都有一組服務(wù)。例如,網(wǎng)絡(luò)可能由一臺服務(wù)器機器和幾個客戶端機器組成。在以設(shè)備為中心的瀏覽方案中,客戶端向服務(wù)器查詢其正在運行的服務(wù),獲取列表(FTP、HTTP等),并決定使用哪個服務(wù)。界面反映了物理系統(tǒng)的組織方式。但這不一定是用戶邏輯上想要或需要的。
用戶通常希望完成某項任務(wù),而不是查詢設(shè)備列表以了解正在運行的服務(wù)。客戶只問一個問題:“有哪些打印服務(wù)可用?”比問每個可用的設(shè)備“您正在運行哪些服務(wù)?”并篩選結(jié)果以查找打印機更有意義。以設(shè)備為中心的方法不僅耗時,而且會產(chǎn)生大量的網(wǎng)絡(luò)流量,其中大部分都是無用的。以服務(wù)為中心的方法發(fā)送一個查詢,只生成相關(guān)的回復(fù)。
此外,服務(wù)不與特定的IP地址甚至主機名綁定。例如,網(wǎng)站可以由具有不同地址的多個服務(wù)器托管。在一個組織內(nèi),網(wǎng)絡(luò)管理員可能需要將服務(wù)從一個服務(wù)器移動到另一個服務(wù)器,以幫助平衡負載。如果客戶機存儲主機名(在大多數(shù)情況下,他們現(xiàn)在這樣做),那么如果服務(wù)移動到其他主機,他們將無法連接。
Bonjour采用面向服務(wù)的觀點。查詢是根據(jù)所需服務(wù)的類型而不是提供服務(wù)的主機進行的。應(yīng)用程序存儲服務(wù)實例名稱,而不是地址,因此如果IP地址、端口號甚至主機名發(fā)生了更改,應(yīng)用程序仍然可以連接。通過專注于服務(wù)而不是設(shè)備,用戶的瀏覽體驗變得更加有用和無故障
Bonjour如何減少開銷
無服務(wù)器尋址、命名和服務(wù)發(fā)現(xiàn)有可能產(chǎn)生大量的網(wǎng)絡(luò)流量,但Bonjour采取了許多步驟將流量降至最低。這使得Bonjour可以獲得AppleTalk的易用性,同時避免任何不必要的“閑聊”
Bonjour使用了幾種機制來減少零配置開銷,包括緩存、抑制重復(fù)響應(yīng)、指數(shù)回退和服務(wù)通告,如以下部分所述。
緩存
Bonjour使用多播DNS記錄緩存來防止主機請求已請求的信息。例如,當(dāng)一個主機請求LPR后臺打印程序列表時,打印機列表通過多播返回,因此所有本地主機都會看到它。下次主機需要后臺打印程序的列表時,它的緩存中已經(jīng)有了該列表,不需要重新發(fā)出查詢。多播DNS響應(yīng)者負責(zé)維護緩存;應(yīng)用程序開發(fā)人員不需要做任何事情來維護它。
抑制重復(fù)響應(yīng)
為了防止對同一查詢重復(fù)回答,Bonjour服務(wù)查詢包括一個已知答案列表。例如,如果主機正在瀏覽打印機,則第一個查詢不包括打印服務(wù),并從可用的打印服務(wù)器獲得12個答復(fù)。下次主機查詢打印服務(wù)時,查詢將包括已知服務(wù)器的列表。列表中已存在的打印服務(wù)器沒有響應(yīng)。
Bonjour以另一種方式抑制重復(fù)反應(yīng)。如果一個主機即將響應(yīng),并且注意到另一個主機已經(jīng)使用相同的信息進行了響應(yīng),則該主機將抑制其響應(yīng)。
應(yīng)用程序開發(fā)人員不需要采取任何措施來抑制重復(fù)響應(yīng)。Bonjour處理重復(fù)響應(yīng)抑制。
指數(shù)后退和服務(wù)公告
當(dāng)主機瀏覽服務(wù)時,它不會連續(xù)發(fā)送查詢以查看是否有新服務(wù)可用。相反,主機發(fā)出初始查詢并以指數(shù)方式減少后續(xù)查詢的頻率,例如:1秒后、3秒后、9秒后、27秒后等,最多間隔一小時。
這并不意味著瀏覽器需要一個多小時才能看到新服務(wù)。當(dāng)一個服務(wù)在網(wǎng)絡(luò)上啟動時,它會使用類似的指數(shù)后退算法幾次宣布其存在。這樣,服務(wù)通告和發(fā)現(xiàn)的網(wǎng)絡(luò)流量保持在最小,但新服務(wù)很快就會出現(xiàn)。
在配備Bonjour的主機上運行的服務(wù)在向mDNSResponder守護程序注冊時自動宣布。在其他硬件(如打印機)上運行的服務(wù)應(yīng)該以指數(shù)級回退的方式實現(xiàn)服務(wù)公告,以充分利用Bonjour。