亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        物聯(lián)網(wǎng)中嵌入式TCP/IP協(xié)議棧的設計技巧

        2011-01-23 03:31:10劉波濤
        通化師范學院學報 2011年2期
        關鍵詞:拷貝下層數(shù)據(jù)包

        劉波濤

        (長江大學 計算機科學學院,湖北 荊州 434023)

        當前,物聯(lián)網(wǎng)技術正受到研究者的廣泛關注[1],而在物聯(lián)網(wǎng)技術中的一個關鍵問題[2-4],就是要實現(xiàn)嵌入式設備聯(lián)入Internet.嵌入式設備接入Internet的方法很多,其中一種方法[5-8]就是在嵌入式設備中實現(xiàn)裁剪后的TCP/IP協(xié)議棧.通用計算機系統(tǒng)有足夠的資源支持系統(tǒng)在內(nèi)核中實現(xiàn)復雜的標準TCP/IP協(xié)議棧,而這對只有有限資源的嵌入式系統(tǒng)來說,既不可能也沒有必要.因此,針對嵌入式系統(tǒng)的特點,把握嵌入式TCP/IP協(xié)議棧設計的技巧就顯得尤為重要.

        1 嵌入式系統(tǒng)的特點

        在理解嵌入式TCP/IP協(xié)議棧設計技巧前,需了解嵌入式系統(tǒng)的特點,特別是其資源較少的特點.

        嵌入式系統(tǒng)與通用計算機系統(tǒng)的本質(zhì)區(qū)別在于系統(tǒng)應用的不同,嵌入式系統(tǒng)是將計算機系統(tǒng)嵌入到對象系統(tǒng)中.因此,嵌入式系統(tǒng)與通用計算機系統(tǒng)相比,主要具有以下特點[9]:第一,嵌入式系統(tǒng)是面向特定應用的系統(tǒng).嵌入式系統(tǒng)與通用型系統(tǒng)的最大區(qū)別就在于嵌入式系統(tǒng)大多為特定用戶群設計的系統(tǒng),因此它通常都具備低功耗、體積小、集成度高等特點,并且可以滿足不同應用的特定需求;第二,嵌入式系統(tǒng)的硬件和軟件都必須進行高效地設計,量體裁衣、去除冗余,這樣才能更具競爭力;第三,為了提高執(zhí)行速度和系統(tǒng)可靠性,嵌入式系統(tǒng)中的軟件一般都固化在Flash或ROM中,而不是存儲在磁盤中;第四,嵌入式系統(tǒng)本身不具備二次開發(fā)能力,即設計完成后用戶通常不能對其中的程序功能進行修改,必須有一套開發(fā)工具和環(huán)境進行再次開發(fā).

        2 嵌入式TCP/IP協(xié)議棧設計技巧

        正因為嵌入式系統(tǒng)不像通用計算機那樣有豐富的系統(tǒng)資源,因此必須針對嵌入式系統(tǒng)的特點,來設計協(xié)議棧的實現(xiàn)技巧,否則協(xié)議棧實現(xiàn)的再好,但由于缺乏嵌入式系統(tǒng)的支持,也將是徒勞無功.

        2.1 零拷貝

        TCP/IP協(xié)議棧的工作過程如圖1所示.數(shù)據(jù)以一定的單位(通稱為數(shù)據(jù)包)在發(fā)送端一方由應用進程交給協(xié)議棧,數(shù)據(jù)包在協(xié)議棧從上層至下層被依次封裝,即將上層的整個數(shù)據(jù)包作為下層的數(shù)據(jù)部分,再添加下層的首部,而作為新的數(shù)據(jù)包;在接收端,數(shù)據(jù)包則經(jīng)由協(xié)議棧從下層至上層被依次解包:即將下層的首部剝?nèi)?,并根?jù)其內(nèi)容將數(shù)據(jù)部分交付上層的協(xié)議處理,最后應用層的數(shù)據(jù)交由應用進程處理[10].

        圖1 TCP/IP協(xié)議棧的工作過程

        為了保證協(xié)議棧中層與層之間的封裝性,一般TCP/IP的實現(xiàn)過程中多采用層層拷貝的原則.也就是說,在封包時,將上層協(xié)議的數(shù)據(jù)包從上層協(xié)議拷貝到下層協(xié)議的數(shù)據(jù)空間中;而在解包時,將數(shù)據(jù)包從下層協(xié)議拷貝到上層協(xié)議的數(shù)據(jù)空間中.而對應于嵌入式系統(tǒng),特別是資源極其有限的單片機系統(tǒng)及SOC片上的系統(tǒng),如果在封包或解包時按上述方法來拷貝數(shù)據(jù),則需要很多的緩沖區(qū)并且耗費大量嵌入式CPU拷貝時間.顯然,這是不明智的.

        因此,筆者設計的數(shù)據(jù)包封裝及解封裝采用了如下方法:在層與層之間交換信息時,以數(shù)據(jù)緩沖區(qū)首指針作為函數(shù)參數(shù)進行傳遞;在封裝時,上層協(xié)議在分配空間時充分考慮以后下層協(xié)議的封裝,并在緩沖區(qū)首部多分配一些必要的空間,便于下層協(xié)議在不需要從上層拷貝的情況下直接填充該層的首部.例如,HTTP協(xié)議在分配數(shù)據(jù)空間時多分配54字節(jié)用于隨后的TCP、IP和Ethernet協(xié)議首部的填充;在解封裝時,也將收到的原始數(shù)據(jù)包首地址直接傳給向上層協(xié)議,便于上層協(xié)議獲取下層協(xié)議的一些必要信息.如讓TCP層知道數(shù)據(jù)包的源IP地址,以便于填充TCP傳輸控制塊的目的IP地址字段.因此,這種方式不僅節(jié)約了系統(tǒng)的資源,而且會因為不需要拷貝數(shù)據(jù)包而提高了系統(tǒng)的處理速度.

        2.2 動態(tài)內(nèi)存管理

        不管是零拷貝還是層層拷貝,都需要分配一定的內(nèi)存來支持實現(xiàn).嵌入式系統(tǒng)不像通用計算機那樣,內(nèi)存資源豐富,一般內(nèi)存較少,因此更應該“精打細算”.考慮到Internet網(wǎng)絡中接收和發(fā)送的數(shù)據(jù)包大小不一,即收到的和發(fā)送的數(shù)據(jù)包長度都不是一個定值,例如以太網(wǎng)數(shù)據(jù)包的長度范圍值是64至1518字節(jié),因此對內(nèi)存的分配應該采用動態(tài)的方式進行管理.有如下兩種方案可供選擇:方案一,是每次分配一個固定長度的緩存.讓該緩存能夠容納一個最大的數(shù)據(jù)包,且在該緩存中設置一個字段用來存儲其有效數(shù)據(jù)的長度,顯然這種方案實現(xiàn)簡單,但是浪費了寶貴內(nèi)存資源;方案二,是按需分配合適大小的緩存,而不管該緩存是用于底層接收數(shù)據(jù)還是用于上層發(fā)送數(shù)據(jù),這種方案節(jié)約了內(nèi)存資源.因此,筆者建議采用方案二來實現(xiàn)數(shù)據(jù)包緩存的動態(tài)分配.

        需要注意的是,動態(tài)管理內(nèi)存就肯定會面臨“內(nèi)存泄露”的風險,它最終會將系統(tǒng)的可用內(nèi)存耗盡,最終會使嵌入式設備崩潰、停止運行.為避免這個風險的出現(xiàn),嵌入式TCP/IP協(xié)議棧實現(xiàn)過程中,應該遵從“誰分配誰釋放”的原則來進行內(nèi)存的動態(tài)管理.例如,HTTP有數(shù)據(jù)包需要發(fā)送,那么在它依次調(diào)用完TCP發(fā)送模塊函數(shù)、IP發(fā)送模塊函數(shù)、驅(qū)動發(fā)送函數(shù)后,應該釋放它申請的動態(tài)內(nèi)存.

        2.3 模塊化設計

        因為TCP/IP協(xié)議棧本身就是一個分層的軟件系統(tǒng),故應該按協(xié)議將協(xié)議棧實現(xiàn)分為若干個模塊文件,讓每個模塊實現(xiàn)一層每一個協(xié)議的功能,如圖2所示.在圖2中,在頭文件(*.H)中定義了該模塊對外的接口變量及函數(shù)接口聲明,而在源文件(*.C)中則定義了相關的變量和函數(shù).要引用某模塊的變量或調(diào)用其中的函數(shù)時,只需包含此模塊的頭文件即可.這樣設計之后,分工明確,程序清晰,可讀性好,便于程序的維護及修改.

        圖2 協(xié)議棧實現(xiàn)的文件目錄

        圖3 嵌入式TCP/IP軟件構成層次圖

        2.4 分層設計

        嵌入式處理器多種多樣,嵌入式設備類型豐富,廠家眾多,因此,在進行嵌入式軟件的設計過程中應該充分考慮這一點,實現(xiàn)盡可能的方便移植.為了使嵌入式TCP/IP協(xié)議棧具備良好的可移植性,以便適應多種目標平臺,可將實現(xiàn)分為硬件無關層和硬件依賴層,如圖3所示.在圖3中,硬件無關層的實現(xiàn)使用高級語言完成,例如C語言,以方便將硬件無關層相關代碼移植到所有其他能夠編譯C代碼的硬件平臺上;在硬件依賴層中使用特殊機制,例如C語言中的#define宏定義來重新定義數(shù)據(jù)類型,這樣就可根據(jù)移植環(huán)境的變化來重新定義數(shù)據(jù)類型,以盡量消除系統(tǒng)對于具體編譯器的依賴;依賴層和無關層間采用統(tǒng)一的接口交互信息,當硬件平臺改變時,只需改動硬件依賴層的各驅(qū)動程序?qū)崿F(xiàn),在其接口函數(shù)名稱與參數(shù)不變的情況下,硬件無關層無需改變,從而屏蔽了硬件實現(xiàn)的差異.

        2.5 其他技巧

        由于嵌入式的系統(tǒng)運行速度和內(nèi)存容量有限,在設計時還應遵循下列原則:盡量避免使用全局變量或外部變量,全局變量或外部變量在整個程序運行期間都要占用內(nèi)存,所以要盡量少用全局變量或外部變量,而盡量多地用局部變量.因此,建議采用函數(shù)參數(shù)傳遞的方式來共享信息;占用內(nèi)存較多的變量應該定義在外部RAM中.因嵌入式處理器的內(nèi)部RAM可用存儲空間非常有限,占用過多的內(nèi)部RAM會使嵌入式處理的硬件堆棧溢出,從而導致函數(shù)調(diào)用失敗.如實現(xiàn)嵌入式TCP/IP協(xié)議棧中的TCP傳輸控制塊數(shù)組較大,就應當定義在外部RAM中.

        圖4 測試內(nèi)存泄露時輸出的信息

        圖5 客戶端動態(tài)獲取服務傳感器溫度

        3 測試結果

        遵循前述設計思路,筆者在單片機W78E58B上實現(xiàn)了一個嵌入式TCP/IP協(xié)議棧[5],并在此基礎上實現(xiàn)了一個嵌入式Web服務器.采用的測試方法是將該此嵌入式Web服務器與PC機在RJ-45口及串口分別對接.將嵌入式Web服務的調(diào)試信息從串口輸出,并由串口精靈顯示[11].圖4顯示的是對其進行內(nèi)存泄露的測試.筆者對系統(tǒng)的內(nèi)存塊進行相關記錄和統(tǒng)計:Len字段記錄是本次分配的內(nèi)存長度,UsedMemLen字段記錄的是所用內(nèi)存總長度,F(xiàn)reeMemLen字段記錄的是空閑內(nèi)存的長度;每一條信息表明了某個內(nèi)存塊分配或釋放所在函數(shù)名及所處時刻.如由圖4可知,每條信息對應的UsedMemLen與FreeMemLen之和是一個定值,也就是說,筆者遵照這一思路設計的嵌入式Web服務器不存在內(nèi)存泄露的風險.

        對嵌入式Web服務器進行相關功能測試,如圖5所示.由圖可知,嵌入式Web服務器能完成數(shù)據(jù)的下載及上傳功能,遵照這一思路設計的嵌入式TCP/IP協(xié)議棧運行穩(wěn)定可靠.

        4 結論

        本文總結了在實現(xiàn)嵌入式TCP/IP協(xié)議棧的過程中,應該注意的設計技巧.并做了相關測試,驗證了該技巧的可行性.這為嵌入式設備中順利實現(xiàn)嵌入式TCP/IP協(xié)議棧,從而實現(xiàn)物聯(lián)網(wǎng)技術打下了堅實的基礎.

        [1]劉書艷.十年后,物聯(lián)網(wǎng)風行[N].中華工商時報,2010-3-5(7).

        [2]International Telecommunication Union UIT.ITU Internet Reports 2005:The Internet of Things[R].2005.

        [3]王保云.物聯(lián)網(wǎng)技術研究綜述[J].電子測量與儀器學報,2009,23(12):1-7.

        [4]AMARDEO C,SARMA,J G.Identities in the Future Internet of Things[J].Wireless Pers Commun 2009,49:353-363.

        [5]馮翠麗,劉波濤.一種嵌入式TCP/IP協(xié)議棧的設計與實現(xiàn)[J].長江大學學報,2008,5(4):331-333.

        [6]陳立家,焦戰(zhàn)立,熊文龍.基于精簡TCP/IP協(xié)議棧網(wǎng)絡服務器的實現(xiàn)[J].武漢理工大學學報,2007,31(3):565-568.

        [7]任會平,王平,徐櫞.低成本嵌入式web服務器的研究[J].微計算機信息,2008,24(10):23-25.

        [8]陳立家,焦戰(zhàn)立,熊文龍.基于精簡TCP/IP協(xié)議棧網(wǎng)絡服務器的實現(xiàn)[J].武漢理工大學學報,2007,31(3):565-568.

        [9]牛茹.基于嵌入式系統(tǒng)的農(nóng)業(yè)數(shù)據(jù)采集傳輸關鍵技術研究[D].咸陽:西北農(nóng)林科技大學,2008.

        [10]劉波濤,賈菡,馮翠麗,等.嵌入式Web服務器中TCP/IP協(xié)議棧的裁剪設計[J].西安通訊學院學報,2008,7(4):28-30.

        [11]劉波濤,馮翠麗,王青海,等.應用RTL8019AS的嵌入式Web服務器硬件實現(xiàn)[J].長江大學學報,2008,5(1):75-78.

        猜你喜歡
        拷貝下層數(shù)據(jù)包
        SmartSniff
        唐氏綜合征是因為“拷貝”走樣了
        一類多個下層的雙層規(guī)劃問題
        積雪
        陜西橫山羅圪臺村元代壁畫墓發(fā)掘簡報
        考古與文物(2016年5期)2016-12-21 06:28:48
        基于Libpcap的網(wǎng)絡數(shù)據(jù)包捕獲器的設計與實現(xiàn)
        有借有還
        視覺注意的數(shù)據(jù)包優(yōu)先級排序策略研究
        移動IPV6在改進數(shù)據(jù)包發(fā)送路徑模型下性能分析
        文件拷貝誰最“給力”
        一本色道无码道dvd在线观看| 青青草久久久亚洲一区| 中文字幕一区二区三区四区| 深夜福利啪啪片| 亚洲欧洲精品成人久久曰影片 | av天堂亚洲另类色图在线播放| 久久精品国产99国产精品亚洲| 日本欧美视频在线观看| 久久99精品久久久66| 81久久免费精品国产色夜| 欧美亚洲精品suv| 真实单亲乱l仑对白视频| 99久久国产亚洲综合精品| 亚洲综合小综合中文字幕| 大又大又粗又硬又爽少妇毛片| 99精产国品一二三产品香蕉| 日本香蕉久久一区二区视频| 毛茸茸的女性外淫小视频| 中文字幕日韩欧美一区二区三区| 亚洲av日韩av永久无码色欲| 久久99精品久久久久久国产人妖| 久久久熟女一区二区三区| 亚洲av永久中文无码精品综合| 性夜影院爽黄a爽在线看香蕉| 网红极品女神精品视频在线| 与漂亮的女邻居少妇好爽| 色偷偷av男人的天堂| 国产艳妇av在线出轨| 少妇精品偷拍高潮少妇在线观看 | 国产精品久久1024| 精品女同一区二区三区亚洲| 国产 高潮 抽搐 正在播放| 97久久天天综合色天天综合色hd | 国产人妻高清国产拍精品| 欧美第一黄网免费网站| 国产伦码精品一区二区| av成人一区二区三区| 国产激情视频一区二区三区| 在线观看视频亚洲| 国产成人美涵人妖视频在线观看| 欧美老妇交乱视频在线观看|