胡浩
摘 要:基于DNS的服務(wù)發(fā)現(xiàn)(DNS-SD)是一種可以使用標(biāo)準(zhǔn)DNS編程接口、數(shù)據(jù)包格式和服務(wù)器瀏覽機(jī)制。DNS-SD定義了如何命名和排列dns記錄,即指針(Ptr)、服務(wù)定位器(Srv)、IPv6地址(AAAA)和文本(Txt),目的是方便在子域中的服務(wù)發(fā)現(xiàn)。DNS-SD不改變DNS消息、操作代碼、記錄類(lèi)型或任何其他DNS協(xié)議值的結(jié)構(gòu)。廣義地說(shuō),DNS-SD服務(wù)器包含服務(wù)列表,服務(wù)具有<Instance>.<ServiceType>.<Domain>的標(biāo)準(zhǔn)格式。
關(guān)鍵詞:DNS;服務(wù)發(fā)現(xiàn)
1.分布式DNS服務(wù)發(fā)現(xiàn)
mDNS多播DNS(mDNS)將DNS規(guī)范擴(kuò)展到?jīng)]有基礎(chǔ)設(shè)施的網(wǎng)絡(luò),其中設(shè)備查詢(xún)本地域,通過(guò)多播而不是通過(guò)單播查詢(xún)DNS服務(wù)器。
mDNS在DNS規(guī)范中添加了一個(gè).local域,一個(gè)公開(kāi)的多播端口和地址,并定義了如何管理單個(gè)查詢(xún)的多個(gè)結(jié)果。在基于分布式dns服務(wù)發(fā)現(xiàn)中,設(shè)備可以使用mDNS通告發(fā)布有關(guān)它們提供的服務(wù)和資源的信息,這些通告具有與標(biāo)準(zhǔn)dns查詢(xún)格式相同的格式,但被發(fā)送到IPv6多播地址FF02:FB。這些通告可以包括具有域名的服務(wù)類(lèi)型和名稱(chēng)(PTR記錄)(在mDNS的情況下是本地域)、主機(jī)名和端口(SRV記錄)、地址(AAAA記錄)以及設(shè)備的擴(kuò)展描述(TXT記錄)。
在樓宇自動(dòng)化控制中,智能燈將通過(guò)在其mDNS通告中包含ptr、srv和txt記錄來(lái)發(fā)布其服務(wù)。PTR記錄定義了服務(wù)與服務(wù)實(shí)例的映射,例如服務(wù)為_(kāi)light._sub.coap._udp.test.local,其中coap._udp為服務(wù)的類(lèi)型,定義了所使用的協(xié)議(例如,CoAP/UDP),_light為服務(wù)的子類(lèi)型表示被訪問(wèn)的資源(比如燈)。test.local為本地域,其服務(wù)的實(shí)例是LIGHT1_bc._sub.coap._udp.test.local,其中LIGHT_bc為實(shí)例的名稱(chēng),可以為同一服務(wù)定義多個(gè)ptr以啟用不同的查詢(xún)格式。
服務(wù)實(shí)例LIGHT1_bc的SRV記錄描述了如何訪問(wèn)服務(wù)。這包括主機(jī)名URI(例如,light1.test.local)、端口(例如,5683)、優(yōu)先級(jí)(其中零表示最大優(yōu)先級(jí)),以及具有相同優(yōu)先級(jí)的記錄的相對(duì)權(quán)重。
txt記錄總是與srv一起定義的,以便提供更多的描述。TXT記錄提供了資源的路徑(path=/lt/1/on)和資源類(lèi)型(rt=ipso.lt.on)。
一旦相關(guān)的客戶(hù)端(如智能開(kāi)關(guān))擁有記錄中包含的所有信息,它將使用所獲得的信息(解析后)來(lái)訪問(wèn)燈資源。
如果客戶(hù)端沒(méi)有收到mDNS通告,分布式DNS服務(wù)發(fā)現(xiàn)還允許通過(guò)向多播地址發(fā)送標(biāo)準(zhǔn)DNS查詢(xún)來(lái)發(fā)現(xiàn)服務(wù)器中的服務(wù)。比如查找其本地域中的任何燈,dns查詢(xún)將只包含ptr,ptr用來(lái)表示智能開(kāi)關(guān)只希望找到匹配特定的服務(wù)(_light._sub._coap._udp)的設(shè)備,智能燈將用服務(wù)實(shí)例(例如,LIGHT1_bc)的PTR記錄答復(fù)智能開(kāi)關(guān)。智能開(kāi)關(guān)接收智能燈服務(wù)的實(shí)例后,需要解析出智能燈的URI。為此,智能開(kāi)關(guān)會(huì)請(qǐng)求智能燈提供服務(wù)實(shí)例對(duì)應(yīng)的SRV和TXT,SRV和TXT將提供IP地址、端口、路徑和其他相關(guān)的信息。最后,客戶(hù)端設(shè)備智能開(kāi)關(guān)就可以使用獲得的信息與已發(fā)現(xiàn)的智能燈的功能進(jìn)行交互。
2.集中式DNS服務(wù)發(fā)現(xiàn)
在集中式DNS服務(wù)發(fā)現(xiàn)中,假定DNS-SD服務(wù)器可在網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)中使用。DNS-SD服務(wù)器存儲(chǔ)其子域中的設(shè)備提供的服務(wù)。與CoAP RD類(lèi)似,這些設(shè)備先必須在DNS-SD中注冊(cè)它們的服務(wù)。但與CoAP RD不同的是,沒(méi)有定義標(biāo)準(zhǔn)的DNS注冊(cè)消息。注冊(cè)消息的最常見(jiàn)實(shí)現(xiàn)來(lái)源于蘋(píng)果的Bonjour,它重用mDNS發(fā)布消息來(lái)在DNS-SD中注冊(cè)服務(wù)描述,因此DNS-SD以mDNS為基礎(chǔ),如果DNS-SD地址未知,注冊(cè)消息可以通過(guò)多播地址發(fā)送(這和mDNS類(lèi)似),如果DNS-SD地址已知,可以直接發(fā)送到DNS服務(wù)器的單播地址。或者,設(shè)備可以通過(guò)瀏覽公開(kāi)的服務(wù)_b._DNS-SD.udp.local(_b為服務(wù)的子類(lèi)型,DNS-SD.udp為服務(wù)的類(lèi)型)來(lái)發(fā)現(xiàn)DNS-SD服務(wù)器地址。最后,當(dāng)DNS-SD服務(wù)器處于不同的子網(wǎng)中時(shí),必須使用全局DNS-SD進(jìn)程。
目前,全局DNS-SD無(wú)法自動(dòng)發(fā)現(xiàn)遠(yuǎn)程服務(wù)器的地址。因此,假設(shè)DNS-SD服務(wù)器地址已經(jīng)已知,例如通過(guò)IPv6路由器通告,智能燈將單播發(fā)送發(fā)布消息到全局DNS服務(wù)器以注冊(cè)服務(wù)。因?yàn)檫h(yuǎn)程DNS-SD服務(wù)器與智能燈不在同一個(gè)子網(wǎng),服務(wù)器將無(wú)法觀察該網(wǎng)絡(luò)內(nèi)的服務(wù)和資源的變化,例如,如果由于連通性的丟失而無(wú)法再到達(dá)智能燈。為了解決這個(gè)問(wèn)題,IETF定義了一種稱(chēng)為動(dòng)態(tài)DNS更新的同步機(jī)制[1]。動(dòng)態(tài)dns更新利用dnsd服務(wù)器記錄中增加生存期參數(shù)。每t分鐘更新一次的記錄(t=30分鐘是建議的值)。如果資源在此時(shí)間范圍內(nèi)未更新,則將從DNS-SD中刪除該資源。此外,IETF還定義DNS長(zhǎng)壽命查詢(xún),允許客戶(hù)端觀察服務(wù)注冊(cè)中的任何更改[2]。
最后,DNS-SD可以在公開(kāi)的服務(wù)_services._dnssd._udp._local(_services為服務(wù)的子類(lèi)型,DNS-SD.udp為服務(wù)的類(lèi)型)下自動(dòng)注冊(cè)所有服務(wù)。這允許瀏覽在目錄中注冊(cè)的所有服務(wù),CoAP的/wellknow/core與此類(lèi)似,一旦注冊(cè)過(guò)程結(jié)束,任何設(shè)備都可以通過(guò)DNS查詢(xún)查找到DNS-SD服務(wù)器的服務(wù)。與分布式DNS不同,來(lái)自DNS-SD服務(wù)器的單個(gè)響應(yīng)包括網(wǎng)絡(luò)中與請(qǐng)求類(lèi)型匹配的所有注冊(cè)服務(wù)。在接收到服務(wù)實(shí)例后,解析過(guò)程必須通過(guò)全局DNS-SD服務(wù)器執(zhí)行。
參考文獻(xiàn)
[1] P. Vixie,S. Thomson,Y. Rekhter and J. Bound. Dynamic Updates in the Domain Name System(DNS UPDATE),Internet Engineering Task Force,RFC 2136. 1997
[2] S. Cheshire,M. Krochmal,K. Sekar. DNS Long-Lived Queries