欢迎来到天天文库
浏览记录
ID:34396564
大小:618.87 KB
页数:42页
时间:2019-03-05
《lwip协议栈的设计与实现_中文译稿》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、TCP/IP协议栈LwIP的设计与实现DesignandImplementationoftheLwIPTCP/IPStack[瑞典]AdamDunkels著adam@sics.se翻译焦海波marsstory99@hotmail.comSwedishInstituteofComputerScienceFebruary20,2001TCP/IP协议栈LwIP的设计与实现-1-摘要LwIP是TCP/IP协议栈的一个实现。它的目的是减少内存使用率和代码大小,使LwIP适用于资源受限系统比如嵌入式系统。为了减少处理和内存需求,LwIP使用不需要任何数据复制的经过裁剪的API。本文描述了
2、LwIP的设计与实现。描述了在协议栈实现中以及像内存与缓冲管理这样的子系统中使用的算法和数据结构。本文还包括LwIP的参考手册以及使用LwIP的代码例子。1简介最近几年,人们对计算机互联以及计算机无线网络支撑设备的兴趣一直不断的增长。计算机逐渐与日常使用的设备无缝集成在了一起,并且价格一直在下降。与此同时,无线网络技术比如蓝牙(Bluetooth)[HNI+98]及IEEE802.11bWLAN[BIG+97]正逐渐的出现在人们的视野中。这些新技术的出现,在许多诸如卫生保健、安全保密、运输及工业处理等领域提供了一个非常诱人的应用前景。一些像传感器一类的轻便设备可以连入互联网,以
3、便随时随地进行监控。在过去的近十年的时间里,互联网技术被证明拥有足够的灵活性以适应不断变化的网络环境。从原始的ARPNET一类的低速网络发展起来的互联网,发展到今天,在带宽和误码率方面拥有巨大差异的光纤连接技术已经使互联网实现了巨大的跨越。相当多的以互联网为基础的应用技术被开发出来。因此,未来的无线网络——使用已经存在的互联网技术成为人们的首选。同样,互联网在全球范围内的连通性也成为了人们选择它的动机之一。一些轻便设备,比如在身体上使用的传感器,体积小而且便宜,内部的运算及存储资源有限,因此就必须在资源受限的情况下实现及处理Internet协议。本文讲述的就是在这样的条件下如何
4、占用尽量少的资源实现一个轻型的TCP/IP协议栈,我们把该协议栈叫做LwIP。本文的章节安排是这样的:第2、3、4节对LwIP做一个总体上的描述,第5节是关于操作系统模拟层的内容,第6节是内存和缓冲区管理,第7节介绍LwIP网络接口抽象层,第8、9、10介绍IP、UDP、TCP协议的实现,第11、12节介绍如何与LwIP协议栈接口及LwIP提供的API,第13、14节将分析协议栈的实现,第15、16节提供LwIPAPI的参考手册,17、18节提供例子代码。2协议层TCP/IP协议族以分层的方式设计,每一层分别解决通讯问题的一部分。设计实现协议族——层可以提供指引,因为每一种协议
5、可以被独立的实现。然而严格的按照分层的方式实现协议族,会因为协议层之间的通讯造成总体性能下降。要解决这个问题,协议的某些内部方面对其它协议来说应该可知,不过要注意的是,只有重要的信息在各层之间共享。大部分的TCP/IP实现在应用层和底层协议层之间进行了严格的划分,而底层协议之间却可以进行或多或少的交叉存取。在大部分的操作系统中,底层协议族作为拥有应用层进程通讯入口的操作系统内核的一部分被实现。应用程序是TCP/IP实现的抽象表示,网络通讯与进程间通讯和文件I/O没多少差别。这意味着,因为应用层不知道底层协议使用的缓冲机制,那它就不能利用这些信息去做一些事情,比如,重新使用常用数
6、据缓冲区。同样,当应用层发送数据,在被网络代码处理之前,这些数据必须由应用层进程内存空间复制到内部缓冲区。像LwIP的目标系统这样的最小限度系统所使用的操作系统,通常不能在内核与应用层进程之间维持一个严格的保护屏障。这就允许使用一种比较松散的通讯机制,通过共享内存翻译焦海波6/2/2006TCP/IP协议栈LwIP的设计与实现-2-的方式实现应用层与底层协议族之间的通讯。特别的,应用层能够了解底层协议使用的缓冲处理机制将使应用层可以更加有效的重复使用缓冲区。同样,既然应用层与网络代码可以使用相同的内存区,那么应用层就可以直接读写内部缓冲区,从而避免了内存复制产生的性能损失。3概
7、览与许多其它的TCP/IP实现一样,LwIP也是以分层的协议为参照——设计实现TCP/IP。每一个协议作为一个模块被实现,同时还提供了几个函数作为协议的入口点。尽管这些协议是被独立实现的,但是有些层却不是这样,就像上面讨论的,这样做的目的是为了在处理速度与内存占用率方面提升性能。比如,当验证一个到达的TCP段的校验和并且分解这个TCP段时,TCP模块必须知道该TCP段的源及目的IP地址。因为TCP模块知道IP头的结构,因此它就可以自己提取这个信息,从而取代了通过函数调用传递IP地址信息的方式
此文档下载收益归作者所有