zeroconf研究筆記(1) ——zeroconf初步認識
最近對zeroconf協議進行了一系列深入的研究,深深地被這一技術折服,在1999年就出現的該協議,在技術的應用上已經走向成熟,走向向大眾普及之路了。
apple的airplay,airprint都是依賴了zeroconf的基礎上,才展現出強大的功能。
zeroconf介紹
Zeroconf全稱為Zero configuration networking,中文名則為零配置網路服務規範,是一種用於自動生成可用IP地址的網路技術,不需要額外的手動配置和專屬的配置伺服器。
“零配置網路服務”的目標,是讓非專業使用者也能便捷的連線各種網路裝置,例如計算機,印表機等。整個搭建網路的過程都是通過程式自動化實現。如果沒有zeroconf,使用者必須手動配置一些服務,例如DHCP、DNS,計算機網路的其他設定等。這些對非技術使用者和新使用者們來說是很難的事情。
使用例子來形象地說明:
使用者擁有一臺apple tv和一臺iPhone4s,那之只要都連入到同一個無線區域網內,iphone4s就會自動找出apple tv,那麼在播放音樂或者視訊時候,使用者只要點選推送,就可以講音樂和視訊推送到apple tv上播放。
zeroconf協議的實現
zeroconf是協議,因此對應的是各種產品的實現,現在最主要的實現是apple的Bonjour和開源的Avahi。
這兩套實現在程式介面上是可以相容的,因此可以對zeroconf技術依賴的產品,可以使用相容的開發介面,而不需要考慮到底是使用了Bonjour還是avahi。
Apple的zeroconf協議技術實現 – Bonjour
Bonjour是由apple實現的zeroconf協議的技術產品,Bonjour來源於法語,意思為你好。
使用了zeroconf技術的產品和服務,在網路中自動傳播它們自己的服務資訊並聆聽其它裝置的服務資訊,裝置之間就象在打招呼,這也是命名為Bonjour(法語:你好)的原因。
Bonjour是一套跨平臺的產品,可以使用在Mac,Linux和Winows,以及是相容POSIX的作業系統上,並且apple已經將其開源,所以也可以方便應用於各個產品。
Bonjour是由純C編寫的,同時也提供了Java的介面,目前如python或者ruby語言也可以很方便地呼叫使用它。
開源的zeroconf協議技術實現 – Avahi
Avahi 是Zeroconf規範的開源實現,基本是使用在Linux和FreeBSD上。包含了一整套多播DNS(multicastDNS)/DNS-SD網路服務的實現,使用的釋出授權是LGPL。
在程式介面上,它使用DNSD與apple的Bonjour進行相容,方便原來使用Bonjour的產品進行遷移。
目前在絕大多數的Linux發行版本中,都講avahi作為系統啟動程序,並且大量的服務也依賴於avahi。
Avahi也是用純C編寫的,同樣也可以使用諸如Java的語言去呼叫使用開發產品或者服務。
嵌入式中的zeroconf – WiSe-Zeroconf
Wise-Zeroconf是Wise公司基於開源的Bonjour的基礎上,提供給嵌入式產品的zeroconf技術實現。
由於是商業產品,詳細資料不想,但是基本功能與Bonjour應該基本相同。
zeroconf最基礎原理
zerconf協議主要是定義了三個層次:
1.不需利用dhcp server取得 裝置地址如IP的相關資料
RFC 3927 , Dynamic Configuration of IPv4 Link-Local Addresses
http://www.ietf.org/rfc/rfc3927.txt
2.不需要通過DNS server就轉換domain name和IP的關係
Multicast DNS
http://files.multicastdns.org/draft-cheshire-dnsext-multicastdns.txt
3.利用 DNS-SD來取得裝置服務,而不需通過directory server
DNS-based Service Discovery, or DNS-SD.
http://files.dns-sd.org/draft-cheshire-dnsext-dns-sd.txt
zeroconf的未來分析
雖然zeroconf協議名聲不大,即使是計算機專業開發人員也知之甚少,但是其實由於這幾年apple發展的強勢,其應用已經越來越廣。
比如在iOS4.2推出時候的airplay,以及airprint都是在這基礎上實現的,甚至iOS5.0後的air mirroing技術,也是在zeroconf技術上實現的。
可以預想在未來,zeroconf和DLNA將會有激烈的競爭關係。
ps: XBMC中有Airplay Server的相關程式碼,值得好好看看!