天天看點

幾種開放源碼的TCP/IP協定棧比較

1、BSD TCP/IP協定棧

     BSD棧曆史上是其他商業棧的起點,大多數專業TCP/IP棧(VxWorks内嵌的TCP/IP棧)是BSD棧派生的。這是因為BSD棧在BSD許可協 議下提供了這些專業棧的雛形,BSD許用證允許BSD棧以修改或未修改的形式結合這些專業棧的代碼而無須向建立者付版稅。同時,BSD也是許多 TCP/IP協定中的創新(如廣域網中餓擁塞控制和避免)的開始點。

2、uC/IP

    uC/IP是由Guy Lancaster編寫的一套基于uC/OS且開放源碼的TCP/IP協定棧,亦可移植到其它作業系統,是一套完全免費的、可供研究的TCP/IP協定 棧,uC/IP大部分源碼是從公開源碼BSD釋出站點和KA9Q(一個基于DOS單任務環境運作的TCP/IP協定棧)移植過來。uC/IP具有如下一些 特點:帶身份驗證和報頭壓縮支援的PPP協定,優化的單一請求/回複互動過程,支援IP/TCP/UDP協定,可實作的網絡功能較為強大,并可裁減。 UCIP協定棧被設計為一個帶最小化使用者接口及可應用串行鍊路網絡子產品。根據采用CPU、編譯器和系統所需實作協定的多少,協定棧需要的代碼容量空間在 30-60KB之間。

3、LwIP

     LwIP是瑞士計算機科學院(Swedish Institute of Computer Science)的Adam Dunkels等開發的一套用于嵌入式系統的開放源代碼TCP/IP協定棧。LwIP的含義是Light Weight(輕型)IP協定,相對于uip。LwIP可以移植到作業系統上,也可以在無作業系統的情況下獨立運作。LwIP TCP/IP實作的重點是在保持TCP協定主要功能的基礎上減少對RAM的占用,一般它隻需要幾十K的RAM和40K左右的ROM就可以運作,這使 LwIP協定棧适合在低端嵌入式系統中使用。LwIP的特性如下:支援多網絡接口下的IP轉發,支援ICMP協定 ,包括實驗性擴充的的UDP(使用者資料報協定),包括阻塞控制,RTT估算和快速恢複和快速轉發的TCP(傳輸控制協定),提供專門的内部回調接口 (Raw API)用于提高應用程式性能,并提供了可選擇的Berkeley接口API。    uIP是專門為8位和16位控制器設計的一個非常小的TCP/IP棧。完全用C編寫,是以可移植到各種不同的結構和作業系統上,一個編譯過的棧可以在幾KB ROM或幾百位元組RAM中運作。uIP中還包括一個HTTP伺服器作為服務内容。許可:BSD許用證

5、TinyTcp

    TinyTcp 棧是TCP/IP的一個非常小和簡單的實作,它包括一個FTP客戶。TinyTcp是為了燒入ROM設計的并且現在開始對大端結構似乎是有用的(初始目标是68000晶片)。TinyTcp也包括一個簡單的以太網驅動器用于3COM多總線卡 選擇一個開源協定棧可以從四個方面來考慮:

       一個是是否提供易用的底層硬體API,即與硬體平台的無關性;

       一個是與作業系統的核心API。協定棧需要調用的系統函數接口是否容易構造,

       另一個對于應用支援程度。

       最關鍵的是占用的系統資源是否在可接受範圍内,有裁減優化的空間否? 

其中,BSD 棧可完整實作TCP/IP協定,但代碼龐大,70KB-150KB之間,裁減優化有難度,uIP和TinyTcp代碼容量小巧,實作功能精簡,限制了在一些較高要求場合下的應用,如可靠性與大容量資料傳輸。

LwIP 和uC/IP是同量級别的兩個開源協定棧,兩者代碼容量和實作功能相似,LwIP沒有作業系統針對性,它将協定棧與平台相關的代碼抽象出來,使用者如果要移 植到自己的系統,需要完成該部分代碼的封裝,并為網絡應用支援提供了API接口的可選性。uC/IP協定最初是針對uC/OS設計,為友善使用者移植實作, 同樣也抽象了協定棧與平台相關代碼,但是協定棧所需調用的系統函數大多參照uC/OS核心函數原型設計,并提供了協定棧的測試函數,友善使用者參考,其不足 在于該協定棧對網絡應用支援不足。 

根據以上分析,從應用和開發的角度看,似乎LWIP更得到了網上很多朋友使用的青睐;uC/IP在文 檔支援與軟體更新管理上有很多不足,但是它最初是針對UC/OS而設計,如果選用UC/OS作為軟體基礎的話,在系統函數構造方面有優勢。當然你選擇其他 作業系統的話,可參照OS_NULL檔案夾下的檔案修改。 以上的這些開源協定棧也并非免費,拿來就可以用,據我所知,UC/OS的母公司推出UC/OS-TCP/IP花了6人*2年的工作量,國内某公司使用 LWIP作為移植的參照,花了4-5人*2年的工作量來測試與優化協定,使用商用TCP/IP棧的高費用就不足為奇了。 作為廣大的愛好者學習而言,如果隻是跑跑原型,實驗一下效果,以上的幾種開源協定棧都提供了測試的例子,應該是不錯的選擇。

個人的看法:LWIP可優先考慮,至少網上有很多的人一塊研究,參考的資料較多;UC/IP其次,如果你想深入學習TCP/IP的話,移植UC/IP是一種挑戰性的工作,它尚需完善。

------------------越是喧嚣的世界,越需要甯靜的思考------------------

合抱之木,生于毫末;九層之台,起于壘土;千裡之行,始于足下。

積土成山,風雨興焉;積水成淵,蛟龍生焉;積善成德,而神明自得,聖心備焉。故不積跬步,無以至千裡;不積小流,無以成江海。骐骥一躍,不能十步;驽馬十駕,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓無爪牙之利,筋骨之強,上食埃土,下飲黃泉,用心一也。蟹六跪而二螯,非蛇鳝之穴無可寄托者,用心躁也。

繼續閱讀