徐澤君,黃建國,郭艷輝,馬敏
(電子科技大學自動化工程學院 四川成都 611731)
基于LXI總線的儀器已經成為當前電子測試領域研究的熱門方向。LXI(LAN eXtensions for Instrumentiation)是以著名的工業標準以太網(Ethernet)技術為基礎,構成了一種適用于自動測試系統的新一代模塊化儀器平臺標準[4]。利用成熟的計算機網絡技術,可以很方便地組建基于LXI總線的分布式測試系統。然而由此帶來的問題就是主控制器如何快速簡便地發現網絡上的儀器設備。
在LXI 1.1標準中,LXI標準要求所有LXI儀器必須支持VXI-11網絡發現協議,該協議以ONC/RPC為基礎,解決了分布式測試系統中儀器的網絡發現問題[5]。但是隨著測試系統的不斷擴充升級,該協議的缺點也日益顯現出來。VXI-11協議屬于一種被動的查詢模式,系統內的儀器需要等待主控制器發來的查詢信息,然后返回應答信息,這樣主控制器才能發現儀器存在于本系統中,如果中途有新的儀器加入系統,主控制器并不能立即感應到新儀器,只有重新查詢才能發現新的儀器設備[6],而且當系統中儀器較多時,這樣的查詢過程會很慢,會影響測試系統整體的測試效率。
針對以上VXI-11協議的不足,LXI聯盟在 1.1之后的版本中提出了新的網絡發現協議——基于mDNS的網絡發現協議。通過mDNS協議,LXI設備可以進行更加高效,便捷的發現操作。
mDNS是由IETF Zeroconf和DNS 擴展工作組成員共同努力的成果,mDNS對DNS做了最小化的更改,能夠為本地小型網絡提供類似DNS的服務。mDNS協議使用和DNS協議一樣的編程接口,運行語義和數據包格式[3]。DNS協議是一種標準的網絡協議,mDNS協議只是增加了DNS協議所沒有的多播模式,因此開發基于mDNS協議的程序比較簡單。
在本地組建的小型網絡內,比如分布式的測試系統,如果想要實現域名解析的功能,需要為該網絡配備一臺DNS服務器,這樣做不僅成本昂貴而且需要的技術復雜,因此mDNS的出現彌補了這一缺陷。使用mDNS技術使網絡內每臺設備都具備DNS服務器的功能,從而不必為網絡單獨配備一臺DNS服務器,大大節約了成本。
mDNS協議是一種端到端的名稱服務,當設備加入網絡時,主動向多播地址(224.0.0.251)和端口號(5353)通告自己的主機名和能夠提供的服務[3],這樣使得主控器和其他設備能夠立刻感應到新的設備。
DNS-SD協議是一種以mDNS協議為基礎的服務發現協議,通過該協議LXI設備可以向本地網絡通告自身所能提供的服務名稱。DNS-SD協議利用DNS協議中的PTR、SRV和TXT記錄來聲明所能提供的服務,它工作在單播和多播兩種模式下[1]。SRV記錄通告發現的主機名和端口號,PTR記錄保存LXI設備的服務名稱。通過PTR記錄查找一個具體的服務類型列表來實現服務發現的功能,所以僅通過查找帶有服務類型標簽的PTR記錄就可以找到相應的服務。PTR記錄僅包含一條信息,那就是服務名稱,和SRV記錄的命名方式類似。SRV資源記錄把服務名字映射為提供服務的服務器名字,其中包含了服務器的域名和端口號[2]。
在某些情況下網絡發現需要獲得除了IP地址和端口號之外的更多信息,TXT記錄就是用來保存域名的附加文本信息,其內容要按照一定的格式編寫。TXT記錄里名稱和值成對出現,最大長度不超過255個字節,并且任何服務名稱都有一個“txtvers”記錄,該記錄指明版本號,總是放在首位,例如“txtvers=1”。TXT記錄的結尾沒有結束符,包含的字節總數要少于1300,以適應網絡單幀所能發送的字節數。特別的是主機名和端口號必須保存在SRV記錄中,不能“key=value”的形式存在于TXT記錄中。圖1是TXT記錄的一種組成形式[3]:

圖1 TXT記錄的組成形式
其中附加信息之前的數字表示的是附加信息的字符串長度。
LXI協議要求支持DNS-SD協議的設備至少可以通告如圖2所示的服務信息。
其中針對HTTP服務,TXT關鍵字部分的內容是:
_http._tcp txtvers=1 path=/
針對LXI服務,TXT關鍵字部分的內容是:

LXI服務的TXT記錄中保存的信息有生產廠商,型號,串號,固件版本號,這與向儀器發送*IDN?命令之后返回的信息是一致的。

圖2 LXI基本服務
mDNS實現由兩部分組成,一部分是上位機mDNS客戶端,另一部分是儀器內部mDNS 服務器端。
上位機mDNS客戶端的作用是實現發現網絡上的儀器和進行資源管理,功能類似于Agilent公司提供的IO Libraries。APPLE公司在mDNS協議的實現應用上已經比較成熟,其mDNS協議的實現被稱為Bonjour。支持Bonjour的設備在網絡中自動傳播它們自己的服務信息并聆聽其它設備的服務信息,Bonjour使局域網中的系統和服務在沒有網絡管理員的情況下很容易被找到。
Bonjour顯示局域網內支持組播域名協議的設備和應用的名稱,采用multicast DNS來解決區域網內設備命名沖突。目前Bonjour可以支持多種系統平臺,包括Windows、MAC OS X、Linux和VxWorks等。Linux中廣泛使用的mDNS協議實現是Avahi,同樣是一種zeroconf協議的實現。
在這里使用APPLE公司的軟件Bonjour(Windows版本)作為上位機mDNS客戶端,該軟件不僅能夠實現網絡發現主機名和服務名,而且會在IE瀏覽器下安裝一個Bonjour插件,該插件可以自動顯示網絡中支持mDNS協議的并提供WEB服務的設備主機名。
瀏覽器左邊的列表框用來顯示網絡中儀器的主機名。當支持mDNS協議的儀器加入到網絡中時,列表中就會自動顯示儀器的主機名。
儀器內部mDNS服務器的主要功能是向多播地址224.0.0.251和端口號5353發送數據包聲明本地的主機名和服務名,并且解決主機名和服務器名沖突的問題。程序流程圖如圖3所示。

圖3 服務器端程序設計流程圖
在儀器啟動時,mDNS服務器端程序將獲取本地主機名、服務器名、IP地址和端口號等信息,建立本地DNS數據庫,然后組建mDNS數據包,主機名和端口號包含在SRV記錄中,服務名稱包含在PTR記錄中,TXT記錄包含生產廠商等附加信息。組建完數據包之后向多播地址224.0.0.251和5353端口發送該數據包,本機的儀器信息將會在本地局域網內傳播,凡是加入到該多播組的設備都能收到該數據包。主控制器收到儀器發送過來的數據包之后就能夠提取出儀器的主機名和IP地址等信息,進而通過這些信息獲取儀器信息。
為了避免網絡中的主機名發生沖突,引起設備混淆。在聲明本地信息的同時,儀器還在監聽5353端口,看是否收到其他設備發來的具有相同格式信息的數據包。如果收到其他設備發來的數據包,那將數據包內的儀器的主機名提取出來,與本地的主機名進行比較,假如一樣,那就發生了名字沖突,本地的設備將會修改本機的名稱,修改的方法是在原來名稱的后面加上數字來加以區別,例如本地主機名為“mydevice”,那將會修改為“mydevice_1”,這樣就避免了主機名沖突。
如果本地主機名因為名稱沖突而改變,那么該主機名將不會輕易再改變,即使在儀器重啟之后,本地主機名仍然是修改后的名稱。除非用戶重新設置主機名,或者啟動LAN配置重啟機制,那么主機名將會恢復到出廠設置的主機名。如果服務名稱也由于名稱沖突而改變,其處理方法與處理主機名沖突的方法一致。
如果監聽端口沒有收到其它儀器發送過來的mDNS數據包,那么該儀器將繼續組建包含本機信息的mDNS數據包并且持續向多播地址發送。用戶需要停止mDNS功能時候,可以讓儀器在停止之前發送停止數據包,告知網絡上的其他設備本機將停止提供mDNS服務功能,這樣主控器收到停止數據包后將會把列表中的儀器主機名刪除。如果用戶重新啟用儀器的mDNS服務,主控制器的列表中就會重新出現儀器的主機名。
為了與DNS名稱解析域相區分,運行mDNS協議的設備都位于“.local”域中,表明要訪問的設備在本地網絡中。如果用戶想要使用主機名來訪問設備主頁,那么用戶可以在瀏覽器的地址欄輸入主機名加“.local”的方式來訪問。假如設備主機名為“mydevice”,那么就可以在IE瀏覽器地址欄輸入“mydevice.local”,然后瀏覽器同樣會向多播地址224.0.0.251和端口號5353發送DNS請求數據包,然后儀器端的mDNS服務器程序就會解析該請求,并且將儀器的IP地址和端口號返回給瀏覽器,這樣瀏覽器就可以訪問設備主頁了。
打開主控電腦的IE瀏覽器,將主控電腦與LXI設備同時連接到交換機上,打開設備,IE瀏覽器內的Bonjour插件的窗口上就會自動顯示網絡中支持mDNS協議并且提供WEB服務的設備名。如圖4所示。

圖4 Bonjour列表
在上圖中,雙擊Bonjour列表里的設備名“UESTC_LXI”,則瀏覽器自動去訪問“uestc_lxi.local”,并且打開設備的主頁。
實現HTTP服務發現功能還可以通過另外一種形式,那就是可以在命令行提示符下輸入命令[7]:
dns-sd-Z _http._tcp local
通過此命令可以看到mDNS數據包中各種記錄的詳細內容,如圖5所示。

圖5 HTTP服務發現結果
同樣的方法,在命令行下輸入命令:
dns-sd-Z _lxi._tcp local
通過此命令來發現LXI服務,返回的儀器信息與向儀器發送*IDN?命令所返回的信息是一致的。如圖6所示。

圖6 LXI服務發現結果
VXI-11協議是LXI儀器的基本的網絡發現協議,mDNS協議的出現彌補了VXI-11協議速度慢,更新不及時的缺點,實現了快速簡潔的網絡發現功能。本文基于LXI 1.3版本對mDNS協議的規定,實現了HTTP服務和LXI服務名的發現功能,并且解決了名稱沖突問題。在組建復雜的LXI測試系統中,mDNS協議將會在網絡發現方面發揮很好的作用。
[1]王巖,王雄,曾鵬.零配置網絡協議的研究[J].計廣東通信技術,20075,3(12):1685-1687.
[2]王彪. LXI關鍵技術研究[D].哈爾濱:哈爾濱工業大學,2009.
[3]Ashley Butterworth,Matthew Xavier Mora.Device Discovery with mDNS and DNS-SD [P].Apple Inc,2009.
[4]馬敏,陳光礻禹.一種基于以太網的新型儀器平臺——LXI[J].電測與儀表,2006,43(1):57-59.
[5]LXI Standard Rev.1.3[S]. LXI Consortium, Inc.,October30.2008.
[6]鐘世春,馬敏,王厚軍. LXI儀器中VXI-11協議的研究與實現[J].電子科技大學學報,2010,39(4):65-66.
[7]趙濤,于月芬,李建剛. LXI總線網絡發現機制研究[J].電測與儀表,2008,45(510):31-34.