黃 坤,郭書明
(中國衛(wèi)星海上測控部 江蘇 江陰 214431)
雷達數(shù)據(jù)處理終端是建立在獲取以太網(wǎng)數(shù)據(jù)的基礎上的。終端各節(jié)點計算機通過以太網(wǎng)獲取實時數(shù)據(jù),并對實時數(shù)據(jù)進行處理檢驗,并最終將雷達狀態(tài)信息和目標信息顯示出來,從而完成對雷達和目標狀態(tài)實時監(jiān)控。因此數(shù)據(jù)處理終端必須具有良好實時性、可靠性。TCP協(xié)議在傳輸層是提供可靠連接的服務,其每次通信都是建立連接-傳輸數(shù)據(jù)-撤銷連接的過程,每次數(shù)據(jù)通信都要通過大量的校驗,占用大量的系統(tǒng)資源,容易造成網(wǎng)絡中的數(shù)據(jù)阻塞,不利于實時數(shù)據(jù)的傳輸。而基于UDP協(xié)議的IP多播(Multicast)技術能很好地解決該問題[1-3]。
網(wǎng)絡點對多點通信可采用多個基于TCP協(xié)議的單播以及基于 UDP 協(xié)議的 IP 廣播(Broadcast)和 IP 多播(Multicast)[4]。采用多個基于TCP協(xié)議的單播方式構建網(wǎng)絡,需在每個節(jié)點計算機上建立不同的進程處理與其他節(jié)點計算機的數(shù)據(jù)連接,可以確保實時數(shù)據(jù)在網(wǎng)絡中的可靠傳輸,但是大量進程將給系統(tǒng)造成沉重的負擔,不利于大量數(shù)據(jù)的實時傳播。IP廣播技術的缺點是網(wǎng)內(nèi)所有主機無論是否需要都要接收廣播數(shù)據(jù)報,給網(wǎng)絡通信和主機帶來額外的負擔[5]。IP多播可以有多點對多點或是點對多點兩種通信模式,其優(yōu)點是能保證每條通信鏈路都是相互獨立,網(wǎng)內(nèi)的主機可以自由選擇加入某個多播組接收該組的多播數(shù)據(jù)。IP多播可以大幅度減少網(wǎng)絡流量,能更加有效的利用網(wǎng)絡帶寬,減少網(wǎng)絡數(shù)據(jù)通信阻塞的情況。
IP多播通信由多個通信節(jié)點組成,每個通信節(jié)點包含有控制層面和數(shù)據(jù)層面的特征。控制層面定義了通信節(jié)點的組成方式,而數(shù)據(jù)層面定義了數(shù)據(jù)在節(jié)點間是如何傳輸?shù)?。筆者介紹的IP多播采用的是無根層面的IP多播技術,即IP多播的控制層面和數(shù)據(jù)層面均是無根的[6],網(wǎng)內(nèi)的每臺計算機可以選擇性的加入不同的多播組,多播組內(nèi)每臺主機均可接收組內(nèi)其他節(jié)點主機的數(shù)據(jù)。IP多播的控制層面如圖1所示。
圖1 IP多播的無根控制層面Fig.1 Rootless control of IP multicast
IP多播應用可以分為:點對多點通信、多點對點通信及多點對多點通信。點對多點通信是指在一個多播組中僅存在一個多播源對組內(nèi)多個接收端發(fā)送信息,是一種比較常見的組播應用形式;多點對點通信是指多播組內(nèi)存在多個多播源僅對應一個接收端的通信應用模式,通常是雙向請求響應應用;多點對多點通信是指多播組內(nèi)存在多個多播源及多個接收端的通信應用模式,每個接收端可以任意選擇多播源,網(wǎng)絡拓撲結構靈活,可擴展性強,本文中介紹的雷達終端實時數(shù)據(jù)處理采用的是多點對多點的IP多播技術。
在VC++6.0的中IP多播是通過SOCKET(套接字)實現(xiàn)的,它是一種進程的通訊機制。SOCKET向應用程序提供了統(tǒng)一的網(wǎng)絡通信編程借口,屏蔽了下層通信協(xié)議和物理介質的細節(jié),降低了開發(fā)難度。VC++6.0中SOCKET函數(shù)聲明為SOCKET socket ( int af,int type,int protocol),af為協(xié)議通信域,type為套接字的類型,protocol為具體的協(xié)議。IP多播SOCKET的實現(xiàn)與初始化程序流程為:
1)創(chuàng)建SOCKET,其中af設為 AF_INET地址家族,IP多播只支持數(shù)據(jù)報類型和UDP協(xié)議,即type=SOCK_DGRAM,protocol=IPPROTO_UDP。
2)將SOCKET綁定在本地的一個SOCKADDR_IN格式的IP地址上,SOCKADDR_IN格式的結構為:
3)使用 bind()函數(shù)進行綁定,其 int bind(SOCKET s,const struct sockaddr FAR*name,int namelen),可以通過設置sockaddr_in結構地址來設置套接字需要使用的IP地址和端口號,一般來說,5000以上的端口號不為系統(tǒng)所使用,可以使用。
4)調(diào)用setsockopt()函數(shù)設置選擇要加入的多播組地址,其函數(shù)原型為 int setsockopt(SOCKET s,int level,int optname, const char FAR*optval, int optlen),level需設置為IPPROTO_IP,optname 設 置 為 IP_ADD_MEMBERSHIP,optval為多播組地址結構,該地址結構為:
multiaddr為需要加入組播地址,ip_interface可以設置為本機的IP地址以便于接收端分辨組播源地址,若無此需要可以設置為INADDR_ANY。
網(wǎng)絡組播SOCKET創(chuàng)建及初始化完畢后,若是接收端使用的SOCKET,還需創(chuàng)建網(wǎng)絡接收通信事件,以便在接收端口上有數(shù)據(jù)包出現(xiàn)時驅動主程序啟動相關的線程進行相應的數(shù)據(jù)處理。網(wǎng)絡事件的創(chuàng)建可以采用WSACreateEvent()函數(shù)實現(xiàn),并通過 WSAEventSelect()函數(shù)與套接字綁定,使用recvfrom()函數(shù)接收網(wǎng)絡數(shù)據(jù)。
發(fā)送端的SOCKET程序流程類似,只是將SOCKET綁定在本地IP地址上,發(fā)送時調(diào)用sendto()函數(shù)設定接收節(jié)點的多播組地址和端口號。
雷達內(nèi)部各節(jié)點計算機通過IP多播在內(nèi)部網(wǎng)絡中進行數(shù)據(jù)交換,同時各節(jié)點計算機構成的雷達多播組也通過IP多播與其他多播組進行數(shù)據(jù)交換,采用無源的組播分配方式,可以根據(jù)需要自行設置多播組的個數(shù),各節(jié)點計算機可以自由加入多個多播組,其網(wǎng)絡結構如圖2所示。
圖2 IP多播網(wǎng)絡結構圖Fig.2 Framework of IP multicast
由于IP多播是基于UDP協(xié)議,在設計上需要考慮倒數(shù)據(jù)傳輸?shù)娜哂嗔吭O計。在雷達內(nèi)網(wǎng)的數(shù)據(jù)交換中,雷達各節(jié)點計算機響應不同時序的中斷定時信號上網(wǎng)發(fā)送數(shù)據(jù)包,其流程如下:
1)將中斷信號與事件(Event)綁定 中斷信號采用硬件驅動,通過DeviceIoControl()函數(shù)將硬件中斷與程序自定義事件綁定。
2)分支線程(Thread)的創(chuàng)建 雷達終端的各節(jié)點計算機主程序中需包含多個不同的分支線程來完成網(wǎng)絡數(shù)據(jù)接收、發(fā)送等功能。線程的由CreateThread()函數(shù)創(chuàng)建,創(chuàng)建相應的分支線程后,可以設置相應線程的狀態(tài),可以設置為掛起或是啟動狀態(tài),通過SetThreadPriority()函數(shù)可以設置線程的優(yōu)先級。
當中斷來臨時,與之相應的事件將被至于有信號狀態(tài),隨之觸發(fā)程序中相應的線程完成相關數(shù)據(jù)處理顯示工作,如網(wǎng)絡數(shù)據(jù)的收發(fā)、雷達數(shù)據(jù)的實時顯示都是通過中斷-事件-線程的流程進行,中斷時序如圖3所示。
各節(jié)點計算機數(shù)據(jù)包大小可以根據(jù)需要統(tǒng)一設定,在確保系統(tǒng)冗余情況下又不影響網(wǎng)絡資源占用。各節(jié)點計算機使用不同的端口號,并將各自的端口號映射到多播組上,各節(jié)點計算機向自屬的端口發(fā)送數(shù)據(jù)的同時在多播組上接收其他端口上的數(shù)據(jù)。各分機之間的收發(fā)數(shù)據(jù)是相互獨立,即使是某些節(jié)點計算機出現(xiàn)故障的情況下,并不會影響其他節(jié)點計算機之間數(shù)據(jù)交換。若采用基于TCP的單播技術,某一次數(shù)據(jù)交換出現(xiàn)異常時,數(shù)據(jù)接收端或發(fā)送端線程很容易出現(xiàn)死鎖造成網(wǎng)絡的癱瘓。雷達網(wǎng)絡通信結構圖如圖4所示。
圖3 定時信號時序關系圖Fig.3 Time sequence of interrupting signals
圖4 雷達終端內(nèi)網(wǎng)結構圖Fig.4 Framework of radar terminal network
各節(jié)點計算機在創(chuàng)建一個SOCKET用于發(fā)送數(shù)據(jù),同時針對每個端口都創(chuàng)建一個SOCKET用于接收數(shù)據(jù)。在初始化SOCKET完成之后,創(chuàng)建接收網(wǎng)絡數(shù)據(jù)線程,調(diào)用WSAEventSelect()函數(shù)創(chuàng)建網(wǎng)絡事件并將其與硬件中斷綁定,在接收網(wǎng)絡數(shù)據(jù)線程中調(diào)用WSAWaitForMultipleEvents()函數(shù)判斷網(wǎng)絡數(shù)據(jù)的源節(jié)點計算機,將不同節(jié)點計算機數(shù)據(jù)送至不同的緩沖區(qū)進行數(shù)據(jù)實時處理,確保數(shù)據(jù)正確率。
IP多播在實時網(wǎng)絡通信具有以下優(yōu)點:
1)編程簡單,搭建網(wǎng)絡靈活,在節(jié)點極端機中添加多播組,或在多播組中加入節(jié)點計算機都很方便,系統(tǒng)拓展升級潛力大;
2)網(wǎng)絡中的通信進程相互獨立,容錯性強,個別節(jié)點計算機故障不會影響整個網(wǎng)絡的數(shù)據(jù)交互;
3)有效利用帶寬,較好的避免網(wǎng)絡阻塞,數(shù)據(jù)正確率高。
綜上所述,IP多播技術憑借其良好的實時性、容錯性和可擴展性,完全滿足雷達終端數(shù)據(jù)實時交互的要求。
[1]徐昌彪.IP組播及其核心技術探討[J].重慶郵電學院學報,2001,13(3):38-41.
XU Chang-biao.Discussion about IP multicast and core technologies[J].Journal of Chongqing University of Posts and Telecommunications.2001,13(3):38-41.
[2]何代菊.IP組播技術在網(wǎng)絡中的應用 [J].重慶文理學院學報,2006,5(5):32-36.
HE Dai-ju.IP multicast technology in network application[J].Journal of Chongqing University of Arts and Science:Nature Science Edition,2006,5(5):32-36.
[3]Xylomenos G,Polyzos G C.IP multicast group management for point-to-point local distribution[S].Computer Communications,1998(2):1645-1654.
[4]陳堅,陳偉.Visual C++網(wǎng)絡高級編程[M].北京:人民郵電出版社,2001.
[5]孫東.IP多播技術在實時測控軟件中的應用 [J].計算機工程與科學,2004,26(3):21-24.
SUN Dong.Application of the IP multucast technology[J].Computer Engineering and Science,2004,26(3):21-24.
[6]韋冒超.IP多播技術的無根多播實現(xiàn) [J].航空計算技術,2006,36(1):128-131.
WEI Mao-chao.Achievement about no root multicast of IP multicasting[J].Aeronautical Computing Technique,2006,36(1):128-131.