当前位置:文档之家› LWIP协议栈的分析和设计

LWIP协议栈的分析和设计

---《计算机网络与控制》论文

LWIP协议栈的分析

摘要

近些年来,随着互联网和通讯技术的迅猛发展,除了计算机之外,大量的嵌入式设备也需求接入网络。目前,互联网中使用的通讯协议基本是TCP/IP协议族,可运行于不同的网络上,本文研究的就是嵌入式TCP/IP协议栈LWIP。文章首先分析了LWIP的整体结构和协议栈的实现,再介绍协议栈的内存管理,最后讲解协议栈应用程序接口。

关键词: 嵌入式系统;协议;LWIP;以太网

Abstract

With the rapid development of internet and communication technology, Not only computers but also embeded equipments are need to connect networks. At present, the basic communication protocol using in internet is TCP/IP, it can run in different network. This paper analyses the Light-Weight TCP/IP. The process model of a protocol implementation and processing of every layer are described first, and then gives the detailed management of Buffer and memory. At last, a reference lwIP API is given.

Key words: Embedded System, Protocol, Light weight TCP/IP,Ethernet

引言

近期互联网络硬件、软件的迅猛发展,使得网络用户呈指数增长,在使用计算机进行网络互联的同时,各种家电设备、仪器仪表以及工业生产中的数据采集与控制设备在逐步地走向网络化,以便共享网络中庞大的信息资源。在电子设备日趋网络化的背景下,引人TCP/IP 协议栈,以支持嵌人式设备接人网络,成为嵌人式领域重要的研究方向。本文分析一个轻量级的嵌入式系统的TCP/IP 协议栈-LWIP,LWIP是一个比较完整和可靠的TCP/IP协议栈,具有开源,易用,系统资源要求不高等优点。

一、LWIP概览

LWIP是瑞典计算机科学院(Swedish Institute of Computer Science)开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。 LWIP的含义是Light Weight(轻型)IP协议。LWIP TCP/IP实现的重点是在保持TCP协议主要功能的基础上减少处理和内存需求,因为LWIP使用无顺数据复制并经裁剪的API,一般它只需要几十KB的RAM和40KB左右的ROM就可以运行。同时LWIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。这使LWIP协议栈适合在低端嵌入式系统中使用。

LWIP的特性如下:

1.支持多网络接口下的IP转发;

2.支持ICMP协议;

3.支持主机和路由器进行多播的Internet组管理协议(IGMP);

4.包括实验性扩展的UDP(用户数据报协议);

5.包括阻塞控制,RTT估算和快速恢复和快速转发的TCP;

6.提供专门的内部回调接口(raw API)用;

7.支持DNS;

8.支持SNMP;

9.支持PPP;

10.支持ARP;

11.IP fragment的支持;

12.支持DHCP协议,动态分配IP地址;

13.可选择的Berkeley接口API(多线程情况下);

LWIP的源代码从作者Adam Dunkels的官方网站上下载(网址为:www.sics.se/~adam/lwip/),版本号为1.3.1。以下为解压后的目录结构。LWIP的目录结构主要分为五个部分:

1.Api\ : 应用程序接口文件,包括RAW,BSD以及正式提供的3种API。

2.Arch\ :与硬件和OS有关的文件,包括网络驱动,移植需要修改的文件。

3.Core\ :ICMP,IP,TCP,UDP协议的实现文件,以及一些辅助函数,LWIP实现的核心代码。

4.Include\ :LWIP的包括文件。

if\ :ARP协议和LWIP网络设备驱动程序的模板,用户为自己的网络接口设计的驱动

程序应该与ethernetif.c中给出的驱动框架相同。

二、LwIP 的整体构架和进程模型:

传统的TCP/IP协议栈的实现方法严格分层,一般每一层都是一个独立的进程。这样方法虽然

有利于协议栈的调试,但是,其最大的弊端为数据包跨层传递时会引起频繁的上下文的切换,尤其是在多任务系统中,这样导致时间的浪费而直接影响到系统的实时性。LWIP 将所有TCP/IP 协议都放在在一个进程当中,这样TCP/IP 协议栈就和操作系统内核分开了。而应用层程序既可以是单独的进程也可以驻留在TCP/IP 进程中。如果应用程序是单独的进程,可以通过操作系统的邮箱、消息队列等通讯机制和 TCP/IP 进程进行通讯。如果应用层程序驻留在 TCP/IP 程中,那应用层程序就利用内部回调函数接口(Raw API)和 TCP/IP 协议栈通讯。LWIP进程模式的主要优点是可以很方便的移植到各种操作系统上去,进行应用程序的开发。

图2 - 1 LWIP的进程模型

LwIP 的进程模型如图2-1。在图2-1 中可以看到整个 TCP/IP 协议栈都在同一个名为“tcpip_thread”任务中,而位于图中最上方的“Application layer”(应用层)和下方的“Network interface layer”(网络接口驱动层)由用户自己来实现。应用层程序既可以是独立的任务(如图中正上方的“tftp_thread”和“tcpecho_thread”),通过 mbox(消息队列)和 LWIP 进程通讯;也可以在“tcpip_thread”(如图左上角)中利用原始接口(Raw API)和 TCP/IP协议栈通讯。

LWIP的数据流程主要分为接收和发送两种情况。

●接收数据时:数据包从一个网络接口被接收,如果网络接口驱动通过low_level_input函数读到这个数据包,简单的区分是ARP包还是IP包。如果是ARP包,将调用ARP的功能处理这个包。通常将更新一个ARP地址映射表,然后将数据包发送给IP_input函数处理。如是查一个IP包,将把数据包发送给ip_input函数处理。IP_input函数将数据包进行简单的处理(如计算校验和)后,分析该包是发送到本机的正常数据包,IP_input则根据包的类型,分别发送给udp_input、tcp_input、icmp_input函数处理。如果是发送给UDP或TCP协议的数据包,UDP、TCP协议的处理函数将做相应

相关主题