?

LwIP協議棧的內部數據管理方法研究

2024-04-13 02:57顏晨陳翔孫云華
自動化與信息工程 2024年1期
關鍵詞:數據存儲數據管理

顏晨 陳翔 孫云華

本文引用格式:顏晨,陳翔,孫云華.LwIP協議棧的內部數據管理方法研究[J].自動化與信息工程,2024,45(1):18-22.

YAN Chen, CHEN Xiang, SUN Yunhua. Study on the internal data management methods of LwIP protocol stack[J]. Automation & Information Engineering, 2024,45(1):18-22.

摘要:LwIP作為輕量化的網絡協議棧在嵌入式設備中應用廣泛。該文研究LwIP協議棧的內部數據管理方法,以便更好地應用及開發新的協議棧。首先,介紹LwIP協議棧的數據存儲方法,并與FreeRTOS存儲方法進行對比;然后,針對網絡設備傳輸能力不同造成的數據包分片問題,探討LwIP協議棧組成完整數據包采用的數據管理方法;最后,研究LwIP協議棧在TCP層的軟件設計思路。

關鍵詞:LwIP協議棧;內存管理;數據管理;數據存儲

中圖分類號:TP316.8? ? ? ? ? ? ?文獻標志碼:A? ? ? ? ? 文章編號:1674-2605(2024)01-0003-05

DOI:10.3969/j.issn.1674-2605.2024.01.003

Study on the Internal Data Management Methods of LwIP Protocol Stack

YAN Chen? CHEN Xiang? SUN Yunhua

(China Key System & Integrated Circuit Co., Ltd., Wuxi 214072, China)

Abstract: LwIP is widely used as a lightweight network protocol stack in embedded devices. This article studies the internal data management methods of the LwIP protocol stack in order to better apply and develop new protocol stacks. Firstly, introduce the data storage method of the LwIP protocol stack and compare it with the FreeRTOS storage method; Then, in response to the data packet fragmentation problem caused by different transmission capabilities of network devices, explore the data management methods used to form a complete data packet using the LwIP protocol stack; Finally, study the software design approach of the LwIP protocol stack at the TCP layer.

Keywords: light weight IP (LwIP); memory management; data management; data storage

0? 引言

隨著物聯網的快速發展,智能設備讓人們的生活更加便利、高效和智慧化。智能設備的正常運行需要網絡協議棧的支持。LwIP作為輕量化的網絡協議棧,可以在20 kB RAM和40 kB ROM的存儲設備上運 行[1-3],硬件要求低,功能齊全,且開源免費,相較于其他輕量化的網絡協議棧具有更廣泛的應用前景[4]。

輕量化的網絡協議?;究梢詫崿FTCP/IP功能,研究其數據管理方法既可以在開發其他協議棧時借鑒數據管理思路,又有助于處理數據傳輸方面的問題。

目前,國內外很少有文獻全面地描述LwIP協議棧的數據管理方法。本文介紹LwIP協議棧的數據存儲方法,并與FreeRTOS存儲方法進行對比;分析LwIP協議棧IP層為收到完整的分片數據而設計的數據結構;闡述TCP層為接收窗口內的數據包而使用的掛載方式,并用分層結構揭示了TCP層發送數據時的存儲方式。

1? LwIP協議棧的數據存儲方法

因為嵌入式系統的內存空間有限,所以TCP/IP協議棧的緩沖區管理是協議實現的關鍵[5-7]。LwIP協議棧主要采用的動態內存池和動態內存堆[8]從本質上看都是從RAM中分配的數組。

動態內存池是根據LwIP協議棧需要的數據結構體來分配的不同大小數組,且每種池內的連續內存是單鏈表連接,各種池的基地址存放在一個數組內,方便索引,結構如圖1所示。

LwIP協議棧有許多固定的數據結構,使用這些固定的數據結構空間時,動態內存池可快速地提供所需的內存地址。當數據結構的空間需回收時,動態內存池只要找到這種數據結構的動態內存池鏈表頭,將數據結構的內存指針放進去即可。該方法無需進行地址的比較判斷和內存合并,分配效率較高,不會產生碎片,適用于固定的數據結構管理。

動態內存堆是一個較大的數組,其大小可由用戶定義,分配后的內存地址由雙鏈表進行連接。為快速得到所需內存,需對內存的地址和大小進行對齊。雙鏈表的節點記錄了前后節點的位置,且節點不管是否使用都會出現在鏈表上。內存管理結構體采用used變量來標記該內存是否使用。當需要回收內存時,如果該內存前后沒有空閑內存,只需要改變used變量值;如果該內存前后有空閑內存,除改變used變量值外,還需要合并前后的內存來減少內存碎片[9]。利用節點的前后指針能調整雙鏈表的指針,從而合并空閑內存。

目前,FreeRTOS有5種內存堆管理機制可供用戶選擇[10-12],其中,heap_4.c的內存堆管理機制應用較為廣泛。其采用最佳匹配算法和合并算法,利用單鏈表把未使用的內存地址連接起來。在取內存時,切割所需的內存后,若剩余的內存滿足最小容量,從低地址開始查找,找到合適的位置后,重新放入空閑的內存鏈表中[13]?;厥諆却鏁r也需從低地址開始查找合適的位置,并根據該內存的地址和大小,計算前后內存是否與該內存相鄰,若相鄰,則進行合并。

LwIP協議棧、FreeRTOS的內存合并方法分別如圖2、3所示。

由圖2、3可知:FreeRTOS內存管理結構簡單(單鏈表),但當FreeRTOS取內存和回收內存時,除切割剩余的內存大小外,還需要把內存地址按從低到高的順序插入空閑鏈表中,并計算其與前后內存是否相鄰,若相鄰則進行合并;而LwIP協議棧采用雙鏈表,取內存時只需在鏈表內增加一個節點,回收內存時無需計算前后內存是否相鄰。

2? IP層對數據包分片的接收處理

LwIP協議棧利用動態內存來存放接收的數據,并采用pbuf結構體進行管理。Pbuf結構體既能兼容各種類型的數據,又能避免LwIP協議棧各層之間拷貝數據[14-16]。網絡中有不同類型的數據包分片,這些數據包分片可能不會按順序到達LwIP協議棧。為此,LwIP協議棧設計了兩條鏈表:一條鏈表掛載不同類型數據包分配的ip_reassdata結構體;另一條鏈表掛載同一個數據包內的分片數據。LwIP協議棧分片重裝數據結構如圖4所示。

對于排序數據包分片的管理,LwIP協議棧利用指針串起數據包分片,且數據包分片需攜帶相對原數據的偏移量來進行排序。LwIP協議棧沒有額外占用內存申請變量記錄上述數據,而是在pbuf中使用ip_reass_helper結構體,把IP層分片數據首部的前8個字節轉換為下一個分片的指針next_pbuf、此分片相對原始數據的偏移量start和結束位置end。這樣在排序過程中,節約了額外申請管理結構體的時間和空間。在排序完成后,只要把首個pbuf數據的首部復原,其他分片pbuf只要調整payload位置即可。這樣IP層在提交給上層所需數據的同時,過濾了轉換的字節。IP層處理完數據包分片后的pbuf鏈如圖5所示。

3? TCP層數據處理方式

為確保收到的數據完整、準確,TCP層做了可靠的傳輸服務,包括超時重傳、快速重傳等。這些服務依賴于發送、接收數據的精細管理,要求數據不能丟失和錯亂。

3.1? TCP層接收數據

在接收數據的過程中,IP層重點關注接收的數據包是否完整,而TCP層重點關注接收的數據包是否連續,因此,TCP層會對數據包中的數據進行編號。IP層提交pbuf數據時,TCP層利用tcp_seg結構體記錄pbuf數據中的關鍵數據,且掛載pbuf數據;同時利用一條ooseq鏈表,按照序號順序掛載tcp_seg結構體。tcp_seg結構體中數據包序號在TCP層接收窗口內。TCP層ooseq鏈表掛載結構如圖6所示。

TCP層數據包接收示意圖如圖7所示。

由圖7可知,若收到的數據包不是TCP層期望的下一個數據,但滿足其接收范圍時,會掛在ooseq鏈表上;若下一個數據既包含了TCP層期望的數據,又包含了ooseq鏈表上的數據,那么這個數據兩頭被截斷,與ooseq鏈表上的數據組成TCP層期望的數據流交給應用層。

TCP層接收數據的方式與IP層組裝數據包不同,IP層利用ip_reass_helper結構體記錄數據結束位置end,為拋棄有重復字節的數據包分片提供了便利。TCP層利用序號和長度組裝數據包,方便對重復字節進行截取并重組數據流。

3.2? TCP層發送數據

在發送數據時,TCP層為了盡可能多地發送符合要求的數據,利用tcp_seg來管理數據,通過unsend鏈表來掛載tcp_seg。因為應用層要發送的數據量不確定,為了在發送數據前盡可能多地裝載數據和減少裝載時間,設計了三層數據拷貝空間。

第一層,tcp_seg管理的數據量是通信對方可以接受的。

第二層,應用層把數據拷貝到LwIP協議棧時,協議棧會申請盡可能大的內存,內存大小是一條報文攜帶的最大數據量和一個tcp_seg攜帶的剩余數據量的最小值。當不需要數據拷貝時,則無需申請應用層的數據空間,也就沒有第三層空間。

第三層,把應用層數據放入申請的數據包空間后所剩余的內存空間。

拷貝數據的空間分布如圖8所示,不拷貝數據的空間分布如圖9所示。

3.3? TCP層軟件設計

在TCP層軟件設計方面,LwIP協議棧采用了分批裝載后再組裝的方法。

1) 根據數據大小,分批裝載最多分為三步:

第一步,占用第三層空間;

第二步,當數據存放空間不夠時,pbuf申請占用第二層空間并存放數據;

第三步,當數據存放空間還不夠時,tcp_seg和pbuf申請占用第一層空間存放數據。

2) 根據裝載使用的空間,組裝最多分為三步:

第一步,將數據存放在第三層空間;

第二步,連接pbuf;

第三步,連接tcp_seg。

該方法既適用于拷貝數據的情況,又適用于不拷貝數據的情況,且滿足一條數據幀盡可能地多發數據的要求,也為下層整理好需要發送的數據,方便隨時發送。在拷貝數據時,不用每次申請空間;不拷貝數據時,直接申請pbuf結構體來掛載合適的數據量。

4? 結束語

本文以LwIP輕量化網絡協議棧為研究對象,主要分析了其內部數據的管理方法,包括數據的存儲方法、IP層對數據包分片的接收處理方法以及TCP層對數據的處理方法。從LwIP協議棧中揭示數據管理思想,希望可以加深對數據結構設計的理解,從而有助于LwIP協議棧的應用和新協議棧的開發。

參考文獻

[1] DUNKELS A. Design and implementation of the LwIP TCP/IP stack[M]. Kista, Swedish Institute of Computer Science, 2001.

[2] 來愛華,盧軍,游繼安.基于LwIP協議的多點控制系統研究[J].湖北工程學院學報,2016,36(3):28-33.

[3] 張杰建,陳志裕,黨書東,等.基于光纖以太網技術的電梯機房與轎廂間通信研究[J].機電工程技術,2023,52(7):263-267.

[4] XIAO fang, LIN chen, HONG Zhiyin. The measurement and control system of agricultural greenhouse based on network[J]. Adv Mat Res,2014,3181(926-930):1488-1492.

[5] 鄧會敏,賀再紅,譚懷亮.嵌入式協議棧緩沖區管理的簡化實現方法[J].微計算機信息,2006,22(29):166-169.

[6] 苗大龍,李果,張廣明,等.基于AT89C51RC的以太網數據采集器設計與實現[J].機床與液壓,2011,39(2): 101-103;84.

[7] 李陽,范文慧,劉姝玉,等.大規模自組網動態時隙分配算法測試[J].中國測試,2023,49(10):34-39.

[8] 蔡雄飛,王新華,郭淑琴.嵌入式TCP/IP協議LwIP的內存管理機制研究[A].浙江省信號處理學會.浙江省信號處理學會2012學術年會論文集[C].浙江省信號處理學會,2012:4.

[9] SUNG W. Memory management method in embedded system: U.S. Patent 9,317,425[P]. 2016-4-19.

[10] 劉火良,楊森. FreeRTOS內核實現與應用開發實戰指南(基于STM32)[M].北京:機械工業出版社,2019.

[11] 彭小松,關葉佳,王楚虹.仿真人手同步遠程控制機械手設計[J].機電工程技術,2021,50(6):151-154.

[12] 安嘉強,湯曉華,劉美蓮,等.基于ARM-MCX514的機器人-數控協同系統運動控制器設計[J].機床與液壓,2020,48(3): 58-62

[13] HE Wei, HE Jianzhong. Analysis and improvement on FreeRTOS memory management mechanism[J]. Computer Engineering, 2010,36(10):67-69.

[14] 朱升林.嵌入式網絡那些事[M].北京:中國水利水電出版社, 2012.

[15] 薛建彬,郭燕波,許洋,等.LwIP在微控制系統中的移植與應用[J].數字技術與應用,2016(10):2.

[16] 胡畔,聶祺昕,劉曉強,等.基于離散域采樣數據模型的電力移動終端邊緣節點數據采集系統設計[J].中國測試,2022, 48(8):144-149.

作者簡介:

顏晨,男,1992年生,碩士研究生,工程師,主要研究方向:嵌入式系統及通信網絡。E-mail: hhyanchen@qq.com

猜你喜歡
數據存儲數據管理
企業級BOM數據管理概要
定制化汽車制造的數據管理分析
海洋環境數據管理優化與實踐
CTCS-2級報文數據管理需求分析和實現
列控數據管理平臺的開發
大數據時代檔案信息建設的認識和實踐
開源數據庫數據存儲的實現路徑分析
基于Android開發的APP數據存儲研究
哈希算法在物聯網數據存儲中的應用
大型在線式UPS及監控系統在中控機房的應用
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合