田建勇,石林江
(安順學院數(shù)學與計算機科學系,貴州 安順 561000)
責任編輯:許 盈
隨著物聯(lián)網(wǎng)技術與移動互聯(lián)網(wǎng)的發(fā)展,基于Web的應用正逐漸成為個人業(yè)務的主流選擇。隨著嵌入式芯片的處理能力不斷提升,移動嵌入式Web服務器占據(jù)了一定的市場,在中小型系統(tǒng)方面,傳統(tǒng)的基于PC端的Web服務器在成本及網(wǎng)絡架構上遜于嵌入式Web服務器,利用嵌入式設備的硬件資源,在嵌入式設備上建立HTTP服務器及Web頁面,遠程用戶通過瀏覽器實現(xiàn)對嵌入式設備的遠程查看、管理和控制。
目前移動嵌入式Web服務器應用廣泛,特別是家庭網(wǎng)絡、環(huán)境監(jiān)測、物聯(lián)網(wǎng)農(nóng)業(yè),甚至是電力行業(yè),例如Web服務器在光伏發(fā)電監(jiān)控系統(tǒng)中的應用[1],基于嵌入式處理器的Web服務器在網(wǎng)絡監(jiān)控系統(tǒng)中的應用[2]。除此之外,移動嵌入式Web服務器特別適合以個人輕量級業(yè)務為主的應用場景,大型業(yè)務系統(tǒng)可以考慮使用分布式的移動嵌入式Web服務器系統(tǒng)。
用戶訪問Web服務器,一般都會直接輸入服務器域名進行站點訪問,而根據(jù)移動嵌入式Web服務器應用場景的特點,接入Internet的IP地址大多不是固定的,而是采用撥號方式連接上網(wǎng),特別是以3G通信方式接入Internet網(wǎng)絡,均采用撥號方式接入公網(wǎng),而每次撥號,電信運營商分配的IP地址都有變化,因此公網(wǎng)中原來的IP地址與域名對應的關系應及時更新,否則用戶無法通過域名訪問Web服務器,將新的IP地址與域名進行更新則是由DDNS模塊來完成。DDNS模塊將更新請求發(fā)送至DDNS服務器,DDNS服務器將最新的IP地址與域名映射關系發(fā)送給DNS更新,如此新的IP地址與域名對應關系便在公網(wǎng)登記,以便公網(wǎng)用戶時刻都能通過域名訪問Web服務器。
目前,移動嵌入式Web服務器方面的研究更偏向于Web實現(xiàn)及服務器數(shù)據(jù)處理,文獻[3]就是對Web實現(xiàn)所做的研究,而對Web服務器接入網(wǎng)絡方面所做研究甚少。本文研究DDNS在移動嵌入式Web服務器中的應用,解決遠程用戶訪問動態(tài)IP移動嵌入式Web服務器的問題。
移動嵌入式Web服務器相比于PC端服務器,充分利用嵌入式設備的硬件條件,建立Web服務器,節(jié)省了硬件成本,不必再為建立Web服務器準備硬件資源[4]。
優(yōu)化網(wǎng)絡結構,傳統(tǒng)的嵌入式設備只是作為數(shù)據(jù)匯聚和轉發(fā)的功能,起著網(wǎng)關作用,上層建立了專門的服務器系統(tǒng),嵌入式設備需將數(shù)據(jù)上傳至服務器供服務器管理,而訪問者不直接訪問嵌入式設備,而是直接訪問服務器獲取數(shù)據(jù)信息。現(xiàn)采用移動嵌入式Web服務器,訪問者直接高效可靠地通過嵌入式設備上的Web服務器實現(xiàn)遠程網(wǎng)管信息的傳送、控制、展示和管理。在很大程度上簡化了網(wǎng)絡結構[5]。
移動嵌入式Web服務的便捷性更高,應用更加廣泛,嵌入式網(wǎng)絡結構靈活,靜態(tài)移動嵌入式Web服務器在一定程度上限制了嵌入式網(wǎng)絡的組建與擴展。
當嵌入式網(wǎng)絡結構改變時,服務器節(jié)點有可能變動,此時不需要知道服務器IP地址,只需要采用DDNS服務器將域名與新IP更新。又比如搭建個人智能家居系統(tǒng),一般而言,運營商分配個人的是動態(tài)IP地址,用戶在遠程無法通過域名訪問建立智能家居Web服務器,而需要采用DDNS服務器來完成定期的動態(tài)域名與IP更新。
移動嵌入式Web服務器、DDNS服務器、DNS服務器及用戶端具體網(wǎng)絡結構圖如圖1所示。
圖1 DDNS網(wǎng)絡結構圖
用戶端通過域名訪問移動嵌入式Web服務器,域名通過DNS服務器解析得到IP地址,實際上用戶是根據(jù)IP地址實現(xiàn)對Web服務器的訪問[6],通信流程如圖1實線所示。當域名與IP地址對應關系保持不變時,公網(wǎng)的DNS服務器一直保存著這對映射關系,用戶可以輕松實現(xiàn)通過域名訪問移動嵌入式Web服務器,但若IP地址有變化時,而DNS服務器不對最新IP與域名映射關系進行更新,用戶便無法通過域名訪問服務器,解決這一關鍵問題就是DDNS,通信流程參考圖1虛線所示。
利用DDNS技術來保證域名與IP地址映射關系正確比使用靜態(tài)IP地址服務器具有明顯的優(yōu)勢。
IP地址有限,而且電信運營商分配靜態(tài)IP地址的數(shù)目特別少,大多是分配的動態(tài)IP地址,設備的每一次撥號都可能分配到一個不同的IP地址,因此采用DDNS技術很好地解決了IP地址數(shù)目有限的問題。
從成本方面來說,分配靜態(tài)IP地址比撥號動態(tài)分配IP地址價格要昂貴得多,擁有靜態(tài)IP地址不適合輕量級業(yè)務的嵌入式應用場合。
目前,DDNS技術越來越成熟,國內外的DDNS服務供應商也層出不窮,比如國外的DynDNS.org和國內的花生殼等,都能很好地滿足中小企業(yè)在DDNS上的需求。
對于移動嵌入式Web服務器而言,與不具有Web服務器嵌入式模塊最大的區(qū)別就是包含HTTP服務器,HTTP服務器作為嵌入式設備的擴展模塊,可根據(jù)需求來定制,這也是嵌入式系統(tǒng)的優(yōu)點之一,方便模塊定制和裁剪。HTTP服務器模塊主要負責自身任務管理,同時提供HTTP對Web頁面請求做出響應,并且接受遠程訪問者的數(shù)據(jù)請求,這主要是完成HTTP協(xié)議的解析,即將遠程訪問者的HTTP報文解析并做出相應的回復[7-8]。
如圖2所示,嵌入式設備軟件根據(jù)功能需求各有區(qū)別,尤其是擴展模塊,都是量體裁衣,圖2描述了保護DDNS功能的移動嵌入式Web服務器共有的模塊,主要有Web頁面、HTTP服務器、網(wǎng)絡通信模塊、數(shù)據(jù)存儲區(qū),網(wǎng)絡通信模塊既包括有線通信也包括3G或者WiFi等無線通信,本文擴展了DDNS模塊,其他通用模塊未在圖2中列出。
圖2 移動嵌入式Web服務器軟件結構
Web界面將請求發(fā)至HTTP服務器,HTTP服務器Hand request接收到請求,一方面將數(shù)據(jù)存儲,另一方面將消息發(fā)送至主控軟件采取相應動作完成功能。將請求數(shù)據(jù)存儲的目的是為了保證各進程模塊共享數(shù)據(jù)內存,采用開鎖、存取、關鎖的機制,保證數(shù)據(jù)能在不同進程之間共享。比如界面有一條配置溫度傳感器告警閾值的請求,HTTP服務器將閾值存入數(shù)據(jù)存儲區(qū),同時又發(fā)消息至主控軟件中的控制溫度傳感器進程,提示有閾值更新,告訴該進程讀取最新閾值判斷是否超過閾值,有溫度告警。HTTP服務器與主控軟件及數(shù)據(jù)存儲區(qū)均是雙向通信。HTTP服務器與網(wǎng)絡通信模塊之間的雙向通信是遠程客戶通過網(wǎng)絡通信模塊訪問Web頁面,并產(chǎn)生Web請求,同時HTTP服務器將響應通過Web頁面反饋給客戶。
DDNS守護進程根據(jù)IP地址的變動發(fā)送DNS更新消息至通信模塊到DNS服務器,更新現(xiàn)在的IP,服務商將新IP地址及域名更新后,回復給DDNS。DDNS采用客戶端/服務器模式,在此,DDNS客戶端即嵌入式設備,最主要的作用即向DDNS服務器發(fā)送更新域名和IP地址對應關系的DDNS更新請求,當服務器的IP地址發(fā)生變化時,它們將作為DDNS客戶端,需要動態(tài)更新域名和IP地址對應關系的設備。DDNS服務器負責通知DNS服務器動態(tài)更新域名和IP地址之間的對應關系。接收到DDNS客戶端的更新請求后,DDNS服務器通知DNS服務器重新建立域名和IP地址之間的對應關系。從而保證即使DDNS客戶端的IP地址改變,Internet用戶仍然可以通過同樣的域名訪問DDNS客戶端。
通過DDNS技術,嵌入式設備將撥號上網(wǎng)獲得的IP與自己的域名綁定,從而保證遠端用戶能夠通過域名訪問移動嵌入式Web服務器。
DDNS的主要職責是將網(wǎng)絡撥號電信運營商分配的新IP地址與域名發(fā)送給遠端DDNS服務器,DDNS服務器將IP與域名對應關系更新后傳送給DNS服務器,這樣域名與新IP地址映射關系就在公網(wǎng)中進行了登記,遠程用戶就可以根據(jù)域名訪問擁有新IP地址的移動嵌入式Web服務器[9]。DDNS工作流程如圖3所示。
當移動嵌入式Web服務器上電后,系統(tǒng)先進行硬件初始化及主控軟件初始化,然后開啟DDNS模塊的守護進程,在守護進程中開啟一條線程監(jiān)控網(wǎng)絡撥號狀態(tài),如果有網(wǎng)絡撥號動作發(fā)生,則取得最新IP地址與原IP地址進行判斷;若發(fā)現(xiàn)電信運營商分配的IP地址有改變,則將DDNS緩沖區(qū)初始化,并在time_to_quit時間內與第一個DDNS服務器發(fā)起連接請求,time_to_quit為移動嵌入式Web服務器與DDNS服務器連接成功的最大時間,否則連接超時;連接成功后調用更新程序,根據(jù)供應商提供的報文格式填充報文并用socket發(fā)送出去;等待服務器回應,DDNS服務器若將新的IP地址與域名更新成功,返回request successful。若返回失敗,則依次選擇第2個DDNS服務器發(fā)起連接請求直至新的IP地址與域名在公網(wǎng)登記成功。
圖3 DDNS工作流程圖
2.3.1 發(fā)送報文填充
發(fā)送報文的填充格式與DDNS服務供應商有直接關系,每個DDNS服務供應商都有不同的DDNS請求報文格式,但就Linux平臺來說,大體格式基本一致,都需要填充服務器域名地址、主機設備用戶名及密碼、用戶代碼等信息。
本文主要使用3個DDNS供應商,分別是DynDNS.org、3322服務器和oray服務器。
DynDNS.org的報文格式為:
花生殼oray服務器供應商DDNS.oray.com供應商報文格式為:
發(fā)送消息之間,嚴格按照報文格式組建報文,否則報文在DDNS服務器端將不被識別。
2.3.2 返回代碼解析
DDNS更新請求發(fā)送至DDNS服務器后,等待從DDNS服務器響應的返回值及返回代碼,根據(jù)返回值與返回代碼,判斷新IP地址與域名更新情況。
代碼返回值為-1,且會返回 strange server response,are you connecting to the right server表示服務器域名不正確。返回401表示認證失敗,花生殼DDNS服務供應商返回401表示未付費用戶訪問了付費DDNS服務器供應商。返回值為200表示發(fā)送至服務器成功,且服務器返回相應代碼,具體代碼列表如表1所示。
表1 返回代碼列表
打開嵌入式網(wǎng)關,連接好設備,在串口設備里可以看到DDNS模塊所發(fā)報文信息,嵌入式網(wǎng)關設備串口為COM9,打開串口設備,可以查看到DDNS發(fā)送報文。如圖4所示。
圖4 DDNS發(fā)送報文圖(截圖)
報文結構如圖4所示,返回成功后,收到request successful,表示花生殼域名服務器已經(jīng)將目前的IP地址更新,域名 ht825.oicp.net對應的 IP 地址是 124.42.77.160,這樣直接訪問域名 ht825.oicp.net就可以直接訪問124.42.77.160了。如果由于網(wǎng)絡重新?lián)芴?,運營商分配的IP地址不是固定的,分配的IP地址有了變化,此時DDNS模塊便會將新的IP地址填進報文并發(fā)送至花生殼服務器,服務器更新域名與IP地址映射,保證外網(wǎng)用戶可以根據(jù)域名訪問服務器。
驗證返回200,同時返回request success。能根據(jù)域名ht825.oicp.net解析到IP地址,但免費的花生殼服務器出現(xiàn)了偶爾不穩(wěn)定的情況。
驗證方法可以通過ping域名的方式驗證,也可以通過HTTP的方式驗證,如圖5所示。
圖5 HTTP驗證界面圖(截圖)
在瀏覽器中輸入:http://ht825:raisecomht825@ddns.oray.com/ph/update?hostname=ht825.oicp.net&myip= ,即輸入用戶名和密碼、域名服務器、域名,就可以更新網(wǎng)絡上的域名及IP最新的映射關系,上文訪問域名ht825.oicp.net返回的是本主機入公網(wǎng)的IP地址。
本文的研究重點并不是建立Web服務器,而是在討論DDNS的應用,做了一個簡單網(wǎng)頁,作為Web服務器來驗證DDNS功能,在遠程任意一臺可以連入Internet的計算機訪問ht825.oicp.net便可以訪問所建的Web瀏覽器。如圖6所示。
圖6 移動嵌入式Web服務器頁面顯示(截圖)
遠程用戶在瀏覽器輸入Web服務器域名后,就可以訪問移動嵌入式Web服務器,該服務器的主頁顯示是一個登錄頁面,輸入用戶名和密碼登錄即可。本文所建Web網(wǎng)站僅為遠程訪問嵌入式Web實驗測試,并沒有太多的功能,在實際的應用中,應根據(jù)嵌入式模塊的功能需求來建立嵌入式Web頁面,比如智能家居嵌入式Web頁面、環(huán)境監(jiān)測嵌入式Web頁面等。
本文將DDNS技術運用于移動嵌入式Web服務器,解決了遠程用戶訪問動態(tài)IP移動嵌入式Web服務器的問題,將DDNS模塊作為獨立模塊可加載到任何需要使用Web服務器的嵌入式設備上,具有一定的通用性。物聯(lián)網(wǎng)技術的快速發(fā)展,傳感器節(jié)點的增多,移動嵌入式Web服務器將有更多的用武之地,DDNS技術將在移動嵌入式Web服務器的搭建中起到重要作用。
下一步研究應重點考慮建立通用的DDNS模塊,可以獨立配置加載,這樣只需要在嵌入式系統(tǒng)整個軟件編譯的時候,將DDNS模塊加載進去即可,增加了DDNS模塊的配置性及適用性;同時應當增加更多的DDNS服務器供應商,增強DDNS模塊解析功能,保證DDNS模塊解析的速度。
[1]姚雷,盧曉東,萬江文.光伏發(fā)電監(jiān)控系統(tǒng)中移動嵌入式Web服務器的實現(xiàn)[J].計算機工程與設計,2012,33(9):3397-3340.
[2]唐永彬,楊恢東.基于ARM11的嵌入式Web網(wǎng)絡監(jiān)控系統(tǒng)設計[J].電視技術,2011,35(9):122-124.
[3]潘琢金,王秋實.基于AJAX與CGI的嵌入式瘦Web服務器研究[J].計算機工程與設計,2010,31(20):4372-4437.
[4]高健,黃嵐,王忠義,等.一種加權數(shù)據(jù)融合算法在移動嵌入式Web服務器中的實現(xiàn)[J].計算機測量與控制,2010,18(6):1376-1379.
[5]單立平.嵌入式Linux網(wǎng)絡體系結構設計與TCP/IP協(xié)議棧[M].北京:電子工業(yè)出版社,2011.
[6]秋勇,陳曉宇,李電,等.基于DDNS的3G無線通信技術在電能質量在線監(jiān)測系統(tǒng)中的應用[J].電測與儀表,2012,49(2):44-47.
[7]龔堯飛,徐洪波,金靜.嵌入式移動Web服務器系統(tǒng)[J].計算機工程與設計,2010,31(24):5204-5207.
[8]潘琢金,王秋實.移動嵌入式Web服務器中動態(tài)Web技術的研究[J].計算機工程與設計,2010,31(18):3975-3978.
[9]宋江貴.基于ARM9的嵌入式Web Server研究應用與通信實現(xiàn)[D].北京:北京郵電大學,2008.