欢迎来到论文网! 识人者智,自知者明,通过生日认识自己! 生日公历:
网站地图 | Tags标签 | RSS
论文网 论文网8200余万篇毕业论文、各种论文格式和论文范文以及9千多种期刊杂志的论文征稿及论文投稿信息,是论文写作、论文投稿和论文发表的论文参考网站,也是科研人员论文检测和发表论文的理想平台。lunwenf@yeah.net。
您当前的位置:首页 > 科技论文 > 计算机论文

嵌入式IPv6协议栈的设计与实现

时间:2011-04-23  作者:秩名
struct ipv6_hdr{

u8_t v:4,tclass:4; /*版本号和流量类型*/

u16_t flow; /*流标签*/

u16_t len;/*载荷长度*/

u8_t nexthdr; /*下一报头*/

u8_t hoplim; /*跳数限制*/

struct ip_addr src, dest; /*源地址和目的地址*/

};

(2)IPv6包

根据IPv6的协议标准,原本只支持IPv4的LwIP中的IP包也要做出相应修改,包括IP接收包、IP发送包和IP转发包。相对于IPv4,IPv6简化了包头结构,因此代码量大幅减少,在此不再一一赘述。

2.2 ICMPv6协议

ICMPv6协议,包括信息报文和错误报文等多种类型。根据嵌入式应用的特点和需求,协议栈实现了目的不可达、超时两个错误报文和简单的ECHO信息报文。

(1)ICMP数据处理

首先由ip_input()将收到的ICMP包移交到icmp_input(),它解析ICMP报头并且进行以下处理。

1) 解析ICMP报头时,用类型字段和代码字段的值代表不同的状况

type =((u8_t*)p->payload)[0];

switch (type) {

case ICMP6_ECHO;

LWIP_DEBUGF(ICMP_DEBUG,(“icmp_input: ping ”));

}

2)交换目标地址和目的地址,以便将ECHO信息送回:

ip_addr_set(&tmpaddr,&(iphdr->src));

ip_addr_set(&(iphdr->src),&(iphdr->dest));

ip_addr_set(&(iphdr->dest),&tmpaddr);

3)重新计算校验和,进行性能优化:

if (iecho->chksum>=htons(0xffff- (ICMP6_ECHO<<8))){

iecho->chksum+=htons(ICMP6_ECHO<<8)+ 1;

} else {

iecho->chksum +=htons(ICMP6_ECHO <<8);

}

4)将包交到IP层,等待传送

ip_output_if ( p ,&(ip_hdr->src), IP_HDRINCL, ip_hdr->hoplim,

IP_PROTO_ICMP, inp);

(2)错误报文

当UDP中检索不到匹配的端口时,就发送一个目的不可达报文。对于多播地址,不发送ICMP错误报文。

而超时的判断主要是对IP报头中Hoplim域值的判断,所以直接在IP协议中实现更为妥当。转发包时,首先判断跳数限制的值:

if (--ip_hdr->hoplim==0) {

if (ip_hdr->nexthdr!=IP_PROTO_ICMP) {

icmp_time_exceeded ( p,ICMP_TE_TTL);

}

pbuf free(p) ;

return;

}

对于其它传输过程中出现的问题,不发送ICMP信息,而是直接将包丢弃。

2.3 UDP协议和TCP协议

UDP协议和TCP协议属于传输层协议,在嵌入式IPv6协议栈中不需要更改协议模式,只需要基于LwIP提供的相应功能对数据格式(如地址格式等)进行适当修改即可。在此不再详述。

2.4 ND协议

IPv4中用ARP协议完成MAC地址和IP地址的解析,在IPv6中使用ND(Neighbor Discovery邻居发现)协议实现这一功能,协议栈设计了邻居请求报文和邻居宣告报文的数据结构和函数,通过这两个报文对接口的MAC地址和IPv6地址进行绑定并且保存在对方的地址缓存区中。

1)邻居请求报文

IPv6通过邻居请求报文来获得链路层地址。当下一跳IP对应的MAC地址为NULL时,调用邻居请求模块,把数据包按照邻居请求报文格式封装,然后传送给IPv6输出模块in-out(),把数据包发送到网络上。

if (netif->hwaddr[]==NULL){

ndrequest(struct pbfs p);

}

当从IPv6输入模块ip_input()中接收到邻居宣告报文时,从数据包中取出IP地址和MAC物理地址存到邻居缓存表中。:

tgaddr=p->ip6_addr;

macaddr[]=netif->hwaddr[];

2)邻居宣告报文按照结构体定义设计完成即可。

3移植和测试

本课题采用博创公司的UP-NETARM2410-S开发平台。将移植工作完成后,建立与运行微软IPv6协议栈的PC机对等通信的实验环境进行测试。设置好相应的IPv6地址后,可以通过ping命令顺利地得到开发板的响应,如图3所示。

图3 IPv6测试示意图

4结语

本文针对嵌入式系统的特点和要求,基于轻载协议栈LwIP3.0,设计并实现了一个嵌入式IPv6协议栈。利用三星S3C2410处理器(ARM9内核)和μC/OS-Ⅱ操作系统搭建了一个嵌入式系统平台,将该协议栈加载在该系统中并进行了验证,并通过连通性测试表明该协议栈可以满足嵌入式系统网络化的要求。


参考文献:
[1] 罗蕾主编,嵌入式实时操作系统及应用开发[M],北京:北京航空航天大学出版社,2005年1月:45.
[2] 石小兰.嵌入式系统中IPv6协议栈的研究与实现.安徽:合肥工业大学,2006.
[3] Adam Dunkels. LwIP source code,2001.
[4] 杨成群.嵌入式系统中IPv6协议栈的研究.湖南:嵌入式系统中IPv6协议栈的研究,2008.
 

查看相关论文专题
加入收藏  打印本文
上一篇论文:浅议医院网络安全的隐患及其防治策略(图文)
下一篇论文:嵌入式系统开发平台化浅析
科技论文分类
科技小论文 数学建模论文
数学论文 节能减排论文
数学小论文 低碳生活论文
物理论文 建筑工程论文
网站设计论文 农业论文
图书情报 环境保护论文
计算机论文 化学论文
机电一体化论文 生物论文
网络安全论文 机械论文
水利论文 地质论文
交通论文
相关计算机论文
最新计算机论文
读者推荐的计算机论文