嵌入式TCP/IP的實現
TCP/IP的嵌入式實現一般通過以軟件方式嵌入到ROM中,然後通過輕網絡通訊技術與(yu) 專(zhuan) 用嵌入式網關(guan) 連接,在嵌入式處理器中運行TCP/IP協議,提供TCP/IP到用戶的輕型網絡的連接和路由功能。
內(nei) 存管理方法和無多餘(yu) 數據包拷貝的實現
嵌入式TCP/IP的內(nei) 存管理可以用鏈表方法,即根據數據包大小分配相應大小的內(nei) 存塊。如圖4所示,鏈表將內(nei) 存塊鏈接起來,used字段表示該內(nei) 存塊是否正在使用,pSstart和pEend則表示數據部分有效數據的開始地址和結束地址。搜索內(nei) 存鏈表找到一個(ge) 沒有分配的比所需空間大的內(nei) 存塊,截取所需的大小。該內(nei) 存塊被截取以後可能還有較多剩餘(yu) ,這時將剩餘(yu) 部分從(cong) 原內(nei) 存塊中分離出來,成為(wei) 一個(ge) 新的內(nei) 存塊,並插入鏈表。釋放時,將used值置為(wei) 假, 如果pNext或者pPre指向的鏈表單元也是空閑的,則將其和自己合並,以防止內(nei) 存分片。在協議層之間傳(chuan) 送數據包隻需傳(chuan) 送內(nei) 存塊的起始地址。這種內(nei) 存管理方法,空間浪費小但是運算量相對較大。

圖4 基於(yu) 嵌入式TCP/IP內(nei) 存管理
整序、重發和窗口控製的實現
對於(yu) 嵌入式TCP/IP係統,可以使用隊列緩存的方式來實現整序、重發和窗口控製。隊列的一個(ge) 元素指向一個(ge) 數據包,隊列的最大長度沒有限製。
對於(yu) 整序,使用ooSeq隊列,如果發現接收的TCP包序號並不是期望的,但序號在接收窗口內(nei) ,此時不能立刻接收這個(ge) 包也不應丟(diu) 棄,可先將這個(ge) 包放入ooSeq隊列。當期望TCP包被接收後,再查看ooSeq隊列現在是否有TCP包成為(wei) 了期望的數據包,如果有則將其取出並處理。
對於(yu) 重發,使用unacked隊列,每一個(ge) 需要被應答的TCP數據包發送以後都要放入unacked隊列,等到被應答以後才從(cong) 隊列中刪除。TCP重發定時隻針對unacked隊列第一個(ge) TCP包,如果定時超出,重新發送,重發次數超出規定值,則報錯。
對於(yu) 窗口控製,使用unsend隊列,如果發現對方的窗口過小無法接收這個(ge) 數據包,則隻發送部分數據,將多餘(yu) 部分放入unsend隊列,等待對方發來TCP包通知新的窗口大小時,再次判斷是否可以發送。如果在unsend隊列不為(wei) 空的情況下,需要發送的數據包都應插入unsend隊列。
嵌入式TCP/IP的性能分析
圖5給出了將優(you) 化設計後的TCP/IP移植到ARM9處理器、CS8900A網絡控製器中,時鍾頻率為(wei) 133MHz下,與(yu) Internet連接的情況。
圖5 連接圖
係統支持最大發起連接數約為(wei) 380,最大並發連接率約為(wei) 170cps。隨著呼叫數的增加,平均分組到達也隨之增加,導致網絡傳(chuan) 輸數據的增加,從(cong) 而最大建立時間變長。但最小的建立連接時間基本保持不變,說明係統具有良好的性能。
圖6給出了隨建立時間變化的接通率。圖中存在一個(ge) 臨(lin) 界點,成功的連接率隨著TCP連接嚐試數目增加而減少,直至為(wei) 0,而響應時間也急劇上升,這是由嵌入式處理器的處理能力有限造成的。

圖6 隨建立時間變化的連接圖
結語
本文從(cong) 實現相應的功能又節省係統資源角度出發,對嵌入式TCP/IP協議簇進行優(you) 化設計,可以在各種嵌入式處理器上實現Internet接入。
經過優(you) 化設計的嵌入式TCP/IP支持套接字形式的多個(ge) TCP連接、支持多個(ge) 網絡設備、支持通過網關(guan) 發送數據包和數據包轉發功能,以及支持TCP包的整序、重發和窗口控製流量控製。實踐證明,這種設計方式靈活,能按用戶需求實現複雜的功能。
轉載請注明出處。







相關文章
熱門資訊
精彩導讀



















關注我們

