欢迎您访问科普小知识本站旨在为大家提供日常生活中常见的科普小知识,以及科普文章!
您现在的位置是: 首页

嵌入式精简 TCP/IPV6 协议栈的设计与实现

科普小知识 2023-11-17 18:35:57
...

摘 要:本文通过对常用 ipv6 技术的研究和分析,针对嵌入设备处理速度慢,存储容量小

等特点,对常用 tcp/ipv6 协议栈进行了裁减和简化,裁减掉一些不常用但不影响基本通信 功能的协议模块,同时对要保留下来要实现的各个协议进行简化,只实现其基本功能。设计完 成实现后的协议栈,具有代码量少,运行效率高和良好的可移植性等特点,适合于各种嵌入 式设备,是一种解决嵌入式设备接入 ipv6 网络的可行方案。

关键词:ipv6;嵌入式操作系统;邻居发现;icmpv6;地址解释

abstract

via the research and analyse for the ipv6 technique in this article.in allusion to the mcu on embeded system is not fast,and the storage capability is low,we cut down the common ipv6 stack. in this design we cut down some unusuary used but not affect basic communication protcols.besides, for the saved protocols we only realize it’s basic function.after the achievment we find that this stack little-codes, efficiency-runing and have good grafted ability. so it fit for embeded system devices, and be

considered as a feasible scheme for embedded system connecting to ipv6 network.

keywords: pv6; embedded operating system; neighbor discovery; icmpv6; address resolution.

1. 引言

嵌入式internet技术是指把internet技术 应用于嵌入式设备, 实现嵌入式设备的信息 交互,是嵌入式技术与internet技术的结合, 具有非常广大的市场前景。WWW.11665.COm目前不少厂商都 在进行这方面研究, 并推出了不少嵌入式 internet解决方案,比较常用的成熟的解决方 案有,瑞士计算机科学院adam dunkels写的 ulp和 lwip,它们以ipv4技术为基础,以精 简为指导思想,把复杂的tcp/ip技术引入嵌 入式设备,满足嵌入式设备接入网络的需 求。而作为ipv4改良版本的ipv6,是对ipv4 的升级和改进,是下一代网络的核心,如何 以ipv6技术为基础,设计一款和嵌入设备结 合的具 有 代码量 少 ,功能 简 单的精简 tcp/ipv6协议栈是一件非常现实意义的挑 战,也是本课题设计的目的所在。

2. ipv6 协议栈

ipv6协议栈是基于ipv6网络层的协议, 和ipv4一样,遵循现有互联网四层网络互联 体系结构,如图1所示。从图中我们可以看到, 协议栈分为网络接口层,互联网

层,传输层,应用层四层。应用层直接面 向用户,并提供访问其它层服务的功能;传 输层用于提供源主机和目的主机上的对等 实体对话;网络接口层屏蔽了具体的硬件实

现细节,负责底层数据的接收和发送;网络

层是整个tcp/ip体系结构的关键部分,其主 要功能是在网络上提供可靠的主机到主机 的数据传送。ipv6协议正是位于该层,它包 含的主要协议模块有ipv6,icmpv6,邻居发 现nd,ipsec等。

2.1 ipv6 协议

根据rfc2460对ipv6功能的描述,ipv6 主要负责把上层来的数据段添加ipv6报头, 交由底层发送;把下层接收到的报文经过处 理和分析,交给tcp,udp或icmpv6处理。 和ipv4相比 ipv6的改变主要集中在以下几 个方面:地址容量的扩展,报头格式的简化, 支持扩展和选项的改进,数据流标签的能力,认证和保密的能力等[1]。

2.2 icmpv6 协议

icmpv6协议合并了ipv4中icmp(控制 报文协议),i- gmp(组成员协议)、arp(地 址解析协议)等多个协议的功能,实现差错 控制,地址解释等功能,并支持mobile ipv6。 icmpv6报文封装在ip报文中,是ip报文的 有效载荷数据,它通过它的各种错误报文和 信息报文的交换来实现差错控制,地址解释 和路由前缀信息获取等功能。

2.3 邻居发现(neighbor discovery) 协议

邻居发现协议nd是ipv6协议栈中的核 心协议,是ipv6解决邻节点交互的一个重要 协议。它定义了下列问题的解决机制:路由 发现,前缀发现,参数发现,地址自动配置, 地址解释,下一跳决定,邻居不可达,重复 地址检测,重定向。邻居发现的这些功能是 通过5个icmp报文(邻居请求/邻居通告报 文,路由器请求/路由器通告报文,重定向报 文)的交换来实现的。3. ipv6 协议栈的精简

协议栈精简的核心是“微型化”,我们对 协议栈进行协议模块裁减和单个协议简化。

3.1 协议模块裁减

协议模块裁减是指在保障基本通信功 能的前提下尽可能去掉一些协议模块,节省 系统资源。网络接口层我们只考虑 802.3 以 太网协议(csma/cd,mac,llc),不考 虑面向 can,rs-232,rs-485,射频,蓝牙等 相关的支持模块。接入方式上只考虑用路由 器接入方式,不考虑拨号连接方式,去掉和 拨号连接方式相关的面向点对点连接的 ppp 协议和 slip 协议,这两个协议在网络 接口层占用的代码量比较多;ip 层只实现基 本的报头,不实现扩展报头,去掉基于认证 头和封装安全载荷头选项的 ipsec 协议,安 全控制交给其他层。icmpv6 和 nd 是核心

协议必须保留;传输层 tcp 和 udp 可以全 部实现也可以只实现一种,考虑的适应性, 本设计中都给予实现。因此协议模块裁减后 要实现的核 心协议族 为 802.3 , ipv6 ,

icmpv6,nd,tcp,udp。

3.2 单个协议简化

单个协议简化是指以单个协议为目标, 进行功能和数据结构的简化。对 ipv6 协议 来说,只接收,发送报文,不支持报文的分 片与重组,不支持扩展报头选项,对可靠连 接传输来讲,包过大得不到确认,会根据拥 塞控制机制和重传机制,减少数据分组长 度,进行重新发送,对大多数应用来说这不 会产生其他严重问题。对 icmpv6 来说,只 实现错误报文中的目的不可达报文,信息报 文中的应答回复报文,不实现超时报文,报 文过大报文和应答请求报文,一般包过大, 超时报文由路由器实现,应答请求报文用于 主动测试中发起测试的 pc 机一端。对邻居 发现 nd 模块来说,只实现邻居请求和邻居 应答报文,嵌入式设备刚接入网络,它可以静 态的等待网络上路由器定时发送的路由公 告报文,而不是主动发送路由请求报文来获 取,不需实现路由请求/路由应答报文。嵌 入式设备连接的邻居接点,路由一般简单, 传输量少,不需重定向报文来进行路由定 向。简化的大块在 tcp,tcp 是整个协议簇 中最复杂,代码量最多的协议。它的功能模 块有:滑动窗口,流量控制,拥塞控制,tcp 连接状态机,往返时间估计,重传协议。本 协议栈的目标是有操作系统支持的嵌入式 系统,速度和存储量比 8 位和 16 位单片机 都有提高,不必采用分配固定缓冲区的形式 进行接收一帧处理一帧,可以考虑采用分配 一个较大的缓冲区实现滑动窗口机制,用来 提高传输效率,实验证明,传输效率的提高 是明显的,往返时间估计和重传机制比较简 单,代码量不大,可以实现,tcp 状态机表 示 tcp 进程通信的状态迁移,是 tcp 的核

心必须实现,可以不实现流量控制机制,因

为流量不是很大。因此 tcp 模块实现的功 能有:tcp 有限自动机,滑动窗口,往返时 间估计,重传协议。忽略流量控制与拥塞控 制模块,在可靠连接中,当因拥塞而发生数 据丢失的时候,发送方收不到确认就采用重 传机制重发数据[2]。

4. 嵌入式精简 ipv6 协议栈的设

计与实现

在设计协议栈过程中,我们在嵌入式操 作系统基础上设计和实现一个操作系统模 拟层,实现基本的时钟,消息管理和进程同 步等基本操作系统功能。协议进程方面,把 所有的协议栈封装到单独进程中,应用程序 可以驻留在其中或作为一个单独的进程,这 样既实现了与操作系统分离,又避免了层间 切换。对于内存管理采用类 bsd buf 结构, 把静态缓冲区和动态缓冲区链接起来[3]。

4.1 ipv6

ipv6 模块主要用于完成对接收到的 ipv6 数据报进行处理,对需要发送的 ipv6 数据包进行构造并递交底层发送。当接收到 一个数据包时,网络设备驱动调用 ip_input() 函数来对其 ip 报头进行检查,检查其版本 号,报文长度,载荷长度,目的节点地址和 下一报头,待检查无误后,根据下一包头的 类型分别提交给不同的处理模块。当要发送 数据时 , 必须要知道发 送报文的下 一跳 ipv6 地址,以及该地址的相对应 mac 地址, ip_route()函数就是为实现这样的功能而设 计的,其获取下一跳 ipv6 地址与其对应 mac 地址的处理流程如图 2 所示。 图中,目的缓存用来存储着一系列最近 的报文流量与对应的下一跳 ip 地址的关系,

前缀列表存储着一系列子网前缀和其他地 址前缀及其对应的下一跳 ip 地址的关系, 如果两者中都没有找到匹配的记录,则再从 前缀列表中选择默认路由器作为传输的下 一跳 ipv6 地址。

在成功获取了下一跳 ipv6 地址后,数

据就进入传输阶段,传输阶段由 ip_outputif() 函数控制,ip_output()函数填充好报头,选择 好发送网络接口,然后激活发送网络接口进 行数据发送[4]。

4.2 icmpv6

icmpv6 负责接收, 解释和发 送 icmpv6 报文。收到报文后,如果为邻居信 息报文则转交给邻居发现模块,如果为诊断 报文则交给 icmpv6 诊断模块。icmpv6 模 块只实现了应答回复报文,目的不可达报 文。当处理到达的 ip 报文时,如果下一报 头既不是 tcp,udp 也不是 icmpv6,那么 表示在嵌入式设备端的协议栈的已经到达 ip 层,是端口不可达,发送目的不可达报文。 当收到 icmpv6 的应答请求报文时,就发送 应答回复报文,其格式与请求报文相似,在收 到的请求报文的基础上改变报文类型,重新 计算校验和,

在 ip 报头中将源,目的地址对调就可 以了。4.3 邻居发现

邻居发现是精简 ipv6 协议簇最核心的 协议,它利用邻居请求报文和邻居公告报文 的交换,实现地址解释,地址重复性检测, 以及地址自动配置功能。不实现路由器请求

/路由器公告报文,和重定向报文。

●邻居请求报文

类型值为 135,报文 ip 头的源地址域为 发送邻居请求报文接口的地址或者未指定, 目的地址域为与被请求目标地址相关联的 被请求节点组播地址,或者就是被请求目标 地址本身。icmpv6 报头域中的目标地址域 为被请求目标地址。选项域可以包含源链路 层地址选项,用来告诉对方发送请求节点的 mac 地址,当源地址为指定

地址时必须包含该选项。

●邻居公告报文

类型值为 136,用来响应邻居请求报文, 或者用来告知节点其链路层地址的改变,报 文 ip 头的源地址为发送邻居公告报文的接 口地址,目的地址为发送邻居请求的单播地 址,或者是用来公告给所有邻居节点其链路 层地址改变的全节点多播地址。目标地址就 是被解释的 ipv6 地址,或者在地址唯一性

验证中将要采用的 ipv6 地址。 地址解释就是节点仅仅知道邻居节点

ip 地址的情况下,通过发送邻居请求报文和 接收邻居公告报文,来得到对应节点链路层 地址的过程,是邻居发现模块中最重要的一 个功能模块,其处理过程如图 3 所示。

节点 a 知道节点 b 的链路 ipv6 地址

fec0:0:0:1::b 但不知道节点 b 的链路层地 址 00-10-5c-f7-5c-96,沿箭头方向,a 发送邻 居请求报文,ip 域的目的地址是要求被解释

的目标地址 fec0:0:0:1::b。节点 b

收到邻居请求报文后,查看目标地址就是属 于本机,是则发送一个单播的邻居公告报文 给 a,在邻居公告报文的目的链路层地址选 项 里 包含节 点 b 的链 路层 地址

00-10-5c-f7-5c-96。这样

节点 a 知道了节点 b 的链路层地址, 地址解释过程完成[5]。

5. 测试与验证

5.1 在 altera de2 上的实现与测试

课题的开发环境: altera de2(硬件平 台), quartus ii 5.1 和 nios ii 5.1(软件平 台),整个开发过程以 lwip1.1.0 为参考, 在理解了 lwip 的结构后在结合开发环境改 写。完成后对协议栈进行了测试和验证,测 试主要集中在网络层的 nd,ipv6,icmpv6 模块。由 于邻居发 现模块建 立在 ipv6,icmpv6 基础上的,对邻居模块的测试 相当于对 ipv6 和 icmpv6 也进行了测试,

很具有代表性[6]。

受周围网络环境中无 ipv6 路由器所 限,测试在 ipv6 局域网上进行,altera de2 通过以太网与 pc 机直接相连。测试对象电 路板 mac 地址为 00-10-5c-f7-5f-

5d,其经过地址转换算法得到的本地 ipv6 地址为:fe80:210:5cff:fef7:5f5d,当它 接入网络时,为了对自己将要配置的地址进 行唯一性验证,它要发送邻居请求报文,通 过 pc 端网络抓包工具 sniffer,我们抓到了由 目标板发出的邻居请求报文,如图 4 所示:

图 4 邻居请求报文

从图中看到其报文的类型值为 135。目

标地址为 fe80:210:5cff:fef7:5f5d。

测试协议栈在获取链路地址后,我们在

pc 机端执行 ping6 fe80::210:5cff:fef7:5f5d。 这个过程中要知道目标板的链路层地址,于 是发起针对目标板 ipv6 地址的地址解释。 在地址解释过程中,我们抓到了目标协议栈 发送的,包含自己链路层地址的单播邻居公 告报文,如图 5 所示。

图 5 邻居公告报文

由图可得知,报文类型值为 136,目标

地址为目

标板本地 ipv6 地址

fe80::210:5cff:fef7:5f5d。

5.2 在 s3c4410box 上的移植

移植目标平台:基于 s3c4410box 处理器的 arm7 开发板,按照通用的方法,先移植了 uc/os-ii 嵌入式操作系统,在移植好 的基础上用操作系统函数编写了操作系统 模拟层,把网络接口层的函数指针指向电路 板提供的网卡驱动程序,在系统启动初试化 函数中添加针对 ipv6 协议栈的启动代码。 完成这些后我们使用 altera de2 上一样的测试方法进行测试,实验结果证明协议栈满足基本通信功能。证明协议栈可以在该电路板 上进行移植[7]。6. 结束语

本文介绍了嵌入式精简 tcp/ipv6 的设 计思想和实现方法,精简性和可移植性是其 考虑的主要方面,该协议栈是一种解决了嵌 入设备和接入 ipv6 网络的可行解决方案。

参考文献

[1] robert e f. embedded internet systems come home[ j]. ieee internet computing,2001,5(1):52-53.

[2] ruhuarvi j,mahonen p,saaranen m j. providing

[3] soung s. network-driven layered multicast with ipv6[j],lecture notesin computer science, 2000 , volume

18 :11.

[4] liu li-feng,zou shi-hong. a congestion and rate control scheme based on directed diffusion in wireless sensor networks[j].journal of beijing university of posts and telecommunications,2006,29(2):54-58.

[5] chris m,maillik t, a look at native ipv6

multicast[j], ieee internet computing,2004 volume8 issue4: 48

[6] 周立功. sopc 嵌入式系统实验教程. 深圳:北京航空航天出版社. 2006 :241-248

[7] 姚羽,石林. ipv6 技术项目实验指导书. 北京:电子工业出版社. 2007 :24-28

[8]免费论文网