IPv6协议栈在ARM平台的设计与移植

时间:2022-10-06 08:29:09

IPv6协议栈在ARM平台的设计与移植

摘要:首先介绍了嵌入式IPv6协议的数据处理流程,接着重点阐述了IPv6的核心协议:IPv6协议,ICMPv6协议和邻居发现协议的设计,最后,介绍了嵌入式IPv6协议的移植方法。

关键词:IPv6;ICMPv6;邻居发现协议

中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)16-21216-02

The Design and Transplantation of IPv6 Based on ARM

XIE Xi-feng

(Department of Power Engineering,Guangxi Hydraulic and Electric Polytechnic,Nanning 530023,China)

Abstract:In this paper the author firstly Introduced the data technological process of IPv6,and thendesigned the core Protocol of IPv6: IPv6, ICMPv6, Neighbor discovery,finallythe author illustrated the transplant of IPv6.

Key words:IPv6;ICMPv6;Neighbor discovery

随着网络的发展,在嵌入式操作系统中集成TCP/IP协议栈,与系统相应的硬件配合,为嵌入式系统提供联网功能,己经成为嵌入式系统发展的重要方向。IPv6协议的新特性可以更好地满足嵌入式系统对联网功能的需求,在嵌入式系统中实现IPv6协议有着良好的应用前景。因此,研究嵌入式IPv6协议栈的设计与实现,具有重要的现实意义。

1 数据处理流程

实现协议栈重要的一点是正确的处理数据流程。根据不同的条件进行协议栈状态的转换。图1显示了对收到IPv6数据包和发送IPv6数据包的处理流程。

接收数据时,网络接口层将从网卡接收到的数据存到缓冲区,根据以太帧报头的类型字段判断以太类型,若以太类型等于0x86DD,则为IPv6数据包,把IPv6数据包发送给协议栈输入处理模块。输入处理模块先做合法性检测(包括检查IP包的版本号是否为6,判断是否是本机的单播地址,是否是相应的组播地址,计算校验和是否为0,检查IPv6头部中的下一头部是否为ICMPv6或UDP),若不合法就抛弃,同时向源地址发送的差错报文,若合法的话,那么根据IPv6报文中下头部的值,调用不同的处理函数。

发送数据时,应用程序用UDP方式发送,按UDP报文格式封装数据包,然后把数据包传输到IP层,选择下一跳IP地址(下一个目的地址,在有路由的情况下,可能是路由的地址,本文不处理路由问题,所以下一跳IP地址即为目标IP地址),然后,调用IPv6输出函数发送数据包。

2 IPv6模块的设计

IPv6模块主要包括两部分的功能,一是负责从网络接口层收取IPv6数据包,对数据包进行一定的处理后将数据包发送给不同的处理模块(UDP或ICMPv6)。二是从上层接收数据,进行报文的选路,封装IPv6报头后将数据包发送给网络接口层。IPv6功能主要由三个函数完成:初始化函数、输入函数和输出函数。

2.1 初始化函数

初始化函数IPv6_init()的主要工作是初始化IPv6协议中各字段的参数,以及可能包含的协议的数目,例如:协议中的版本号、优先级、流标记、源IP地址、跳数限制等。该函数在应用初始化时被函数网络底层函数InitNic()调用。

2.2 接收函数

接收函数IPv6_input()通常要实现三个功能:对到达的分组进行验证;分组重装和向上层协议传递数据包。但是在本设计中只是实现了主要有两个功能:报文的合法性检测和向上层协议传递数据包。报文的合法性检测,包括检查版本号是否正确,收到的报文长度是否短于应有的长度,报文的目的地址是否本地地址等。向上层协议传递数据包,就是根据IPv6头部的下一头部字段,对报文进行分发, 若下一头部长段为17时,则是UDP数据包, 若下一头部长段为58时,则是ICMPv6数据包。如果是UDP数据包,则调用上层的UDP接收函数udp6_input():如果是ICMPv6报文,则调用ICMPv6协议实现中的接收处理函数ICMPv6_input()。

2.3 发送函数

在发送数据时,函数IPv6_output()通常要从两处接收传送报文:IP转发模块和IP层之上的协议。由于系统没有考虑实现IP路由转发模块,所以,IPv6_output()只实现了被ICMPv6, UDP上层协议调用。通常情况下,IPv6_output()的处理过程由四个部分组成:IPv6首部构造,路由选择和源地址选择、安全服务和分片。

3 ICMPv6模块的设计

ICMPv6协议位于IPv6层,负责接收、解释、发送ICMPv6报文。本设计主要实现了ICMPv6的echo应答,以及报错信息中的目的不可达。ICMPv6功能主要由两个函数完成:输入函数和输出函数。

3.1 输入处理函数

当输入处理函数ICMPv6_input()接收到报文时,首先检查其校验和,当校验和错误,则丢弃;当校验和正确时,按不同的类别交给相应的功能模块处理。例如,邻居请求或宣告报文到来时,ICMPv6_input()将会把报文分路交给相应的ICMPv6_ neighbor_input()模块处理。当接收到ICMPv6差错处理报文时,ICMPv6_input()将根据ICMP报文的ICMPv6_ type和ICMPv6_ code映射到一个与协议无关的差错码集上,然后将报文交给传输层,由传输层根据差错码进行相应的处理。当ICMPv6_input()接到未知ICMPv6类型报文或非响应的ICMPv6报文将丢弃报文不作任何处理。

3.2 输出处理函数

输出函数ICMPv6_output()主要是接收并处理从IP来的、或是从UDP高层协议来的差错报文,以及从应用程序来的查询报文,同时还要发送ICMPv6分组中用到的请求、询问和差错报文。它的由两部分构成:ICMPv6_ error()函数和ICMPv6_research()函数。ICMPv6_ error()函数的功能是构造差错报文,包括来自IP层和传输层的;ICMPv6_ research()是负责创建由高层或IP层所请求的请求报文。ICMPv6_error()函数负责ICMPv6数据包的封装以及校验和的生成。

4 邻居发现模块的设计

邻居发现(Neighbor discovery)报文使用ICMPv6的报文结构,邻居发现报文由邻居发现报文头和0个或多个邻居发现报文选项组成,其中邻居发现报文头由ICMPv6报头和ND报文的特定数据构成。

有5种不同的邻居发现报文:路由器请求报文、路由器公告报文、邻居请求报文、邻居公告报文和重定向报文。

本设计中只实现了邻居请求报文、邻居公告报文,通过这两个报文的交互可以使源节点和目的节点的MAC地址和IPv6地址进行绑定并且保存在对方的地址缓存区中。

5 IPv6在ARM中的移植

IPv6协议栈在设计时就考虑到了移植问题,己把所有与硬件、OS、编译器相关的部分独立出来。因此IPv6在本论文研究的系统中的移植,就是针对LPC2210硬件平台,μC/OS-II操作系统和ADS1.2的编译器对其进行相应的修改。

5.1 数据类型定义

IPv6的数据定义应该与μC/OS-II定义的数据长度类型是一致的。

typedef unsigned char uint8;

typedef signed charint8;

typedef unsigned short uint16;

typedef signed short int16;

typedef unsigned int uint32;

typedef signed int int32;

typedef floatfp32;

typedef double fp64;

5.2 操作系统相关部份

IPv6为了适应不同的操作系统,在代码中没有使用和某一种操作系统相关的系统调用和数据结构,而是在IPv6和操作系统之间加了一个操作系统封装层。操作系统封装层为操作系统服务(定时,进程同步,消息传递)提供了一个统一的接口。与操作系统移植有关的内容:IPv6采用信号量(Semaphone)和消息队列(Message Queue),作为同步与通信机制。

5.3 库函数的实现

IPv6协议栈中用到了6个外部函数,这些函数通常与用户使用的系统或编译器有关。返回字符串长度、字符串比较、内存数据块之间的互相拷贝和内存中指定长度的数据块清零4个函数已由ADS1.2中的运行时库提供,不需要再编写。因为网络数据采用的是大端数据存储,而LPC2210是工作在小端,所以在存取网络数据时要进行字节的交换。

6 结束语

嵌入式Internet技术正在快速发展,并将成为今后几年IT发展的热点。嵌入式技术也必定借此东风加快发展,进入以Internet为标志的新阶段。在不久的将来,嵌入式Internet系统的应用将会出现在本文工作生活的方方面面。基于这样的背景,着手研究一种嵌入式IPv6的设计与移植,具有重要的现实意义。

参考文献:

[1] R Droms.RFC2131 Dynamic Host Configuration Protocol[S].

[2] E Crawley.RFC2386 AFramework for QoS-based Routing in the Internet[S].

[3] R Braden.RFC 1633 Integrated Services in the Internet Architecture: an Overview[S].

[4] 陈赜,刘振兴,李宗福,等.ARM嵌入式技术实践教程[M].北京航空航天大学出版社,2005.

[5] 杜春蕾.ARM体系结构与编程[M].清华大学出版社,2003.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:基于DFS的动态教学评价 下一篇:校园网优化与提速