作者:empty 出版社:empty |
LWIP是TCP/IP协议栈的一种实现。LWIP的主要目的是减少存储器利用量和代码尺寸, 使LWIP适合应用于小的、资源有限的处理器如嵌入式系统, 为了减少处理器和存储器要求, I wIP可以通过不需任何数据拷贝的API进行栽减。本文叙述了lwIP的设计与实现。叙述了协议实现及子系统中所使用的算法和数据结构如存储和缓冲管理系统。还包括LWIP API的参考手册和使用LWIP的一些代码例子。
在过去的几年里,人们对计算机互连和计算机无线互连支持设备的兴趣不断的增长,计算机逐渐与日常使用的设备无缝结合, 并且价格不断下降, 同时, 无线网络技术如Bluetooth[HNI+98] 和IEEE 802.11bWLAN[BIG+97] 不断显现。这也在一些领域譬如医疗保健、安全保卫、交通运输、加工业等引起了许多新引人入胜的情节,小的设备如传感器能被联入现有的网络如全球因特网,并可以在任何地方对其进行监控。在过去的几年里,互联网技术证明自己具有足够的灵活性来合并不断改变的网络的环境。与当初为低速网络譬如ARPANET网而产生的互联网相比, 今天的大范围连接的互联网技术在带宽和误码率方面都与原来有着巨大的差异。由于瓦联网的大量应用,把将来的无线互连网络应用于现有的互连网络将会给我们带来巨大的收益。并且,大面积互连的互联网也是一强劲趋势。的处理和存储要求的互连协议就成为必须解决的问题。本文描述了一种称为LWIP的小到足以满足最小系统要求的TCP/IP协议栈的设计与实现。第6部分叙述缓存和存储管理。第7部分介绍lwIP抽象的网络接, 第8, 9, 和10部分叙述IP,UDP, 和TCP协议的实现。第11和12部分叙述怎样与1WIP进行接井介绍1wIPAPI。第13和14部分分析了实现过程。最后, 15部分提供了1wIPAPI用户参考手册, 17和18部分展示了多种代码例子。
自从人们经常对像传感器这样的小设备有小的物理外形和便宜的价格的要求,实现一较少本文结构如下编排:第2, 3和4部分对1wIP栈作一个概述, 第5部分叙述操作系统模拟层,2协议分层(Protocol layering)的设计、实现可起一个指导作用,各个协议可分开实现.然而协议严格的按分层结构来实现,TCP/IP协议被设计为分层结构, 各协议层分别解决通信问题的一部份。这一分层对于协议各层之间的通讯可能会导致总体性能的降低[[Cla82a] 。为克服这些问题, 协议的某些内部方面可传达给其它协议共享,但必须注意,保证只有那些重要信息才在各层共享协议之间进行严格的区分,在大部分操作系统中,底层协议被作为与应用层程序具有通讯接的操作系统内核的一部分, 应用程序被看作是TCP/IP协议的抽象, 网络通讯与进程间通讯或者尽管底层协议或多或少可以进行交叉存取, 大部分TCP/IP协议, 还是在应用层协议与底层文件1/0只有很小的差别。这意味着,因为应用程序不知道被底层协议所使用的缓冲机制,它不能利用缓冲机制对经常使用的数据进行缓冲。同样,当应用程序发送数据时,在数据被网络代码处理前,必须把这些数据从应用程序存储区被拷贝到内部缓冲区。最小系统中使用的操作系统像1wIP的目标系统在内核和应用进程之间常常并不存在严格的保护屏障。这就允许应用程序和底层协议之间使用一种更宽松的方案,通过共享内存。特别地,应用层可以意识到底层协议所使用的缓存处理机制。因此,应用可以更有效地重用缓冲区。而且,
既然应用进程和网络代码可以使用相同的内存,应用可以直接读写内部缓存,因此节省了执行拷贝的开销。3总述(Overview)正如其他TCP/IP协议的实现, 分层协议的设计为LWIP的设计与实现提供一向导, 每一个协议都作为一个模块来实现,提供一些与其他协议的接函数。尽管各层分开实现,但正如上面所讨论的,为了同时提高处理速度和内存利用两方面的性能,一些层在设计时违背这一原则。例如:当检验一接收到的TCP段(segment) 的校验和(checksum) 和分解TCP段时, 源和目的IP地址必须被告知TCP模块。LWIP实现时不是通过函数调用把IP地址传递给TCP, 而是TCP模块通过获取IP报头的结构进而自己提取这一信息LWIP有几个模块组成, 除了实现TCP/IP协议的各个模块(IP、ICMP、UDP、和TCP) , 同时设计了许多支持模块.这些支持模块组成了操作系统模拟层(第5章)、缓冲和存储管理子系统(第6章) 、网络接函数(第7章) 和一些处理因特网校验和的函数。LWIP还包括关于API的摘要(第12章).4进程模型(Process model)协议实现的过程模型以把系统划分成为不同的过程的方法进行描述。用于实现通讯协议的过程模型使每个协议作为孤立的过程运行。这种模型使用严格的协议分层,协议之间的通讯结点必须被严格定义.虽然这种方法有其诸多优势如协议能在运行时被增加,代码一般容易理解和调试,但也有不利因素。严格的分层,正如先前所述,并不总是实现协议的最好方法。同时, 更重要的, 每跨越一层, 必须做一次上下文切换。这将意味着, 接受一个TCP段要进行三次上下文切换:从网络接的驱动, 到IP处理, 再到TCP处理, 最终到应用处理。根据网络接的设备驱动程序, 对于IP过程, 对于TCP过程和最后, 在大多数操作系统中一个上下文切换所花的代价都是相当品贵的。另一个较普通的方法是把通信协议封装在操作系统的内核,在这种内核实现通讯协议的情况下,应用程序通过系统调用完成通讯。通讯协议之间不严格区分,但可以使用交叉协议分层技术。
1Introduetion.*rg
2 Protocol layering.
3 Overview.
4 Process model.
5 The operatingsystem emulation layer.
6 Buffer and memory management.3
6.1 Packet buffers-pbuf s.3
6.2Mcmory management.
7 Network interfaces.5
8IP processing.
8.1 Receiving packets.
8.2 Sending packets.
8.3 Forwarding packets.
8.41CMP processing.8
9UDP processing.8
10TCP processing.9
10.10ver view.9
10.2Datastruetures.ka.10
TCP/IP Stack
10.3 Sequencenumber calculations.
10.4 Queuing and transmit ling data.
10.4.1Silly window avoidance.
10.5 Receiving segments.
10.5.1 Demultiplexing.
10.5.2 Receiving data.
10.6 Accepting new connections.
10.7Fast retransmit.
10.8 Timers.
10.9 Round-trip time estimation.
10.10 Congestion control.
11 Interfacing the stack.
12 Application Program Interface.
12.1 Basic concepts.
12.2 Implementation of the API.
13 Statistical code analysis.
13.1 Lines of code.
13.2 Object code size.
14 Performance analysis.
15APIrelerence.
15.1 Datatypes.
.15.1.1Netbufs.
15.2Buer functions.
15.2.1netbuf new 0.
15.2.2netbufdclete.
15.2.3netbufalloc 0.
15.2.4netbuffrec 0.
15.2.5netbufreff) .
15.2.6netbuflen() .
15.2.7netbuf data 0.
15.2.8netbuf next 0.
15.2.9netbufrsu() .
152.10netbufcopy 0.
15.2.11netbuf chain 0.
15.2.12netbuffromaddr 0.
15.2.13netbuffrompont 0.
16 Network connection functions.
16.0.14netcomn new 0.
16.0.15netconn delete(.
16.0.16nctconn type 0.
16.0.17netconnpeer() .
16.0.18netconnaddr 0.
16.0.19netconnbind 0.
16.0.20netconn connect f.
16.0.21netcomn listen.
16.0.22netconn accept 0.
16.0.23netconnreev 0.
16.0.24netconn write 0.
16.0.25netconn send 0.
16.0.26netconn close 0.
17BSD socket library.
17.1 The representation of a socket.
17.2 Allocating a sockel.
17.2.1Thesocke tO call.
17.3 Connection setup.
17.3.1ThebindOc all.
17.3.2Theconneet) call.
17.3.3 The listen() call.
17.3.4 The accept 0) e all.
17.4 Sending and receiving data.
17.4.1 The sendO call.
17.4.2 The send to() and sendmsg) calls.
17.4.3ThewriteOc all.
17.4.4ThereevO) and