几种开源TCPIP协议概述--LwIP,uIP,TinyTcp和uC/IP

news/2024/11/25 3:59:40/

原文地址:已缺失

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之间。http://ucip.sourceforge.net

 

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。http://www.sics.se/~adam/lwip/或http://savannah.nongnu.org/projects/lwip/

 

4、uIP

    uIP是专门为8位和16位控制器设计的一个非常小的TCP/IP栈。完全用C编写,因此可移植到各种不同的结构和操作系统上,一个编译过的栈可以在几KB ROM或几百字节RAM中运行。uIP中还包括一个HTTP服务器作为服务内容。许可:BSD许用证http://www.sics.se/~adam/uip/

 

5、TinyTcp

   TinyTcp 栈是TCP/IP的一个非常小和简单的实现,它包括一个FTP客户。TinyTcp是为了烧入ROM设计的并且现在开始对大端结构似乎是有用的(初始目标是68000芯片)。TinyTcp也包括一个简单的以太网驱动器用于3COM多总线卡http://ftp.ecs.soton.ac.uk/pub/elks/utils/tiny-tcp.txt

 

选择一个开源协议栈可以从四个方面来考虑
       一个是是否提供易用的底层硬件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是一种挑战性的工作,它尚需完善。


http://www.ppmy.cn/news/586614.html

相关文章

tcp/ip 原型及分析

转自http://blog.csdn.net/angle0615303/article/details/7717256 1、BSD TCP/IP协议栈 BSD栈历史上是其他商业栈的起点,大多数专业TCP/IP栈(VxWorks内嵌的TCP/IP 栈)是BSD栈派生的。这是因为BSD栈在BSD许可协议下提供了这些专业栈的雏形&…

linux下不同arm 编译器的异同

1、EABIarm-2008q3-39-arm-none-eabi Sourcery G Lite 2008q3-39 All versions... Sourcery G for ARM EABI is for use in bare-metal and/or RTOS environments.(适用于编译裸机或RTOS环境上的应用,比如u-boot等);Run-Time Li…

Word Ladder II

总算通过了,思路是预先建立每个单词可转换的单词集合到一个map,然后广度优先从开始单词进行处理,一直到碰到结束单词。 package algo;import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util…

4.25 IO多路复用简介 4.26select API介绍 4.27 select代码编写

4.25 IO多路复用简介 IO多路复用使得程序能同时监听多个文件描述符,能够提高程序的性能,Linux下实现IO多路复用的系统调用主要有select、poll和epoll。 4.26select API介绍 主旨思想: 1、首先构造一个关于文件描述符的列表&#xff…

ELK完整搭建过程 -- 以及各个坑点解决方案

搭建环境 系统 Ubuntu-12.04.5-server-amd64(不建议大家用Ubuntu!坑太多) 环境 jdk-8u131-linux-x64.tar.gz node最新版本 grunt-cli最新版本(cnpm安装,npm可能被墙!) 软件 elasticsearch-5.4.1.tar.gz kibana-5.4.1-linux-x86_64.tar.gz logstash-5.4.1.tar.gzElas…

几种开放源码的TCP/IP协议栈比较

http://blog.chinaunix.net/uid-28785506-id-3828286.html 原文地址:几种开放源码的TCP/IP协议栈比较 作者:三点水兽 1、BSD TCP/IP协议栈 BSD栈历史上是其他商业栈的起点,大多数专业TCP/IP栈(VxWorks内嵌的TCP/IP栈)是…

【龙芯1c库】移植硬浮点FPU

龙芯1c库是把龙芯1c的常用外设的常用功能封装为一个库,类似于STM32库。完整源码请移步到https://gitee.com/caogos/OpenLoongsonLib1c 龙芯1C上有硬浮点协处理器,整个移植过程主要参考《see mips run 中文版.pdf》中第7章“浮点支持”。文档《see mips …

BZOJ 1695 [Usaco2007 Demo]Walk the Talk 链表+数学

题意:链接 方法:乱搞 解析: 出这道题的人存心报复社会。 首先这个单词表…先上网上找这个单词表… 反正总共2265个单词。然后就考虑怎么做即可了。 刚開始我没看表,找不到怎么做,最快的方法我也仅仅是想到了类n^6的做法。 然后我就卡关辣,这关…