• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    物聯(lián)網(wǎng)應(yīng)用中TCP重傳隊列的設(shè)計與實現(xiàn)

    2012-11-21 09:51:17陳憲超張興海鄭達標石海濤趙先進
    關(guān)鍵詞:重傳鏈表結(jié)點

    陳憲超 王 輝,張興海,鄭達標,石海濤 趙先進

    (徐工集團徐州建機工程機械有限公司,江蘇 徐州 221001) (徐州赫思曼電子有限公司,江蘇 徐州 221001) (徐州長航科技有限公司,江蘇 徐州 221001)

    物聯(lián)網(wǎng)應(yīng)用中TCP重傳隊列的設(shè)計與實現(xiàn)

    陳憲超 王 輝,張興海,鄭達標,石海濤 趙先進

    (徐工集團徐州建機工程機械有限公司,江蘇 徐州 221001) (徐州赫思曼電子有限公司,江蘇 徐州 221001) (徐州長航科技有限公司,江蘇 徐州 221001)

    物聯(lián)網(wǎng)應(yīng)用的關(guān)鍵技術(shù)之一就是要實現(xiàn)嵌入式設(shè)備的網(wǎng)絡(luò)化,其中一種思路就是在嵌入式設(shè)備中集成簡化后的TCP/IP協(xié)議棧。然而在精簡TCP/IP協(xié)議棧中的TCP協(xié)議時會面臨一個技術(shù)難題:如何根據(jù)實際應(yīng)用設(shè)計合適的重傳隊列。以嵌入式Web服務(wù)為例,緊緊圍繞嵌入式Web服務(wù)器應(yīng)用的具體要求,詳細分析了如何設(shè)計并實現(xiàn)TCP重傳隊列。測試結(jié)果表明,該設(shè)計思路可行。

    物聯(lián)網(wǎng);TCP/IP;嵌入式Web服務(wù)器;嵌入式TCP;TCP重傳隊列

    如何將嵌入式設(shè)備接入網(wǎng)絡(luò),進而實現(xiàn)物聯(lián)網(wǎng)應(yīng)用,是當(dāng)前一個研究熱點[1]。其中,比較常見的一種實現(xiàn)方案是在嵌入式設(shè)備中實現(xiàn)精簡的TCP/IP協(xié)議棧后再將該設(shè)備接入Internet[2-3]。在此過程中,如果需要實現(xiàn)基于TCP協(xié)議的高層應(yīng)用,就必須要根據(jù)嵌入式設(shè)備的具體功能來簡化實現(xiàn)TCP協(xié)議,而設(shè)計實現(xiàn)TCP協(xié)議就必須要實現(xiàn)TCP重傳隊列。因此,如何有針對性地實現(xiàn)TCP重傳隊列就是一個技術(shù)難點。

    1 標準TCP重傳隊列的功能及作用

    TCP(Transmission Control Protocol,傳輸控制協(xié)議)是TCP/IP協(xié)議簇的核心協(xié)議, 也是TCP/IP協(xié)議簇中最復(fù)雜的協(xié)議。它是一種面向連接的、可靠的、基于字節(jié)流的運輸層通信協(xié)議[4]。TCP之所以是一種可靠的協(xié)議,就在于它有一種完善的重傳機制。在一般標準的TCP協(xié)議實現(xiàn)中,重傳機制的關(guān)鍵問題是要計算RTO(Retransmission Time Out),花費的代價較大[4-7]。一旦得到RTO之后,剩下的操作就是當(dāng)某個重傳計時器超時后重發(fā)對應(yīng)的TCP包,有多種方式可以完成該重發(fā)操作。在很多的TCP重傳實現(xiàn)中,都需要借助一個重傳隊列來記錄已經(jīng)發(fā)送的TCP報文,并在超時后進行重傳操作。

    2 嵌入式TCP重傳隊列的設(shè)計與實現(xiàn)

    2.1設(shè)計思路

    圖1 順序鏈表結(jié)構(gòu)示意圖

    筆者的設(shè)計思路是利用順序鏈表記錄每個已發(fā)送的TCP數(shù)據(jù)包,而當(dāng)收到TCP確認報文時就從該順序鏈表中刪除相應(yīng)的TCP數(shù)據(jù)包。同時,每隔一定的時間就觸發(fā)一個TCP重傳事件,以發(fā)送那些隊列中已經(jīng)超時所有TCP數(shù)據(jù)包。順序鏈表的結(jié)構(gòu)如圖1所示。由圖1可知,每個連接g_Conn[i]都單獨維護一個TCP重傳隊列,該隊列的長度用字段MemPkgNum記錄,隊首部地址由字段MemPoolHeader記錄。該重傳隊列采用一個如圖1所示的雙層順序鏈表來存儲:第1層為一個_MEM_CELL型的結(jié)構(gòu)體,用于存儲可能需要重傳(即已發(fā)送但沒有確認)數(shù)據(jù)包的相關(guān)信息,以便維護該連接所有可能需要重傳的TCP報文。字段Next的作用是將該連接中所有可能需要重傳的TCP報文都連接在一個順序鏈表上,字段RetryTimer是該包的定時器,字段RetryNum記錄的該包重傳的次數(shù)。字段ExpectAck是該結(jié)點中的關(guān)鍵字,在收到對方的確認后會通過該字段值來刪除重傳隊列中相對于的包。BuffPtr和TotalPkgLen字段定義了該數(shù)據(jù)包實體的首地址和總長度。這種設(shè)計結(jié)構(gòu)有如下方便:能在TCP發(fā)送模塊在調(diào)用地層發(fā)送驅(qū)動發(fā)送數(shù)據(jù)包后直接將該包掛到此重傳隊列后面,也便于在ARP解析失敗后直接進行ARP重傳操作的處理。

    2.2具體實現(xiàn)

    設(shè)計完該數(shù)據(jù)結(jié)構(gòu)后,剩下的工作就是要設(shè)計對應(yīng)鏈表的相關(guān)維護操作,如構(gòu)造操作、插入操作、查找操作和刪除操作等。

    1)鏈表結(jié)點的構(gòu)造操作 構(gòu)造鏈表結(jié)點的操作由Get_Mem()函數(shù)負責(zé),在TCP發(fā)送模塊中調(diào)用。每當(dāng)系統(tǒng)需要發(fā)送TCP報文時,就會調(diào)用Get_Mem()以動態(tài)分配2個區(qū)塊:其中一個區(qū)塊用于構(gòu)造_MEM_CELL型數(shù)據(jù)結(jié)構(gòu),以順利完成順序鏈表的相關(guān)操作;另外一個區(qū)塊用于構(gòu)造一個緩存,以裝載要發(fā)送的TCP報文。該函數(shù)的實現(xiàn)流程如圖2所示。

    圖2 Get_Mem()函數(shù)和Insert_Mem()函數(shù)的流程圖

    2)鏈表結(jié)點的插入操作 當(dāng)Get_Mem()函數(shù)被成功調(diào)用后,系統(tǒng)就會調(diào)用Insert_Mem()函數(shù)將TCP報文插入到對應(yīng)連接的順序鏈表中。該函數(shù)的定義形式如下:void Insert_Mem(p_Conn,p_MemPtr,p_Ack)。該函數(shù)各參數(shù)的意義分別如下:p_Conn指明某個連接號、p_MemPtr指示了該結(jié)點對應(yīng)的首地址指針,p_Ack說明了該TCP報文的期望號,它的實現(xiàn)流程如圖2所示。

    3)鏈表結(jié)點的查找操作 Search_Mem()函數(shù)用來查找某個TCP報文,該報文由指定的ACK號確定。

    4)鏈表結(jié)點的刪除操作 TCP模塊在接收ACK型的TCP數(shù)據(jù)包后,會對該數(shù)據(jù)包進行合法性檢查,如果認為該數(shù)據(jù)包是合法的,則會根據(jù)收到的ACK號調(diào)用Delete_BeforSeqMem()函數(shù)以刪除那些已經(jīng)成功發(fā)送的TCP報文??紤]到客戶端有可能會對服務(wù)器發(fā)出的TCP數(shù)據(jù)包進行批量確認,因此凡是ACK字段小于或等于收到的ACK號的那些TCP數(shù)據(jù)包都應(yīng)該被刪除掉。Delete_BeforSeqMem()函數(shù)的作用是刪除對應(yīng)的結(jié)點,并釋放該結(jié)點的內(nèi)存區(qū)塊,需要注意的是應(yīng)先釋放其BuffPtr所指的內(nèi)存區(qū)塊,再釋放_MEM_CELL型結(jié)點所占的內(nèi)存區(qū)塊。

    3 嵌入式TCP測試結(jié)果

    筆者采用的測試方法是將嵌入式Web服務(wù)與PC機在RJ-45口及串口分別對接[8]。利用串口精靈接收嵌入式Web服務(wù)器的輸出并顯示,利用Sniffer Pro抓取PC機發(fā)送和接收的數(shù)據(jù)包。

    圖3所示的是筆者在測試順序鏈表時系統(tǒng)輸出的信息。圖3中的第4行信息,即“Insert_Mem():firstly insert PkgNum=2”,表達的意義如下:系統(tǒng)將第2個TCP發(fā)送報文插入到重傳隊列的首部。從后續(xù)類似的信息也可以看出,每當(dāng)系統(tǒng)發(fā)送了一個非RST型的TCP報文后,都會將該報文插入到重傳隊列中,以方便后續(xù)的重傳操作;圖3中的第6行信息,即“Search_Mem(): find PkgNum=2 Pkg”,說明系統(tǒng)在收到ACK型報文后,會利用該ACK號(即“576002”)在發(fā)送隊列里查找那些ACK號小于等于的該ACK號的所有TCP報文;圖3中的第24行和第26行信息,即“Delete_Mem():the first Pkg of PkgNum=5 deleted”和“Delete_Mem():the first Pkg of PkgNum=6 deleted”,說明系統(tǒng)在接收到ACK型的TCP報文9后,利用該ACK號刪掉了重傳隊列中對應(yīng)的報文5和報文6,圖3中的第24行信息“Delete_BeforSeqMem(): total 2 pkgs are deleted”也說明了在函數(shù)Delete_BeforSeqMem()中刪除了2個TCP包;圖3中的第25行信息,即“Free_Mem(): free the PkgNum=5 success”,說明系統(tǒng)成功釋放了該TCP包所占的內(nèi)存區(qū)塊。

    圖3 測試TCP順序鏈表時的輸出信息 圖4 測試TCP重傳計時器時的輸出信息

    由于將系統(tǒng)直接接到PC上時,網(wǎng)絡(luò)環(huán)境比較穩(wěn)定,為了迫使TCP啟動重傳模塊,可以在服務(wù)器TCP層發(fā)送數(shù)據(jù)時人為將系統(tǒng)與PC機的網(wǎng)絡(luò)斷開一會兒后迅速連上。調(diào)試信息如圖4所示。由圖4可以看出,由于沒有及時收到客戶端的ACK而導(dǎo)致重發(fā)了報文5和報文6,并且在收到的報文9后刪掉了順序鏈表中對應(yīng)的報文5和報文6。

    為測試筆者實現(xiàn)的TCP重傳模塊是否能正常工作。筆者采用如下思路進行驗證:分別在2個傳輸方向上進行驗證,首先驗證服務(wù)器是否能正常傳輸數(shù)據(jù)到客戶端。試驗過程中采用人工物理方式(如火燒)對嵌入式Web服務(wù)器系統(tǒng)中的傳感器進行升溫,并查看客戶端PC機的Web瀏覽器是否能實時刷新顯示該傳感器的溫度數(shù)據(jù),結(jié)果如圖5所示。該結(jié)果顯示服務(wù)器能正常傳輸數(shù)據(jù)到客戶端;接著驗證客戶端是否能正常上傳數(shù)據(jù)到服務(wù)器,在客戶端PC機上利用鼠標點擊LED的“亮”或者“滅”控制開關(guān),同時查看嵌入式Web服務(wù)器系統(tǒng)中的LED燈是否能同步亮/滅,結(jié)果顯示,用戶完全可以通過Web瀏覽器來控制Web服務(wù)器系統(tǒng)中的LED燈。該結(jié)果顯示客戶端能正常上傳數(shù)據(jù)到服務(wù)器。因此,通過上述TCP重傳隊列實現(xiàn)的TCP重傳機制能完成既定的嵌入式TCP服務(wù)。

    圖5 客戶端動態(tài)獲取服務(wù)器系統(tǒng)中的傳感器溫度數(shù)據(jù)

    [1]黃文力,馬禮, 王玉超.嵌入式Internet中TCP/IP協(xié)議棧的研究與設(shè)計[J].電腦開發(fā)與應(yīng)用,2008,21(1):46-49.

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

    [3] 李金梁,景博.嵌入式Internet中TCP協(xié)議的設(shè)計與實現(xiàn)[J].微計算機信息,2005,21(7):40-138.

    [4] 陳維良,趙俊超,魏少軍.TCP/IP協(xié)議的ASIC設(shè)計與實現(xiàn)[J].微電子學(xué),2002,32(2):97-101.

    [5] 王敏杰,徐昌彪,劉光明.無線網(wǎng)絡(luò)下TCP重傳定時器研究[J].計算機工程與應(yīng)用,2004(36):146-150.

    [6] 章淼,熊勇強,吳建平.TCP重傳計時器的實現(xiàn)和改進[J].計算機工程與應(yīng)用,2000(12):132-146.

    [7] 游海峰,何涇沙,張偉.基于TCP重傳計時器的算法分析[J].電腦知識與技術(shù),2007(1):83-89.

    [8]劉波濤,馮翠麗,王青海,等.應(yīng)用RTL8019AS的嵌入式Web服務(wù)器硬件實現(xiàn)[J].長江大學(xué)學(xué)報(自然科學(xué)版),2008, 5(1):N75-78.

    [編輯] 洪云飛

    10.3969/j.issn.1673-1409(N).2012.06.036

    TN915.04

    A

    1673-1409(2012)06-N108-04

    猜你喜歡
    重傳鏈表結(jié)點
    基于二進制鏈表的粗糙集屬性約簡
    跟麥咭學(xué)編程
    面向異構(gòu)網(wǎng)絡(luò)的多路徑數(shù)據(jù)重傳研究?
    基于鏈表多分支路徑樹的云存儲數(shù)據(jù)完整性驗證機制
    Ladyzhenskaya流體力學(xué)方程組的確定模與確定結(jié)點個數(shù)估計
    數(shù)據(jù)鏈路層的選擇重傳協(xié)議的優(yōu)化改進
    鏈表方式集中器抄表的設(shè)計
    電測與儀表(2014年1期)2014-04-04 12:00:22
    基于Raspberry PI為結(jié)點的天氣云測量網(wǎng)絡(luò)實現(xiàn)
    MPTCP中一種減緩緩存阻塞的重傳策略
    選擇性重傳法在IPTV中的應(yīng)用
    盐津县| 黄冈市| 惠来县| 太湖县| 白沙| 河源市| 治县。| 湟中县| 于都县| 磴口县| 同德县| 方城县| 五原县| 达拉特旗| 双流县| 金昌市| 兴国县| 青龙| 大丰市| 黄陵县| 焦作市| 谢通门县| 陵水| 福安市| 炎陵县| 台湾省| 云林县| 旅游| 临夏市| 堆龙德庆县| 清徐县| 德格县| 聂拉木县| 贡觉县| 改则县| 龙山县| 彩票| 长泰县| 青铜峡市| 宁化县| 开封县|