论文导读:由于嵌入式系统的广泛使用和网络互联的需要,嵌入式Internet是当前研究的热点。IPv6属于IPng(下一代网络协议)技术,IPv6解决了IPv4耗竭的问题,与之相比还有扩展性好,安全性高,更好地支持QoS,支持移动性等优点。本文实现了一个裁剪于LwIP协议栈的可运行于嵌入式实时系统μC/OS-Ⅱ上的嵌入式IPv6协议栈。
关键词:嵌入式系统,IPv6,IPng,μC/OS-Ⅱ
0 引 言
由于嵌入式系统的广泛使用和网络互联的需要,嵌入式Internet是当前研究的热点。采用嵌入式协议栈的直接连接方式是解决嵌入式Internet问题的一个比较好的方案。IPv6属于IPng(下一代网络协议)技术,IPv6解决了IPv4耗竭的问题,与之相比还有扩展性好,安全性高,更好地支持QoS,支持移动性等优点。现在的Internet也处在由IPv4向IPv6过渡的时期。因此在嵌入式系统中实现IPv6功能具有重要的现实意义。虽然目前在商用系统和Linux操作系统中已经有了对IPv6功能的支持,但由于系统成本或代码体积的原因,并不能满足所有嵌入式应用的要求。本文实现了一个裁剪于LwIP协议栈的可运行于嵌入式实时系统μC/OS-Ⅱ上的嵌入式IPv6协议栈。
1嵌入式协议栈的特点
由于嵌入式系统的硬件和软件资源有限,因此需要对通用的TCP/IP协议栈进行必要的修改以满足嵌入式应用的特殊需求。一般说来,嵌入式协议栈具有以下几个特点[1]:
1.1可裁剪性
由于嵌入式应用的要求不同,其对网络功能的要求也各不相同,而且嵌入式系统对产品的成本、功耗等比较敏感,因此嵌入式协议栈应该是可裁剪的,能根据嵌入式系统的功能要求选择所需的协议部分。
1.2实时性
传统的TCP/IP协议栈的层次特性非常明显,每个协议层都有相应的数据格式。在用户数据从本地主机传送至目标主机的过程中,需要不断地打包和拆包,增加了系统开销,降低了系统性能。在嵌入式TCP/IP网络系统中,普遍采用共享内存方式解决这个问题。这是指协议栈没有用于各层数据传递的缓冲区,各层间传递的都是数据指针。只有当数据最终要被驱动程序发送出去(最低层)或是被应用程序取走时(最高层)时,才进行真正的数据传递移出。
1.3可扩展性
由于嵌入式系统的多样性,使得网络接口和应用多样化,这就要求嵌入式TCP/IP协议栈提供便于扩展有网络接口,方便不同驱动程序和网络应用的开发;并且根据实际的需要,可以添加新的协议模块到嵌入式TCP/IP协议栈中。
1.4使用静态分配技术
如果在网络发送或接收的过程中,某一次传送的数据超过了一个物理网络上能够传送的最大数据量(MTU),则处理该数据的任务往往会阻塞,直到上层重新调整需要处理的数据量的大小,它才会继续执行。嵌入式TCP/IP协议栈通常采用静态分配技术,在网络初始化时就静态分配通信缓冲区,设置了专门的发送和接收缓冲区,并硬性规定这个区的大小一般小于或等于物理网络上的MTU值,从而确保每次发送或接收时处理的数据不会超过MTU值,避免阻塞等待,提高网络效率。
2嵌入式协议栈的裁剪
相对于IPv4而言,IPv6协议栈最大的变化在网络层,网络层包括IPv6和ICMPv6两个协议。网络层协议的变化必然会影响到TCP/IP层次结构的其他层协议,因此在设计嵌入式IPv6协议栈时,不光要对网络层的协议重点研究,对其下层和上层协议的影响也不容忽视。如图1所示[2]。

图1 嵌入式IPv6协议与传统TCP/IP协议各层比较
LwIP是瑞典计算机科学院(Swedish Instituteof Computer Science)的Adam Dunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。LwIP的主要目的是减少存储器利用量和代码尺寸,使LwIP适合应用于小的、资源有限的处理器,如嵌入式系统。当前最新的LwIP版本是1.3.0,可以经由Internet自由下载。该版本提供了对IPv6格式帧的简单支持,即可以使用IPv4和IPv6的两种帧结构,但对IPv6其他功能的支持有限。因为本文以LwIP协议栈为基础,针对IPv6协议的标准和原理,对其功能和结构进行裁剪,实现一个嵌入式IPv6协议栈[3]。
对IPv6的要求和嵌入式系统的特点,对LwIP协议栈中各个协议进行源代码的修改,开发的精简的嵌入式IPv6协议栈结构如图2所示。
 
图2 嵌入式IPv6协议栈实现结构图
嵌入式IPv6协议栈与IPv4协议栈最大的变化在IP层,由于IP报头的变化,影响到ICMP、ND、TCP、UDP等协议,都需要进行相应修改[4]。
2.1 IP层
协议栈实现了IP层的基本功能,对数据包的发送,接收和转发,不发送或接收分割的IP碎片,也不处理带IP选项的包。这是因为嵌入式系统中数据量比较小,可以规定在网络中发送的数据包的大小,这样就可以尽量的减少IP碎片的产生,也不需要进行分片和重组。
(1)IPv6报头
IPv6报头的结构体定义如下:
1/2 1 2 下一页 尾页 |