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栈的高费用就不足为奇了。 作为广大的爱好者学习而言,如果只是跑跑原型,实验一下效果,以上的几种开源协议栈都提供了测试的例子,应该是不错的选择。

几种开源的TCP/IP协议栈分析相关推荐

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

    http://blog.chinaunix.net/uid-28785506-id-3828286.html 原文地址:几种开放源码的TCP/IP协议栈比较 作者:三点水兽 1.BSD TCP/IP协 ...

  2. 怎样实现linux的网络通信协议是,一种基于Linux系统的TCP/IP协议栈的实现

    一种基于Linux系统的TCP/IP协议栈的实现 本文分析了Linux内核TCP/IP协议栈的实现,给出了Linux网络数据处理流程,探讨了Linux的I (本文共3页) 阅读全文>> 介 ...

  3. STM32F103驱动SDIO wifi Marvell8801/Marvell88w8801 介绍(十) ---- 移植TCP/IP协议栈LWIP

    代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...

  4. Linux TCP/IP协议栈之Socket的实现分析

    数据包的接收 作者:kendo http://www.skynet.org.cn/viewthread.php?tid=14&extra=page%3D1 Kernel:2.6.12 一.从网 ...

  5. linux 协议栈之socket,Linux TCP/IP 协议栈之 Socket 的实现分析(一)

    内核版本:2.6.37 参考[作者:kendo的文章(基于内涵版本2.6.12)] 第一部份 Socket套接字的创建 socket 并不是 TCP/IP协议的一部份. 从广义上来讲,socket 是 ...

  6. TCP/IP协议栈模型分析

    标准TCP/IP协议是用于计算机通信的一组协议,通常被称为TCP/IP协议栈,以它为基础组建的互联网是目前国际上规模最大的计算机网络. 正因为互联网的广泛应用,使得TCP/IP成为了事实上的网络标准. ...

  7. TCP/IP协议栈到底是内核态好还是用户态好?

    "TCP/IP协议栈到底是内核态的好还是用户态的好?" 问题的根源在于,干嘛非要这么刻意地去区分什么内核态和用户态. 引子 为了不让本文成为干巴巴的说教,在文章开头,我以一个实例分 ...

  8. TCP/IP协议栈到底是内核态的好还是用户态的好?

    "TCP/IP协议栈到底是内核态的好还是用户态的好?"这根本就是一个错误的问题,问题的根源在于,干嘛非要这么刻意地去区分什么内核态和用户态. 引子 为了不让本文成为干巴巴的说教,在 ...

  9. TCP/IP 协议栈4层结构及3次握手4次挥手

    TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输.TCP/IP 协议采用4层结构,分别是应用层.传输层.网络层和链路 ...

最新文章

  1. SpringMVC处理Date类型的成员变量方法
  2. python解码函数_python2和python3的编码encode解码decode函数
  3. 目标指令c语言是什么,什么是C中的目标文件?
  4. 关于项目管理的一些想法
  5. 实时视频传输中的BBR拥塞控制
  6. 图像处理傅里叶变换的理解及其matlab实现
  7. Codeforces Round #693 (Div. 3) E. Correct Placement 思维
  8. mysql binlog 备份_MySQL的binlog知识梳理
  9. 0603学术诚信与职业道德
  10. 对于glut和freeglut的一点比较和在VS2013上的配置问题
  11. 快手活跃用户预测_哈工大团队解决方案
  12. 从零开始学习Android开发-Android概览
  13. 图观小课堂知识点——场景编辑器
  14. 三维GIS+电力巡检,开启电缆通道数字化巡检新局面
  15. 【超级有用】大数据的压缩格式
  16. evolution ubuntu邮箱_linux下有什么好用的邮件客户端?
  17. Python语言程序设计基础_期末作品设计_答案_通识教育必修课程_上海师范大学
  18. 计算机中用函数排序,编写一个sort()函数,实现选择法排序,在主函数中输入10个整数,主函数调用sort()函数实现排序后将数据输出。...
  19. C语言经典例题及答案3
  20. 字体与版式设计 字体设计让你的信息变独特

热门文章

  1. 【计算理论】计算复杂性 ( NP 类不同表述 | 团问题 | P 对 NP 问题 )
  2. 【Netty】Netty 异步任务模型 及 Future-Listener 机制
  3. 【网站建设】Linux上安装MySQL - 12条命令搞定MySql
  4. 医疗影像网络PACS系统方案
  5. Dart 调用C语言混合编程
  6. 什么样的对象会进入老年代
  7. BZOJ 3884 上帝与集合的正确用法 (欧拉定理)
  8. 关于html5和css3的新特性
  9. 越心虚越藏着掖着,越藏越掖越脱节
  10. React入门看这篇就够了