一種嵌入式IPv4/IPv6雙協(xié)議棧的實(shí)現
3.4.2 簡(jiǎn)化TCP狀態(tài)機
TCP的面向連接和可靠性傳輸等特性決定了每一個(gè)標準的TCP狀態(tài)機龐大而且復雜,對于嵌入式應用,可以根據需要進(jìn)行簡(jiǎn)化。
建立連接分為主動(dòng)打開(kāi)和被動(dòng)打開(kāi),本協(xié)議棧設計作為監聽(tīng)狀態(tài)的服務(wù)器端,僅實(shí)現被動(dòng)打開(kāi)。在設計中去掉了CLOSED狀態(tài),讓它一開(kāi)始就處于LISTEN狀態(tài),等待對方發(fā)起連接。
斷開(kāi)連接分為主動(dòng)斷開(kāi)和被動(dòng)斷開(kāi),從安全性的角度考慮,本設計僅實(shí)現主動(dòng)斷開(kāi)連接。當服務(wù)器發(fā)送完數據時(shí),向客戶(hù)機發(fā)送關(guān)閉連接請求。
通過(guò)以上分析,根據特定的應用不失一般性的裁減掉復雜和冗余的機制,除去標準狀態(tài)機中的客戶(hù)端部分,簡(jiǎn)化連接的建立和關(guān)閉過(guò)程,就得到如圖2所示的簡(jiǎn)化的TCP狀態(tài)機模型。
3.4.3 簡(jiǎn)化的窗口機制
標準的TCP協(xié)議使用慢啟動(dòng)的滑動(dòng)窗口機制[5],它允許發(fā)送方在等待一個(gè)確認之前發(fā)送多個(gè)窗口。其確認是一種批量的確認,處理器要對多個(gè)數據報連續傳輸進(jìn)行維護和處理,困難較大。
而滑動(dòng)窗口的一個(gè)極限情況,是只使用單個(gè)窗口,這就變成了一種簡(jiǎn)單確認的處理方法。只是對于單個(gè)數據報的發(fā)送和確認,雖然節約了系統的資源,也使維護更加方便,但是卻降低了效率。
系統采用了一個(gè)折中的辦法,適當調整窗口的大小,限制連續發(fā)送報文段的個(gè)數來(lái)實(shí)現了一個(gè)簡(jiǎn)化的窗口機制,如圖3所示。在這里,設置窗口大小(snd_wnd)為4個(gè)最大報文段長(cháng)度(MSS),可以適當提高數據傳輸效率。
4 協(xié)議棧的移植和測試
在完成雙協(xié)議棧的設計調試后,將此協(xié)議棧移植到基于A(yíng)RM7TDMI核的AT91M40800開(kāi)發(fā)板上,使用其中內嵌的10Mbps以太網(wǎng)控制器 RTL8019AS作為網(wǎng)絡(luò )接口。在該平臺上實(shí)現了一個(gè)簡(jiǎn)單的Web Server。通過(guò)構建提供IPv4地址和IPv6地址訪(fǎng)問(wèn)的網(wǎng)絡(luò )拓撲結構進(jìn)行測試,該雙協(xié)議棧運行穩定、正常。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)tcp/ip相關(guān)文章:tcp/ip是什么
評論