徐澤君,黃建國,郭艷輝,馬敏
(電子科技大學(xué)自動(dòng)化工程學(xué)院 四川成都 611731)
基于LXI總線的儀器已經(jīng)成為當(dāng)前電子測試領(lǐng)域研究的熱門方向。LXI(LAN eXtensions for Instrumentiation)是以著名的工業(yè)標(biāo)準(zhǔn)以太網(wǎng)(Ethernet)技術(shù)為基礎(chǔ),構(gòu)成了一種適用于自動(dòng)測試系統(tǒng)的新一代模塊化儀器平臺(tái)標(biāo)準(zhǔn)[4]。利用成熟的計(jì)算機(jī)網(wǎng)絡(luò)技術(shù),可以很方便地組建基于LXI總線的分布式測試系統(tǒng)。然而由此帶來的問題就是主控制器如何快速簡便地發(fā)現(xiàn)網(wǎng)絡(luò)上的儀器設(shè)備。
在LXI 1.1標(biāo)準(zhǔn)中,LXI標(biāo)準(zhǔn)要求所有LXI儀器必須支持VXI-11網(wǎng)絡(luò)發(fā)現(xiàn)協(xié)議,該協(xié)議以O(shè)NC/RPC為基礎(chǔ),解決了分布式測試系統(tǒng)中儀器的網(wǎng)絡(luò)發(fā)現(xiàn)問題[5]。但是隨著測試系統(tǒng)的不斷擴(kuò)充升級,該協(xié)議的缺點(diǎn)也日益顯現(xiàn)出來。VXI-11協(xié)議屬于一種被動(dòng)的查詢模式,系統(tǒng)內(nèi)的儀器需要等待主控制器發(fā)來的查詢信息,然后返回應(yīng)答信息,這樣主控制器才能發(fā)現(xiàn)儀器存在于本系統(tǒng)中,如果中途有新的儀器加入系統(tǒng),主控制器并不能立即感應(yīng)到新儀器,只有重新查詢才能發(fā)現(xiàn)新的儀器設(shè)備[6],而且當(dāng)系統(tǒng)中儀器較多時(shí),這樣的查詢過程會(huì)很慢,會(huì)影響測試系統(tǒng)整體的測試效率。
針對以上VXI-11協(xié)議的不足,LXI聯(lián)盟在 1.1之后的版本中提出了新的網(wǎng)絡(luò)發(fā)現(xiàn)協(xié)議——基于mDNS的網(wǎng)絡(luò)發(fā)現(xiàn)協(xié)議。通過mDNS協(xié)議,LXI設(shè)備可以進(jìn)行更加高效,便捷的發(fā)現(xiàn)操作。
mDNS是由IETF Zeroconf和DNS 擴(kuò)展工作組成員共同努力的成果,mDNS對DNS做了最小化的更改,能夠?yàn)楸镜匦⌒途W(wǎng)絡(luò)提供類似DNS的服務(wù)。mDNS協(xié)議使用和DNS協(xié)議一樣的編程接口,運(yùn)行語義和數(shù)據(jù)包格式[3]。DNS協(xié)議是一種標(biāo)準(zhǔn)的網(wǎng)絡(luò)協(xié)議,mDNS協(xié)議只是增加了DNS協(xié)議所沒有的多播模式,因此開發(fā)基于mDNS協(xié)議的程序比較簡單。
在本地組建的小型網(wǎng)絡(luò)內(nèi),比如分布式的測試系統(tǒng),如果想要實(shí)現(xiàn)域名解析的功能,需要為該網(wǎng)絡(luò)配備一臺(tái)DNS服務(wù)器,這樣做不僅成本昂貴而且需要的技術(shù)復(fù)雜,因此mDNS的出現(xiàn)彌補(bǔ)了這一缺陷。使用mDNS技術(shù)使網(wǎng)絡(luò)內(nèi)每臺(tái)設(shè)備都具備DNS服務(wù)器的功能,從而不必為網(wǎng)絡(luò)單獨(dú)配備一臺(tái)DNS服務(wù)器,大大節(jié)約了成本。
mDNS協(xié)議是一種端到端的名稱服務(wù),當(dāng)設(shè)備加入網(wǎng)絡(luò)時(shí),主動(dòng)向多播地址(224.0.0.251)和端口號(hào)(5353)通告自己的主機(jī)名和能夠提供的服務(wù)[3],這樣使得主控器和其他設(shè)備能夠立刻感應(yīng)到新的設(shè)備。
DNS-SD協(xié)議是一種以mDNS協(xié)議為基礎(chǔ)的服務(wù)發(fā)現(xiàn)協(xié)議,通過該協(xié)議LXI設(shè)備可以向本地網(wǎng)絡(luò)通告自身所能提供的服務(wù)名稱。DNS-SD協(xié)議利用DNS協(xié)議中的PTR、SRV和TXT記錄來聲明所能提供的服務(wù),它工作在單播和多播兩種模式下[1]。SRV記錄通告發(fā)現(xiàn)的主機(jī)名和端口號(hào),PTR記錄保存LXI設(shè)備的服務(wù)名稱。通過PTR記錄查找一個(gè)具體的服務(wù)類型列表來實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)的功能,所以僅通過查找?guī)в蟹?wù)類型標(biāo)簽的PTR記錄就可以找到相應(yīng)的服務(wù)。PTR記錄僅包含一條信息,那就是服務(wù)名稱,和SRV記錄的命名方式類似。SRV資源記錄把服務(wù)名字映射為提供服務(wù)的服務(wù)器名字,其中包含了服務(wù)器的域名和端口號(hào)[2]。
在某些情況下網(wǎng)絡(luò)發(fā)現(xiàn)需要獲得除了IP地址和端口號(hào)之外的更多信息,TXT記錄就是用來保存域名的附加文本信息,其內(nèi)容要按照一定的格式編寫。TXT記錄里名稱和值成對出現(xiàn),最大長度不超過255個(gè)字節(jié),并且任何服務(wù)名稱都有一個(gè)“txtvers”記錄,該記錄指明版本號(hào),總是放在首位,例如“txtvers=1”。TXT記錄的結(jié)尾沒有結(jié)束符,包含的字節(jié)總數(shù)要少于1300,以適應(yīng)網(wǎng)絡(luò)單幀所能發(fā)送的字節(jié)數(shù)。特別的是主機(jī)名和端口號(hào)必須保存在SRV記錄中,不能“key=value”的形式存在于TXT記錄中。圖1是TXT記錄的一種組成形式[3]:
圖1 TXT記錄的組成形式
其中附加信息之前的數(shù)字表示的是附加信息的字符串長度。
LXI協(xié)議要求支持DNS-SD協(xié)議的設(shè)備至少可以通告如圖2所示的服務(wù)信息。
其中針對HTTP服務(wù),TXT關(guān)鍵字部分的內(nèi)容是:
_http._tcp txtvers=1 path=/
針對LXI服務(wù),TXT關(guān)鍵字部分的內(nèi)容是:
LXI服務(wù)的TXT記錄中保存的信息有生產(chǎn)廠商,型號(hào),串號(hào),固件版本號(hào),這與向儀器發(fā)送*IDN?命令之后返回的信息是一致的。
圖2 LXI基本服務(wù)
mDNS實(shí)現(xiàn)由兩部分組成,一部分是上位機(jī)mDNS客戶端,另一部分是儀器內(nèi)部mDNS 服務(wù)器端。
上位機(jī)mDNS客戶端的作用是實(shí)現(xiàn)發(fā)現(xiàn)網(wǎng)絡(luò)上的儀器和進(jìn)行資源管理,功能類似于Agilent公司提供的IO Libraries。APPLE公司在mDNS協(xié)議的實(shí)現(xiàn)應(yīng)用上已經(jīng)比較成熟,其mDNS協(xié)議的實(shí)現(xiàn)被稱為Bonjour。支持Bonjour的設(shè)備在網(wǎng)絡(luò)中自動(dòng)傳播它們自己的服務(wù)信息并聆聽其它設(shè)備的服務(wù)信息,Bonjour使局域網(wǎng)中的系統(tǒng)和服務(wù)在沒有網(wǎng)絡(luò)管理員的情況下很容易被找到。
Bonjour顯示局域網(wǎng)內(nèi)支持組播域名協(xié)議的設(shè)備和應(yīng)用的名稱,采用multicast DNS來解決區(qū)域網(wǎng)內(nèi)設(shè)備命名沖突。目前Bonjour可以支持多種系統(tǒng)平臺(tái),包括Windows、MAC OS X、Linux和VxWorks等。Linux中廣泛使用的mDNS協(xié)議實(shí)現(xiàn)是Avahi,同樣是一種zeroconf協(xié)議的實(shí)現(xiàn)。
在這里使用APPLE公司的軟件Bonjour(Windows版本)作為上位機(jī)mDNS客戶端,該軟件不僅能夠?qū)崿F(xiàn)網(wǎng)絡(luò)發(fā)現(xiàn)主機(jī)名和服務(wù)名,而且會(huì)在IE瀏覽器下安裝一個(gè)Bonjour插件,該插件可以自動(dòng)顯示網(wǎng)絡(luò)中支持mDNS協(xié)議的并提供WEB服務(wù)的設(shè)備主機(jī)名。
瀏覽器左邊的列表框用來顯示網(wǎng)絡(luò)中儀器的主機(jī)名。當(dāng)支持mDNS協(xié)議的儀器加入到網(wǎng)絡(luò)中時(shí),列表中就會(huì)自動(dòng)顯示儀器的主機(jī)名。
儀器內(nèi)部mDNS服務(wù)器的主要功能是向多播地址224.0.0.251和端口號(hào)5353發(fā)送數(shù)據(jù)包聲明本地的主機(jī)名和服務(wù)名,并且解決主機(jī)名和服務(wù)器名沖突的問題。程序流程圖如圖3所示。
圖3 服務(wù)器端程序設(shè)計(jì)流程圖
在儀器啟動(dòng)時(shí),mDNS服務(wù)器端程序?qū)@取本地主機(jī)名、服務(wù)器名、IP地址和端口號(hào)等信息,建立本地DNS數(shù)據(jù)庫,然后組建mDNS數(shù)據(jù)包,主機(jī)名和端口號(hào)包含在SRV記錄中,服務(wù)名稱包含在PTR記錄中,TXT記錄包含生產(chǎn)廠商等附加信息。組建完數(shù)據(jù)包之后向多播地址224.0.0.251和5353端口發(fā)送該數(shù)據(jù)包,本機(jī)的儀器信息將會(huì)在本地局域網(wǎng)內(nèi)傳播,凡是加入到該多播組的設(shè)備都能收到該數(shù)據(jù)包。主控制器收到儀器發(fā)送過來的數(shù)據(jù)包之后就能夠提取出儀器的主機(jī)名和IP地址等信息,進(jìn)而通過這些信息獲取儀器信息。
為了避免網(wǎng)絡(luò)中的主機(jī)名發(fā)生沖突,引起設(shè)備混淆。在聲明本地信息的同時(shí),儀器還在監(jiān)聽5353端口,看是否收到其他設(shè)備發(fā)來的具有相同格式信息的數(shù)據(jù)包。如果收到其他設(shè)備發(fā)來的數(shù)據(jù)包,那將數(shù)據(jù)包內(nèi)的儀器的主機(jī)名提取出來,與本地的主機(jī)名進(jìn)行比較,假如一樣,那就發(fā)生了名字沖突,本地的設(shè)備將會(huì)修改本機(jī)的名稱,修改的方法是在原來名稱的后面加上數(shù)字來加以區(qū)別,例如本地主機(jī)名為“mydevice”,那將會(huì)修改為“mydevice_1”,這樣就避免了主機(jī)名沖突。
如果本地主機(jī)名因?yàn)槊Q沖突而改變,那么該主機(jī)名將不會(huì)輕易再改變,即使在儀器重啟之后,本地主機(jī)名仍然是修改后的名稱。除非用戶重新設(shè)置主機(jī)名,或者啟動(dòng)LAN配置重啟機(jī)制,那么主機(jī)名將會(huì)恢復(fù)到出廠設(shè)置的主機(jī)名。如果服務(wù)名稱也由于名稱沖突而改變,其處理方法與處理主機(jī)名沖突的方法一致。
如果監(jiān)聽端口沒有收到其它儀器發(fā)送過來的mDNS數(shù)據(jù)包,那么該儀器將繼續(xù)組建包含本機(jī)信息的mDNS數(shù)據(jù)包并且持續(xù)向多播地址發(fā)送。用戶需要停止mDNS功能時(shí)候,可以讓儀器在停止之前發(fā)送停止數(shù)據(jù)包,告知網(wǎng)絡(luò)上的其他設(shè)備本機(jī)將停止提供mDNS服務(wù)功能,這樣主控器收到停止數(shù)據(jù)包后將會(huì)把列表中的儀器主機(jī)名刪除。如果用戶重新啟用儀器的mDNS服務(wù),主控制器的列表中就會(huì)重新出現(xiàn)儀器的主機(jī)名。
為了與DNS名稱解析域相區(qū)分,運(yùn)行mDNS協(xié)議的設(shè)備都位于“.local”域中,表明要訪問的設(shè)備在本地網(wǎng)絡(luò)中。如果用戶想要使用主機(jī)名來訪問設(shè)備主頁,那么用戶可以在瀏覽器的地址欄輸入主機(jī)名加“.local”的方式來訪問。假如設(shè)備主機(jī)名為“mydevice”,那么就可以在IE瀏覽器地址欄輸入“mydevice.local”,然后瀏覽器同樣會(huì)向多播地址224.0.0.251和端口號(hào)5353發(fā)送DNS請求數(shù)據(jù)包,然后儀器端的mDNS服務(wù)器程序就會(huì)解析該請求,并且將儀器的IP地址和端口號(hào)返回給瀏覽器,這樣瀏覽器就可以訪問設(shè)備主頁了。
打開主控電腦的IE瀏覽器,將主控電腦與LXI設(shè)備同時(shí)連接到交換機(jī)上,打開設(shè)備,IE瀏覽器內(nèi)的Bonjour插件的窗口上就會(huì)自動(dòng)顯示網(wǎng)絡(luò)中支持mDNS協(xié)議并且提供WEB服務(wù)的設(shè)備名。如圖4所示。
圖4 Bonjour列表
在上圖中,雙擊Bonjour列表里的設(shè)備名“UESTC_LXI”,則瀏覽器自動(dòng)去訪問“uestc_lxi.local”,并且打開設(shè)備的主頁。
實(shí)現(xiàn)HTTP服務(wù)發(fā)現(xiàn)功能還可以通過另外一種形式,那就是可以在命令行提示符下輸入命令[7]:
dns-sd-Z _http._tcp local
通過此命令可以看到mDNS數(shù)據(jù)包中各種記錄的詳細(xì)內(nèi)容,如圖5所示。
圖5 HTTP服務(wù)發(fā)現(xiàn)結(jié)果
同樣的方法,在命令行下輸入命令:
dns-sd-Z _lxi._tcp local
通過此命令來發(fā)現(xiàn)LXI服務(wù),返回的儀器信息與向儀器發(fā)送*IDN?命令所返回的信息是一致的。如圖6所示。
圖6 LXI服務(wù)發(fā)現(xiàn)結(jié)果
VXI-11協(xié)議是LXI儀器的基本的網(wǎng)絡(luò)發(fā)現(xiàn)協(xié)議,mDNS協(xié)議的出現(xiàn)彌補(bǔ)了VXI-11協(xié)議速度慢,更新不及時(shí)的缺點(diǎn),實(shí)現(xiàn)了快速簡潔的網(wǎng)絡(luò)發(fā)現(xiàn)功能。本文基于LXI 1.3版本對mDNS協(xié)議的規(guī)定,實(shí)現(xiàn)了HTTP服務(wù)和LXI服務(wù)名的發(fā)現(xiàn)功能,并且解決了名稱沖突問題。在組建復(fù)雜的LXI測試系統(tǒng)中,mDNS協(xié)議將會(huì)在網(wǎng)絡(luò)發(fā)現(xiàn)方面發(fā)揮很好的作用。
[1]王巖,王雄,曾鵬.零配置網(wǎng)絡(luò)協(xié)議的研究[J].計(jì)廣東通信技術(shù),20075,3(12):1685-1687.
[2]王彪. LXI關(guān)鍵技術(shù)研究[D].哈爾濱:哈爾濱工業(yè)大學(xué),2009.
[3]Ashley Butterworth,Matthew Xavier Mora.Device Discovery with mDNS and DNS-SD [P].Apple Inc,2009.
[4]馬敏,陳光礻禹.一種基于以太網(wǎng)的新型儀器平臺(tái)——LXI[J].電測與儀表,2006,43(1):57-59.
[5]LXI Standard Rev.1.3[S]. LXI Consortium, Inc.,October30.2008.
[6]鐘世春,馬敏,王厚軍. LXI儀器中VXI-11協(xié)議的研究與實(shí)現(xiàn)[J].電子科技大學(xué)學(xué)報(bào),2010,39(4):65-66.
[7]趙濤,于月芬,李建剛. LXI總線網(wǎng)絡(luò)發(fā)現(xiàn)機(jī)制研究[J].電測與儀表,2008,45(510):31-34.