lwip协议栈架构与设计解析

lwip协议栈架构与设计解析

ID:25156939

大小:236.51 KB

页数:18页

时间:2018-11-18

lwip协议栈架构与设计解析_第1页
lwip协议栈架构与设计解析_第2页
lwip协议栈架构与设计解析_第3页
lwip协议栈架构与设计解析_第4页
lwip协议栈架构与设计解析_第5页
资源描述:

《lwip协议栈架构与设计解析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、LWIP协议栈及接口提取Version1.02012/06/20第18页共18页版本1.0姓名部门邮件作者雷岩Leiyan3521@163.com审阅第18页共18页版本历史版本日期修订姓名Rev1.02011/11/07FirstDraftleiyan第18页共18页目录一、LWIP介绍5二、LWIP源码分析71.LWIP协议栈的架构72.各个文件夹介绍83.模块及源文件介绍10三、LWIP协议栈处理数据流程17四、接口提取18第18页共18页一、LWIP介绍首先说明一下,这篇文档的主要目的是提取网络发送和接收数据的函数接口。然后用我们自己的驱动网卡的接口函数替代程

2、序中的接口。如果对LWIP协议栈本身没什么兴趣的,可以跳过第一、二、三章,直接阅读第四章,使用我们的接口代替第四章的接口就行了。写第一、二、三章的主要目的是为了方便理解数据的发送和接收在LWIP协议栈中是如何进行处理的。这便于我们理解提取出来的接口。LWIP是瑞典计算机科学院开发的一套用于嵌入式系统的开放源代码的轻量级的TCP/IP协议栈。传统的,或者说是典型的TCP/IP协议族的设计都是按照分层的思想来设计的。这样设计有个好处,就是每层相对于其他层独立,代码方便理解。缺点就是,每层之间进行数据交互的时候必须要进行复制,而数据的复制是很耗时的,这就降低了实时性。LWI

3、P采用了一种不同的设计方式来实现TCP/IP协议族。LWIP各层之间没有明显的界限,各层之间都可以访问到共享在内存中的数据。因为各层都可以访问共享内存,所以这就避免了内存复制产生的性能损失。但是并不是说LWIP就没有分层的概念了。只不过LWIP各层都是逻辑意义上的层。每个协议都以模块的形式被实现。而这些模块就共同组成了LWIP整体。下面一章将分析LWIP的源码,结合源码介绍这些模块。了解各个协议是怎么通过模块被实现的。其中这里最主要的是TCP协议模块的实现。TCP协议在LWIP协议栈中占得比例最大,有将近一半的代码是专门用来实现TCP协议的。所以重点会分析TCP协议。

4、并且无线音频项目采用的也是TCP协议传输数据。LWIP逻辑上被分为四个层:应用层,传输层,网络层和网络接口层。如下图1.1所示:第18页共18页图1.1LWIP协议栈的分层模型应用层主要是使用LWIP协议栈开发相应的网络通信程序。LWIP主要提供了三种接口供用户使用。三种接口分别为RAWAPI,NetconnAPI和BSDSocketAP。其中RAWAPI主要是采用回调函数的方式来完成数据的发送和接收,RAWAPI接口写的应用程序与LWIP协议栈处在同一个进程(或者称任务)中。NetconnAPI和BSDSocketAP工作于多线程方式中,要使用者两种接口,必须有多任

5、务的操作系统的支持。这次项目采用的接口是RAWAPI。关于RAWAPI接口如何写应用层程序,另写了一个专门的文档介绍。这里不列出。传输层。我们最熟悉的TCP协议,UDP协议,以及我们使用ping命令时采用的ICMP协议都处在这一层。这一层提供了一些专门的接口,用于处理与应用层和网络层的数据传送(注明,这里说的数据传送并不是指数据的拷贝。事实上,LWIP协议栈使用的是内存共享技术,各层都能访问这段共享内存,各层传递的就是数据结构指针,所以LWIP协议栈降低了内存复制所产生的性能损失)。关于这层函数,会在下面进行具体说明。网络层主要的协议是IP协议。这一层主要是对底层接收

6、的数据包进行发送,转发,丢弃组合等功能。网络接口层是和底层硬件驱动交互的层。我们所需要提取的网络接口就在这一层。第18页共18页二、LWIP源码分析1.LWIP协议栈的架构LWIP协议栈源码的架构如下图2.1所示:图2.1LWIP协议栈源码架构api目录:应用程序接口文件,包括netconn和BSD2种API。这个文件夹主要是为了方便应用程序编写而为应用层提供的API接口。core目录:ICMP,IP,TCP,UDP协议的实现文件,以及一些辅助函数,LWIP实现的核心代码。其中这个文件夹里面实现TCP协议的代码量几乎占了整个lwip协议栈的一半。重点会讨论TCP协议。

7、在此也可以简单看出LWIP协议栈没有严格区分传输层和网络层,因为传输层的代码和网络层的代码放在一个文件夹里实现了。目录里还提供了RAWAPI接口的实现。RAWAPI接口和上面两种接口一样,都是为了方便应用程序编写而为应用层提供的API接口。include目录:主要是LWIP协议栈使用的自定义的一些头文件。netif目录:这个目录里主要实现的是ARP协议。当然还有一些PPPOE等协议。当然PPPOE协议不是我们所关心的。port目录:最后写这个目录,主要是因为这个目录是我们最终所要修改的一个目录。可以看到此目录下包含一个ethernetif.c文件。这

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。