单片机TCP IP协议栈实现的原理
对已TCP IP协议栈,我们已经说了很多关于它的原理相关的知识了。但是只有原理是不够的,在这方面我们将要举出一个实际操作实例为大家讲解,那么首先我们来看一下有关于单片机TCP/IP就是在单片机上运行的TCP IP协议栈。由于嵌入式联网设备越来越多,需要在嵌入式设备上实现TCP IP协议栈,但是嵌入式设备不同于PC机,它们一般采用MCU也就是单片机而不是CPU作为核心处理器。这就需要在单片机上实现TCP IP协议栈。对于高端的32位单片机,由于其性能已经接近于低端PC机CPU(例如奔腾II系列),所以和在PC上实现TCP IP协议栈没有多大区别;这里主要讲述低端8位(例如51单片机)、16位单片机TCP IP协议栈。
单片机TCP/IP的特点
在单片机上实现TCP/IP与在PC机上实现TCP/IP是有所不同的,它的特点是:
1. 速度慢:12M晶振的51单片机的最快网络传送速度为25KB/s。其中的关键在于TCP/IP需要对传送的每个字节进行校验和计算,以及必要的拷贝。这样51单片机的处理速度就不够了。为了提高单片机TCP/IP的速度一般的方法是要对协议栈进行精简。
2. 程序存储空间和外部RAM空间不大:一般的单片机的最大程序和数据空间为64KB。TCP IP协议一般需要对发送的数据进行缓存,而一个最大的数据包就有1500B左右,当网络速度很大的时候内存消耗将很大。对于非嵌入式TCP IP协议栈,64KB的程序和数据空间是不够的。
3. 单片机体系结构:51单片机是8位机,所以对于需要完成同一个数据操作,32位的PC机可能只需要10条指令,而51单片机可能需要几百条指令。
已有的单片机TCP IP协议栈
由于TCP协议栈的程序流程较为复杂,因为程序中需要处理对方法送过来的数据、发起的连接,而我方并不知道对方会何时进行什么样的操作,这就使得协议处理起来较为复杂。另外一个原因是单片机TCP IP协议栈的稳定性是以非常重要的问题,一个稳定的协议栈需要在实际应用中经过长时间的测试,所以编写一个稳定的单片机TCP IP协议栈更加困难。为此另外一种选择就是使用现有的TCP IP协议栈。
1. eCos单片机TCP IP协议栈(http://ecos.sourceware.org/getstart.html):
eCos TCP/IP栈是涉及与eCos操作系统/内核一起运行的。eCos(和TCP/IP栈)由大量处理其结构支持。eCos TCP/IP栈当前发布了一个测试版,作为一个单独的模块。
2. ZLIP 51单片机TCP IP协议栈(http://www.zlmcu.com/ZLIP/zlip_introduction.htm):
ZLIP是专门为51单片机设计的嵌入式TCP IP协议栈,可以在有操作系统和没有操作系统情况下运行,具有代码量适中、运行速度快、用户接口简单、兼容BSD socket接口的特点。实现了TCP、UDP、ICMP、ARP协议,ZLWeb实现了HTTP协议。支持多TCP连接、多UDP连接同时运行,支持在uc/os-II操作系统下多任务运行数据收发。可以用于51单片机TCP/IP上网解决方案。
3. uc/ip 单片机TCP IP协议栈(http://ucip.sourceforge.net/):
uC/IP(mew-kip)是为为控制其设计的一个TCP IP协议栈。代码基于BSD(很像所有其它栈)但对非常小的覆盖范围功能有所减少。它当前为Linux和DOS目标而建。
4. BSD 单片机TCP IP协议栈(http://www.freebsd.org/internet.html):
BSD栈历史上是其他商业栈的开始点,大多数专业TCP/IP栈(如带Wind-River VxWorks内核的)是BSD栈派生的。这是因为BSD在BSD许可协议下提供了他们的栈,它们的许用证使你能以修改或未修改的形式结合它们的代码而无须向创建者付版税。与GPL许用证相比,如果你结合GPL源代码,后者要求你的GPL中公开你的源代码。
5. lwIP 单片机TCP IP协议栈(http://www.sics.se/~adam/lwip/):
lwIP(轻型)TCP/IP栈是TCP IP协议栈的一个小型实现。它包括带IP和ICMP的TCP和UDP传输层。还提供一个可选的BSD套结籽API。为了性能,还包括一个零拷贝API。LwIP协议栈是为嵌入式系统设计的并能适合40KB的ROM和几百字节的RAM。为了可移植性它用C编写。
6. uIP 单片机TCP IP协议栈(http://www.sics.se/~adam/uip/index.php/Main_Page):
uIP是专门为8位和16单片机设计的一个非常小的TCP IP协议栈。uIP完全用C编写,以此可以移植到各种不同的结构和操作系统上。一个编译的栈可以有几KB ROM或几百字节RAM中运行。uIP还包括一个HTTP服务器作为服务内容。
7. TinyTCP 单片机TCP IP协议栈(http://www.unusualresearch.com/tinytcp/tinytcp.htm):
TinyTCP栈是TCP/IP的一个非常小的简单的实现,它包括一个FTP客户。TinyTCP是为烧入ROM设计的并且现在开始对大端结构似乎是有用的(初始目标是68000芯片)。TinyTCP也包括一个简单的以太网驱动器用于3Com多总线卡。