基于IP組播的Web服務(wù)推送技術(shù)的研究與實現(xiàn)
引言
隨著網(wǎng)絡(luò)技術(shù)和通信技術(shù)的快速發(fā)展與廣泛應(yīng)用,以及物聯(lián)網(wǎng)、云計算、智慧地球等新技術(shù)、新概念的提出,網(wǎng)絡(luò)化已經(jīng)逐步成為近年來人們研究的熱點。同時,隨著Web技術(shù)的不斷發(fā)展,B/S架構(gòu)以其便于維護(hù)和升級等優(yōu)點而廣泛應(yīng)用于車輛監(jiān)控系統(tǒng)、數(shù)字化地圖等方面。然而,Web服務(wù)器作為網(wǎng)絡(luò)實體,就必須要有獨(dú)立的IP地址。目前,可以通過手工靜態(tài)分配或者通過DHCP(DynamicHostConfigurationProtocol)服務(wù)器動態(tài)分配IP地址;然而,由于IP地址是由一組數(shù)字構(gòu)成,不便于記憶,且使用起來很不方便,而域名系統(tǒng)的出現(xiàn)為其提供了一種切實可行的解決方案,但這又需要設(shè)計DNS(DomainNameSystem)服務(wù)器來實現(xiàn)。
基于上述原因可知,當(dāng)Web服務(wù)器接入網(wǎng)絡(luò)之后,通常需要通過人工或服務(wù)器實現(xiàn)網(wǎng)絡(luò)配置。同時,傳統(tǒng)模式的Web系統(tǒng)中的服務(wù)器端一般都是被動地響應(yīng)客戶端請求。鑒于此,本文通過對IP多播技術(shù)進(jìn)行深入分析,給出了實現(xiàn)Web服務(wù)的主動推送方法,并對其進(jìn)行了驗證。
1應(yīng)用背景
Web應(yīng)用模型
圖1所示是一種傳統(tǒng)的Web應(yīng)用模型。在這種應(yīng)用模型結(jié)構(gòu)下,用戶工作界面是通過WWW瀏覽器來實現(xiàn)的,極少部分事務(wù)邏輯在前段(Browser)實現(xiàn),主要業(yè)務(wù)邏輯在服務(wù)器端(Server)實現(xiàn),因而形成所謂三層結(jié)構(gòu)[1]。客戶端向服務(wù)器端發(fā)送HTTP請求,WebServer接收這個請求,然后根據(jù)不同情況訪問相應(yīng)的數(shù)據(jù)庫、WebServer或者其它業(yè)務(wù)系統(tǒng),再經(jīng)過業(yè)務(wù)邏輯計算,向客戶端瀏覽器發(fā)送HTML響應(yīng)。這樣就大大簡化了客戶端主機(jī)負(fù)荷,減輕了系統(tǒng)維護(hù)與升級的成本和工作量,降低了用戶的總體成本。
但是,根據(jù)這個模型,服務(wù)器端僅在客戶端發(fā)出請求后才把數(shù)據(jù)發(fā)送回去。而客戶端要想獲取服務(wù)器端所提供的服務(wù)時,就需要知道服務(wù)器端IP地址或該服務(wù)器的域名,而這在該模型中是無法實現(xiàn)的。
IP多播
隨著網(wǎng)絡(luò)規(guī)模的不斷擴(kuò)大和網(wǎng)絡(luò)信息資源的迅速增加,網(wǎng)絡(luò)傳輸負(fù)擔(dān)也將逐漸提高,尤其是將網(wǎng)絡(luò)資源傳送給網(wǎng)絡(luò)中所有對此信息感興趣的主機(jī)時。注意:這不是某個主機(jī),也不是所有主機(jī)。采用傳統(tǒng)的單播技術(shù)已經(jīng)無法解決此類網(wǎng)絡(luò)傳輸問題,若采用廣播技術(shù)又會增加網(wǎng)絡(luò)負(fù)擔(dān),嚴(yán)重影響網(wǎng)絡(luò)效率。而多播可以將網(wǎng)絡(luò)數(shù)據(jù)報文按照多播組地址進(jìn)行傳送,只是屬于該組的所有主機(jī)才能接收此數(shù)據(jù)報文,這樣就極大地提高了網(wǎng)絡(luò)傳輸效率。
圖1Web應(yīng)用模型
IP多播(也稱為多址廣播或組播)技術(shù)是一種允許一臺或多臺主機(jī)(多播源)發(fā)送單一數(shù)據(jù)包到多臺主機(jī)(一次的,同時的)的TCP/IP網(wǎng)絡(luò)技術(shù)。多播作為一點對多點的通信,是節(jié)省網(wǎng)絡(luò)帶寬的有效方法之一。同時,多播數(shù)據(jù)報由特定的接口接收。如果要對一組特定的主機(jī)進(jìn)行通信,多播能使一個或多個多播源只把數(shù)據(jù)包發(fā)送給特定的多播組,而只有加入該多播組的主機(jī)才能接收到數(shù)據(jù)包,從而提高了信息的安全性。圖2所示是這種多址廣播或組播技術(shù)的特點示意圖。
圖2可明顯減少網(wǎng)絡(luò)資源消耗的多播技術(shù)
由圖2可以看出,主機(jī)A、C和D構(gòu)成一個多播組G,主機(jī)X可向多播組G的三個主機(jī)進(jìn)行多播(主機(jī)X可以不屬于該多播組,也不一定要知道這個多播組中都包括哪些成員)。主機(jī)X在進(jìn)行多播時只發(fā)送一次數(shù)據(jù)報,只是到了路由器R2才進(jìn)行復(fù)制,然后到R6再復(fù)制一次。這就是說,多播的數(shù)據(jù)報僅在傳送路徑分岔時才將數(shù)據(jù)報復(fù)制后繼續(xù)轉(zhuǎn)發(fā)。若不是多播,則源站在一開始就要發(fā)送3個數(shù)據(jù)報,分別發(fā)送給主機(jī)A、C和D。構(gòu)成多播組的主機(jī)數(shù)可以是很大的,如成千上萬個。因此,采用多播協(xié)議可明顯減輕網(wǎng)絡(luò)中各種資源的消耗。顯然,在因特網(wǎng)中多播要靠路由器來實現(xiàn),因此,這些路由器必須增加一些能夠識別多播的軟件。能夠運(yùn)行多播協(xié)議的路由器稱為多播路由器。
2Web服務(wù)推送系統(tǒng)的設(shè)計與實現(xiàn)
Web服務(wù)器也稱為WWW(WorldWideWeb)服務(wù)器,其主要功能是提供網(wǎng)上信息的瀏覽服務(wù)。首先,Web服務(wù)器作為網(wǎng)絡(luò)節(jié)點,其必須擁有獨(dú)立的標(biāo)識一IP地址。目前,IP地址的配置主要有兩種方式:手動配置和自動配置。其中,手動配置需要人工參與,并且在目前IPv4地址緊缺的情況下,如何避免地址沖突是一個亟待解決的問題;自動配置常用的方式是在服務(wù)器端配置DHCP,但這需要DHCP服務(wù)器支持。其次,Web服務(wù)器作為服務(wù)提供者,客戶只有知道其IP地址才能夠使用其所提供的服務(wù),而如果直接使用IP地址,則不安全,且不便于記憶。域名系統(tǒng)可解決網(wǎng)絡(luò)節(jié)點的命名問題,然而,域名系統(tǒng)需要DNS的支持。最后,在傳統(tǒng)模式中,服務(wù)器只是被動地接收和響應(yīng)客戶端請求,而不能發(fā)揮服務(wù)器的主動性。
2.1IP自動分配
對于任意一個網(wǎng)絡(luò)節(jié)點而言,配置正確的IP地址是其實現(xiàn)網(wǎng)絡(luò)互聯(lián)的基礎(chǔ),本文采用IPv4LL(IPv4Link-Local)來實現(xiàn)在沒有人工和DHCP服務(wù)器參與的情況下,Web服務(wù)器IP地址的自動分配、子網(wǎng)掩碼設(shè)置等。其具體實現(xiàn)過程如下:
由網(wǎng)絡(luò)節(jié)點首先發(fā)送DHCP服務(wù)請求數(shù)據(jù)包,若在一定的等待時間內(nèi)沒有收到響應(yīng)數(shù)據(jù)包,則說明在本地鏈路中沒有DHCP服務(wù)器,此時轉(zhuǎn)步驟⑵;
在169.254.0.0/16網(wǎng)段中隨機(jī)產(chǎn)生一個IP地址,并將這個IP地址以ARP請求數(shù)據(jù)包的形式廣播到網(wǎng)絡(luò)中,并向其它網(wǎng)絡(luò)節(jié)點詢問當(dāng)前請求地址是否可用;
如果沒有收到其它主機(jī)的ARP應(yīng)答消息,則該IP地址可用,隨之將其設(shè)置為本地IP地址,否則重復(fù)步驟(2),直到找到為本地網(wǎng)絡(luò)節(jié)點分配到合適的IP地址為止。
為了防止節(jié)點重啟而造成IP地址丟失,其在完成配置后,可將配置參數(shù)保存到非掉電易失性存儲介質(zhì)中。這樣,當(dāng)節(jié)點重新啟動時,首先讀取上次網(wǎng)絡(luò)配置信息,并探測該配置信息的有效性,從而提高IP地址分配效率。
2.2域名自動獲取
當(dāng)訪問網(wǎng)絡(luò)中的一臺主機(jī)或是該主機(jī)提供的服務(wù)時,由于域名便于記憶且IP地址動態(tài)變化多有不便,因此,通常情況下是以域名作為主機(jī)的標(biāo)識。而要實現(xiàn)域名與IP地址的映射關(guān)系,需要DNS服務(wù)器的支持。本文采用多播DNS(MulticastDNS)機(jī)制來在沒有DNS服務(wù)器參與的情況下實現(xiàn)IP地址和域名之間的自動轉(zhuǎn)換功能。其域名自動獲取過程如下:
創(chuàng)建本地多播地址記錄,從而獲取一個新的域名。
檢測該域名的唯一性。在本地鏈路中向224.0.0.251發(fā)送多播請求數(shù)據(jù)包,并且每隔250ms發(fā)送一次,共發(fā)送三次。如果收到任何一次mDNS請求的響應(yīng)數(shù)據(jù)包,則該域名已經(jīng)被其它主機(jī)占用,此時將返回(1)重新獲取新域名;否則轉(zhuǎn)到(3)。
更新網(wǎng)絡(luò)中其它主機(jī)cache中的數(shù)據(jù),將cache_flush位置1,該域名獲取成功。
綜上所述,mDNS協(xié)議可以在無DNS服務(wù)器的網(wǎng)絡(luò)環(huán)境中實現(xiàn)IP地址與域名的自動轉(zhuǎn)換,以發(fā)現(xiàn)網(wǎng)絡(luò)中可用的服務(wù)。其主要思想是利用局域網(wǎng)的組播機(jī)制來實現(xiàn)DNS服務(wù)器的功能。該協(xié)議中采用UDP的5353端口代替DNS的53端口,并以組播地址224.0.0.251代替DNS服務(wù)器的單播地址[3]。另外,在其域名后面都有一個.local后綴,以告訴瀏覽器采用mDNS協(xié)議來解釋該域名。
因此,當(dāng)客戶應(yīng)用層想解析某個域名所對應(yīng)的IP地址時,它只需要向本地鏈路發(fā)送一個目的地址為224.0.0.251的多播請求數(shù)據(jù)包,本地所有主機(jī)一旦收到與其域名相匹配的請求時,便向請求主機(jī)發(fā)送帶有自身IP地址的應(yīng)答數(shù)據(jù)包,從而完成一次域名解析過程。反之,當(dāng)客戶應(yīng)用層要解析某個已知IP地址對應(yīng)的主機(jī)時,其解析過程與此類似,在此不再贅述。
另外,mDNS還給出了避免域名沖突的解決方案。通過在請求數(shù)據(jù)包的權(quán)威部分增加一個新的記錄,然后比較該資源記錄的類別,級別高的獲得此域名;如果資源記錄類別相同,則比較其類型,同樣,級別高的獲得此域名;如果資源記錄類型也相同,則依次比較原始數(shù)據(jù)(IP地址)的每一個字節(jié),此時由于不可能完全相同,則其值大的獲得此域名。
同時,mDNS在請求、響應(yīng)、消息結(jié)構(gòu)等方面也有明顯的優(yōu)勢,其主要表現(xiàn)在以下幾個方面:
⑴mDNS協(xié)議要求服務(wù)請求端將請求的已知答案包含在DNS消息內(nèi)部,如果數(shù)據(jù)包生存時間值小于原先值的一半,則DNS消息的答案部分就不再對其生存時間進(jìn)行標(biāo)記,從而減小了請求數(shù)據(jù)包的大小,提高了網(wǎng)絡(luò)帶寬利用率;
mDNS提供了域名沖突解決機(jī)制,因而不需要額外的檢錯機(jī)制,從而減輕了網(wǎng)絡(luò)負(fù)擔(dān);
在覆蓋了所有子網(wǎng)的情況下,其接收者也會很明確地知道m(xù)DNS響應(yīng)來自本地鏈路;
mDNS使用的UDP端口號為5353,從而避免了端口沖突問題;
mDNS采用UTF-8對資源記錄名進(jìn)行編碼,很好地解決了編碼兼容性問題。
總之,采用mDNS協(xié)議為無DNS服務(wù)器參與情況下的IP地址與域名之間的轉(zhuǎn)換提供了一套切實可行的解決方案。
Web服務(wù)推送
為了解決傳統(tǒng)Web服務(wù)器端被動接收客戶端服務(wù)請求的工作模式,本文采用DNS-SD(DNS-ServiceDiscovery)協(xié)議來使得客戶可以在對服務(wù)器一無所知的情況下,使用服務(wù)器所提供的服務(wù)。同時,將當(dāng)前局域網(wǎng)內(nèi)所有可用的Web服務(wù)列舉出來,供用戶選擇,從而使得整個Web服務(wù)系統(tǒng)更加透明和智能。
DNS-SD通過對DNS中的SRV、PTR、TXT等資源記錄信息進(jìn)行擴(kuò)充來實現(xiàn)服務(wù)的主動推送。其中,SRV記錄將服務(wù)/協(xié)議解析成IP地址,其內(nèi)容包括服務(wù)名稱、協(xié)議、DNS域名、優(yōu)先權(quán)、權(quán)重、端口、目標(biāo);PTR記錄則指向每一個信息指針,實現(xiàn)從IP地址到主機(jī)域名的反向映射。由于每一個網(wǎng)絡(luò)服務(wù)接口都有一條PTR記錄,其名稱類似于反向字節(jié)序的IP地址,從而實現(xiàn)Web服務(wù)瀏覽功能。
3嵌入式Web服務(wù)推送
嵌入式Web一般采用B/S(Browser/Service)結(jié)構(gòu),即瀏覽器/服務(wù)器結(jié)構(gòu)。B/S是隨著Internet技術(shù)的興起,對C/S結(jié)構(gòu)的一種變化或改進(jìn)的結(jié)構(gòu)。在該結(jié)構(gòu)下,客戶端僅僅操作WWW標(biāo)準(zhǔn)瀏覽器便可通過Internet訪問Web服務(wù)器,其主要事務(wù)邏輯在服務(wù)器端實現(xiàn)。在此,為了識別基于組播Web服務(wù)推送模塊,本文在客戶端采用BonjourforWindows瀏覽器插件來實現(xiàn)服務(wù)發(fā)現(xiàn)功能。
3.1Bonjour簡介
Bonjour[4](法語中的你好)是一種能夠自動查詢接入網(wǎng)絡(luò)中的設(shè)備或應(yīng)用程序的插件。Bonjour能夠顯示局域網(wǎng)內(nèi)支持組播或域名協(xié)議的設(shè)備和應(yīng)用程序,并采用多播DNS來解決局域網(wǎng)內(nèi)設(shè)備的命名沖突。裝有Bonjour插件的電腦和設(shè)備可以在網(wǎng)絡(luò)中自動傳播它們自己的服務(wù)信息,并聆聽其他設(shè)備的服務(wù)信息。BonjourforWindows包括—個InternetExplorer插件,可以在不知道其IP地址的情況下設(shè)置、安裝支持Bonjour的設(shè)備。在已經(jīng)安裝了Bonjour插件的計算機(jī)上打開IE瀏覽器,可以在工具欄中看到如圖3所示的Bonjour圖標(biāo),。
嵌入式Web服務(wù)器硬件系統(tǒng)采用S3C6410(相關(guān)資料參見S3C6410數(shù)據(jù)手冊)來實現(xiàn),客戶端主機(jī)與嵌入式Web服務(wù)器之間采用RJ45連接。啟動服務(wù)器端服務(wù)推送模塊,打開客戶端瀏覽器,則可出現(xiàn)如圖4所示的界面。
圖4嵌入式Web服務(wù)推送系統(tǒng)測試畫面
4結(jié)語
總而言之,本文以IP多播技術(shù)為基礎(chǔ),設(shè)計并實現(xiàn)了Web服務(wù)推送模塊并對其有效性進(jìn)行了驗證。在該系統(tǒng)中,利用IPv4LL技術(shù)實現(xiàn)了Web服務(wù)器端IP地址的自動配置,而利用mDNS機(jī)制實現(xiàn)了在沒有DNS服務(wù)器參與下IP地址和域名之間的自動轉(zhuǎn)換功能。由此可見,采用組播技術(shù)實現(xiàn)Web服務(wù)推送,雖然簡便易行,但其仍然存在諸如增加網(wǎng)絡(luò)負(fù)載、占用網(wǎng)絡(luò)帶寬等問題,這些問題仍然亟待解決。
20210915_614179bc0ba65__基于IP組播的Web服務(wù)推送技術(shù)的研究與實現(xiàn)