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