嵌入式TCP_IP协议栈LWIP的内部结构探索与研究_第1页
嵌入式TCP_IP协议栈LWIP的内部结构探索与研究_第2页
嵌入式TCP_IP协议栈LWIP的内部结构探索与研究_第3页
嵌入式TCP_IP协议栈LWIP的内部结构探索与研究_第4页
嵌入式TCP_IP协议栈LWIP的内部结构探索与研究_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、年月引言()是瑞士计算机科学院()的等开发出来的一套用于嵌入式系统的开放源代码协议栈。一般情况下,既可移植到操作系统上,又可在无操作系统的情况下独立运行。实现的主要优点是在保持了协议主要功能的基础上,减少了其对的占用。一般它只要几十的和左右的就可以运行,这使得协议非常适合在嵌入式系统中使用。目前最新版的已经发展到版了。的主要特点如下:支持多网络接口下的转发;支持网间控制报文协议();包含有实验性扩展的用户数据报协议();包括阻塞控制、估算和快速恢复及快速转发的传输控制协议();具有专门提供的内部回调应用编程接口(),可用于提高应用程序性能;带有可选择的接口(多线程情况下);可在最新的版本中支持

2、端对端协议();新版本中增加了的支持;能支持动态主机配置协议()和动态分配地址。的内部结构在结构中,通常一个协议可作为一个模块来实现。同时,结构中还提供了几个函数作为协议的入口点。尽管这些协议是被独立实现的,但是并不是所有的子层都是这样的,这样做的目的是为了在处理速度与内存占用率等方面提升性能。比如,当验证一个到达的段的校验和并分解这个段时,模块必须知道该段的源及目的地址。因为模块知道头的结构,因此它可以自己提取这个信息,从而取代通过函数调用传递地址信息的方式。一般由几个模块组成,除协议的实现模块外(,),还有许多相关支持模块。这些支持模块包括:操作系统模拟层、缓冲与内存管理子系统、网络接口函

3、数、及一组校验和计算函数,此外,还包括一个概要说明。的内部分层结构如图所示。收稿日期:嵌入式协议栈的内部结构探索与研究孙乐鸣,江来,代鑫(东华理工大学电子与机械工程学院,江西抚州)摘要:分析了嵌入式协议栈主要对的基本结构,介绍了嵌入式协议栈的内存管理方式,同时给出了对、等协议的处理方法,最后给出了的应用层接口及调用方法。关键词:的基本结构;的内存管理;的层片理协议;的应用层接口技术前沿 年月 图的内部分层结构的内存管理的数据缓存方式通讯系统中的存储和缓冲管理必须能够适应大小变化的缓冲区,其范围应从包含几百字节的完全大小段缓冲区到仅仅包含几个字节的短的回报。而且,为了避免拷贝,还应当尽可能让缓冲

4、区的数据内容驻留在内存中,的网络子系统不管理像应用存储或这样的内存。用来管理数据包,为了满足最小限度协议栈的特殊需求,采用了和的相似的结构。结构既能在动态内存分配下保存信息包的数据,也能够让信息包数据驻留在静态存储区。可以在一个链表中链接在一起,并被称作一个链,这样,一个信息包就可以穿越几个。具有、和三种类型。这三种类型拥有不同的使用目的。主要用于网络设备驱动层,由于分配一个的操作可以快速完成,所以,非常适合用于中断处理。类型的用于应用程序时,要发送的数据应放置在应用程序管理的存储区。类型的还可用于应用程序发送的数据被动态生成的情况。在这种情况下,系统不仅可为应用数据分配内存,还应给为这些数据

5、预置的包头分配内存。的三类结构分配方式如图所示。的内存管理在运行协议栈的嵌入式系统中,一般可以把整个系统的存储区域分为协议栈管理的存储器和应用程序管理的存储器两部分。协议栈管理存储器是指内核能够操作的内存区域,主要用于装载待接收和发送的网络数据分组。当接收到分组或者有分组要发送时,协议栈便为这些分组分配缓存;而接收到的分组交付给应用程序或者分组已经发送完毕后,则将分配的缓存回收重用。应用程序管理存储器是指应用程序管理、操作的存储区域,一般在该区域为应用程序发送数据分配缓存。虽然该存储区域不由协议栈管理,但在不严格分层的协议栈中,该存储区域必须与管理的存储器协同工作。为了节省内存,一般不采取分级

6、访问模式,而是通()结构()和结构图的三类结构分配方式 年月过指针访问数据。这样就不需要为数据的传递分配存储空间。应用程序发送的数据在交付后,就认为这些数据是不能改动的,因此,应用程序的数据被认为是永远存在并且不能被改变的。这一点与很相似,其类型的名称也由此而来。的层次结构的硬件接口层在中,物理网络硬件的设备驱动可通过一个与相似的网络接口结构来表示。网络接口保存在一个全局链表中,它们可通过结构体中的指针连接。下面的数据结构是用来保存硬件相关接口的结构体代码:;()(,);()(,);层的处理仅能实现层大部分基本功能。它虽然能够发送、接收以及转发信息包,但不能接收和发送分片包,也不能处理携带参数

7、选项的信息包。不过对大多数的应用来说,这不会引起应用问题。()接收信息包对于到达的信息包,它可由网络设备驱动调用()函数开始处理,并在这里完成对版本字段及包头长度的初始完整性检查,同时还要计算和验证包头校验和。由于协议栈假定代理会重新组合分片包为一个完整的包,因此,它会把收到的分片包直接丢掉。同样,信息包携带的参数选项也被认为已经由代理处理过,因此,这些内容也会被删掉。接下来,函数将检查目的地址是否与网络接口的地址相符,以确定信息包是否到达预定主机。网络接口在链表中的排序采用线性检索。因为预计接口的数量比较少,所以没有实现比线性检索更好的检索策略。如果一个到达的信息包被发现已经到达了目的主机,

8、则由协议字段来决定信息包应该传送到哪一个上层协议。()发送信息包外发的信息包通常由()函数处理。该函数使用()函数来查找适当的网络接口以传送信息包。当外发的网络接口确定后,信息将包传给以外发网络接口为参数的()函数。在这里,所有的包头字段都应被填充,并应计算包头校验和。信息包的源及目标地址应作为参数被传递给()函数。源地址可以被忽略,不过在这种情况下,外发网络接口的地址则会作为信息包的源地址被使用。层的处理是用于在不同进程间分解信息包的一个简单协议。每一个会话状态都应保存在一个结构体中,应保存在一个链表中。当一个数据包到达时,还应对这个链表进行匹配检索。结构体中包含有一个指向全局链表中下一个的

9、指针。一个会话可由终端地址和端口号来定义,这些信息保存在,以及字段中。字段标识的校验和策略应该用于这个会话,当然,也可以完全关闭校验和,或者使用简化版()校验和来覆盖数据包的一部分。但如果使用,字段,则应指出应该进行校验和计算的数据段的长度。层的处理属于传输层协议,它可为应用层提供可技术前沿 年月 靠的字节流服务。对它的描述要比对其它协议的描述复杂的多,单从代码量来说,它就占了代码总量的。基本的处理过程被分割为六个功能函数来实现。其中()、()及()函数与输入有关,而()、()及()则用于输出。的处理过程如下图所示。如图所示,其整个过程的发起者都是应用层。首先由应用层调用()函数,接着由()函

10、数再将控制权交给()函数,这个函数会在必要时将数据分割为适当大小的段,然后再把这些段放到所属连接的传输队列中。这时,()函数会检查此时是不是能够发送数据,也就是判断接收器窗口是否拥有足够大的空间,阻塞窗口是否也足够大,如果条件满足,则使用()及()函数发送数据。接下来,我们再看看数据的接收过程。过程的发起者是网络接口层,这里不做描述。当网络接口层将数据包传递给()函数后,该函数将在验证头后移交段给()函数。()函数主要完成两项工作:其一是初始完整性检查(也就是校验和验证与选项解析);其二是判定这个段属于哪个连接。接着,这个段到达()函数,并由该函数实现状态机。其实,任何必要的状态转换都可在这里

11、实现。当该所属的连接正处于接收网络数据的状态时,()函数将被调用,并最终由()函数将数据传给上层应用程序,以完成接收过程。如果这个段由一个不被承认的应答数据所构成,那么,系统数据将会从缓冲区移走,该数据先前所占用的存储区被收回。同样,如果收到一个应答确认数据,接收器将同意接收更多的数据(如图所示),此时的()函数将会被调用。的应用层接口使用协议栈提供的服务有两种方法:一是直接调用与模块的函数;二是使用函数。对于第一种方法,由于调用要涉及到回调函数问题,而要求编程者具有比较高编程技巧,所以使用最多的是第二种方法。在第二种方法下,通常使用两种数据类型:其一是(描述网络缓存的数据类型),二是(描述网络连接的数据类型)。每一种数据类型均可以结构体的方式实现。由于应用程序不能直接使用结构体的内部构造,因此,作为替代,提供了编辑和提取结构体内必要字段的函数。常用的相关的函数有:(),(),(),(),(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论