论文部分内容阅读
摘要:详细介绍了IPv4IPv6转换网关的设计与实现过程;首先介绍转换网关的工作流程,其次介绍地址转换和协议转换设计,最后分析了DNS ALG设计。
关键词:IPv6;IPv4;转换网关
中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)23-883-02
Design and Implementation of IPv4/IPv6 Translation Gateway
HAN Yin-feng
(Xi'an Aeronautical Polytechnic Institute, Xi'an 710089, China)
Abstract:In this thesis, a translation gateway is introduced, both the design and implementation. First, the flow of translation gateway is introduced, secondly, address Translation and protocol Translation Are described, In the end of this thesis, DNS ALG is analyzed.
Key words: IPv6; IPv4; Translation Gateway
随着Internet的迅猛发展,现有的IP协议(IPv4协议)在应用中出现了很多问题,如地址资源即将耗尽,不能适应新的网络应用以及对安全性无法保证等。下一代Internet协议(IPv6)不仅解决了IPv4遇到的问题,而且还给IP带来了一些新特性,它取代IPv4成为必然。
然而,现有的IPv4网路已发展了很多年,它不可能在短时间内都过渡到IPv6网络,在相当长的一段时期内,IPv6网络将和IPv4网络共存。如何实现IPv4节点和IPv6节点之间相互通信是目前Internet急切解决的问题。
1 转换网关的工作流程
本系统设计的转换网关的主要功能是通过IPv4和IPv6分组头的地址和语义转换、DNS ALG设计、TCP层校验和修改以及ICMPv4和ICMPv6的类型、代码转换,以实现IPv4节点和IPv6节点之间相互通信。转换网关的工作流程如图1所示。
1)IPv4主机要与ipv6主机sipv6.com建立连接,但是不知道该ipv6主机的ipv4地址。于是发出DNS Request问sipv6.com的IPv4地址,DNS request传给IPv4 DNS,若在IPv4 DNS中找到ipv6主机的记录(IPv4是A,而IPv6的报文类型是A6或AAAA),则转到7),否则转到2)。
2)IPv4 DNS将DNS Request转发到DNS-ALG。
3)DNS-ALG将Request中的A改为A6或AAAA,转发到IPv6网络。
4)IPv6 DNS接收到此Request,回复IPv6主机的address为3FFE:3600::140.115.78.8。
5)DNS-ALG接收到address后,在address上减去前缀,变成IPv4地址140.115.78.8。
6)DNS-ALG将A6或AAAA改为A之后继续把DNS Reply送回给IPv4 DNS再传给IPv4主机。
7)IPv4主机认为Sipv6.com的地址为3FFE:3600::140.115.78.8,所以发出源地址为"202.115.64.5",目的地址为140.115.78.8的IPv4分组。
8)当分组经过转换网关时,其首先查找其地址映射表中是否有源地址为“202.115.64.5”的表项,如果有则直接使用之,如果没有,从可用的地址池中分配一个IPv6地址给此Ipv4主机,假设分配的IPv6地址是3FFE:3600:B::203.79.65.7,同时在地址映射表中添加一个表项:3FFE:3600:B::203.79.65.7——202.115.64.5,从而建立起IPv4主机与IPv6主机间的地址映射。
9)转换网关根据建立的地址映射关系,进行地址和语义转换,把IPv4的分组头转换成IPv6的分组头,分组头中的源地址为“3FFE:3600:B::203.79.65.7”,目的地址为"3FFE:3600:B::140.115.78.8",然后向IPv6网络发出分组。
反方向建立连接的过程与上述情况类似,不再详述。
从转换网关工作流程可以看出,转换网关的设计主要包括地址转换、协议转换和DNS-ALG设计。
2 地址转换设计
地址转换是对IPv6地址端口对和IPv4地址端口对进行转换。当IPv6主机要访问IPv4的网络时,必须有一个合法的IPv4地址,在该模块设计中,合法的IPv4地址端口对存放在一个地址池中,同时包括一个分配状况信息的链表。在协议转换时,通过查询这个地址转换表,将相应的转换后的地址端口对写入新的IP数据报口。
2.1 表的设计
地址转换表是地址转换的过程中最重要的一个数据结构,整个模块要实现的功能都是通过对这个转换表的操作实现。数据转换表用于存放所有经过转换的IPv4和IPv6地址端口对的映射关系。综合考虑查询速度和数据存储空间,决定采用了Hash表+链表的数据结构。
2.2 表的建立
在Hash表建立之前,首先向地址池进行查询,查找可用的IPv6地址端口对;接着,建立IPv4和IPv6地址端口对的对应关系,并分别计算Hash值,根据Hash值,把IPv4和IPv6地址端口对的信息分别插入到Hash表头所指向的相应链表的表头;最后,要给这两个记录设置互相指向的指针,表明它们之间的映射关系。
2.3 表的搜索
表的搜索主要是根据IPv4和IPv6地址端口对进行检索。首先根据地址端口对计算出Hash值;然后找到该值对应的链表,之后根据关键字进行匹配,顺序搜索;最后,将搜索到的记录移至Hash表头后的第一个记录。
2.4 表的修改
当地址映射关系发生变化时,要对地址转换表的记录进行相应的修改。修改的过程就是先搜索,后修改,即先根据表的搜索算法找到要修改的记录,之后再改动记录里面的内容。
2.5 表的删除
随着转换网关工作的日趋频繁,地址转换表的记录会越来越多。所以,一定要有一个表的维护策略,定期将无用或很久没用用到的记录删除,以释放空间。
3 协议转换设计
IPv4-IPv6(IPv6-IPv4)转换是根据一定的转换算法,把IPv4(IPv6)的报头转化为IPv6(IPv4)的报头。而IPv6-IPv4的转换和IPv4-IPv6转换类似,但转换方向相反。下面重点介绍IPv4-IPv6转换。
IPv4-IPv6转换是根据一定的转换算法,把IPv4的报头转化为IPv6的报头。
1)IP协议转换算法
IPv6报头各字段的内容填写规则如下:
Version:6
Priority:全0。
Flow Label:全0。
Payload Length:IPv4 报头中的 Total length-IPv4 报头的Header Length×4。
Next Header:填入 IPv4 报头中的 Protocol 域的值。如果协议号是 1(ICMPv4),则应替换成为 58(ICMPv6)。
Hop Limit:IPv4 的 TTL -1。如果结果已经为 0,则提示“TTL Exceeded”。
Source Address 和 Destination Address:填入经转换后的IPv6地址。如果数据报是一个分片的话,还要增加一个分片扩展头。此时,各域的设置基本上与不分片相同,只有以下的差别:
Payload Length:在上述计算结果的基础上再加 8。
Next Header:44。
分片扩展头的设置如下:
Next Header:填入IPv4中的Protocol域的值。如果协议号是1(ICMPv4),则应替换为58(ICMPv6)。
Reserved:0
Fragment Offset:用IPv4的分片偏移量替换。
MF 标志位:用IPv4的MF标志位替换。
Identification:低16位用IPv4中的标识符替换;高16位置0。
2)ICMP4-ICMP6协议转换算法
在ICMPv6中对部分代码(Code)的含义进行了改变,因此必须进行相应得代码转换。ICMP4-ICMP6协议转换算法如表1所示:
4 应用层(DNS ALG)设计
纯IPv4主机和纯IPv6主机之间无法直接通过IP地址进行连接通信。但由于IPv4和IPv6具有相同的域名结构,IPv4和IPv6可以使用相同的域名空间,因此可以通过DNS-ALG进行IPv4地址与IPv6地址之间的映像,实现纯IPv4主机和纯IPv6主机之间的连接通信。该模块主要的函数如下:
1)DNS数据报转换函数
这是DNS数据报转换的主函数,输入原来伪DNS数据报指针,输出转换后的DNS数据报指针。在这个函数中,对DNS报文中各个不同的字段,调用不同的转换函数进行相应的转换。
2)查询问题转换函数
查询问题转换函数用来转换DNS数据报中的查询问题部分,根据查询问题数循环修改其中的查询名、查询类型字段。查询类通常是1,表示互联网地址,在这里不需要修改。若查询类型是"AAAA",就要将其改为"A";若为"A",则改为"AAAA"。如果查询类型是"PTR"的话,则请求获得一个IP地址对应的域名。
3)资源记录转换函数
不同的字段在进行转换的时候,输入不同的指针。与查询问题转换函数一样,根据资源记录数对资源记录部分进行循环转换。域名和类的内容不需要改变,类型的转换与查询问题转换函数相同。生存时间设置为Q。转换之后,更新数据长度和数据的内容。
4)反向转换函数
该函数用于将PTR类型的查询名和资源记录名进行转换。转换过程中,首先查找地址转换表,若有待转换的IPv4/IPv6地址映射记录,则取出记录中的值作为返回值:若没有,则采取加上或去掉IP地址的前缀的方法进行地址转换。
5 小结
IPv6协议是下一代Internet通信协议,它取代IPv4成为了发展的必然。如何实现纯IPv4节点和纯IPv6节点之间相互通信是IPv6发展急需解决的关键问题。本文对IPv4和IPv6协议之间的相互转换进行了深入的研究,基本实现了IPv4和IPv6协议之间的数据通信,达到了预期的效果。
参考文献:
[1] 伍海桑.IPv6原理与实践[M].北京:人民邮电出版社,2000.
[2] RFC 2766:Network Address Translation-Protocol Translation(NAT-PT)[S],2000.
[3] 李津生,洪佩琳.下一代Internet网络技术[M].北京:人民邮电出版社,2001.
[4] Loshin P. IPv6详解[M].机械工业出版社,2000.
关键词:IPv6;IPv4;转换网关
中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)23-883-02
Design and Implementation of IPv4/IPv6 Translation Gateway
HAN Yin-feng
(Xi'an Aeronautical Polytechnic Institute, Xi'an 710089, China)
Abstract:In this thesis, a translation gateway is introduced, both the design and implementation. First, the flow of translation gateway is introduced, secondly, address Translation and protocol Translation Are described, In the end of this thesis, DNS ALG is analyzed.
Key words: IPv6; IPv4; Translation Gateway
随着Internet的迅猛发展,现有的IP协议(IPv4协议)在应用中出现了很多问题,如地址资源即将耗尽,不能适应新的网络应用以及对安全性无法保证等。下一代Internet协议(IPv6)不仅解决了IPv4遇到的问题,而且还给IP带来了一些新特性,它取代IPv4成为必然。
然而,现有的IPv4网路已发展了很多年,它不可能在短时间内都过渡到IPv6网络,在相当长的一段时期内,IPv6网络将和IPv4网络共存。如何实现IPv4节点和IPv6节点之间相互通信是目前Internet急切解决的问题。
1 转换网关的工作流程
本系统设计的转换网关的主要功能是通过IPv4和IPv6分组头的地址和语义转换、DNS ALG设计、TCP层校验和修改以及ICMPv4和ICMPv6的类型、代码转换,以实现IPv4节点和IPv6节点之间相互通信。转换网关的工作流程如图1所示。
1)IPv4主机要与ipv6主机sipv6.com建立连接,但是不知道该ipv6主机的ipv4地址。于是发出DNS Request问sipv6.com的IPv4地址,DNS request传给IPv4 DNS,若在IPv4 DNS中找到ipv6主机的记录(IPv4是A,而IPv6的报文类型是A6或AAAA),则转到7),否则转到2)。
2)IPv4 DNS将DNS Request转发到DNS-ALG。
3)DNS-ALG将Request中的A改为A6或AAAA,转发到IPv6网络。
4)IPv6 DNS接收到此Request,回复IPv6主机的address为3FFE:3600::140.115.78.8。
5)DNS-ALG接收到address后,在address上减去前缀,变成IPv4地址140.115.78.8。
6)DNS-ALG将A6或AAAA改为A之后继续把DNS Reply送回给IPv4 DNS再传给IPv4主机。
7)IPv4主机认为Sipv6.com的地址为3FFE:3600::140.115.78.8,所以发出源地址为"202.115.64.5",目的地址为140.115.78.8的IPv4分组。
8)当分组经过转换网关时,其首先查找其地址映射表中是否有源地址为“202.115.64.5”的表项,如果有则直接使用之,如果没有,从可用的地址池中分配一个IPv6地址给此Ipv4主机,假设分配的IPv6地址是3FFE:3600:B::203.79.65.7,同时在地址映射表中添加一个表项:3FFE:3600:B::203.79.65.7——202.115.64.5,从而建立起IPv4主机与IPv6主机间的地址映射。
9)转换网关根据建立的地址映射关系,进行地址和语义转换,把IPv4的分组头转换成IPv6的分组头,分组头中的源地址为“3FFE:3600:B::203.79.65.7”,目的地址为"3FFE:3600:B::140.115.78.8",然后向IPv6网络发出分组。
反方向建立连接的过程与上述情况类似,不再详述。
从转换网关工作流程可以看出,转换网关的设计主要包括地址转换、协议转换和DNS-ALG设计。
2 地址转换设计
地址转换是对IPv6地址端口对和IPv4地址端口对进行转换。当IPv6主机要访问IPv4的网络时,必须有一个合法的IPv4地址,在该模块设计中,合法的IPv4地址端口对存放在一个地址池中,同时包括一个分配状况信息的链表。在协议转换时,通过查询这个地址转换表,将相应的转换后的地址端口对写入新的IP数据报口。
2.1 表的设计
地址转换表是地址转换的过程中最重要的一个数据结构,整个模块要实现的功能都是通过对这个转换表的操作实现。数据转换表用于存放所有经过转换的IPv4和IPv6地址端口对的映射关系。综合考虑查询速度和数据存储空间,决定采用了Hash表+链表的数据结构。
2.2 表的建立
在Hash表建立之前,首先向地址池进行查询,查找可用的IPv6地址端口对;接着,建立IPv4和IPv6地址端口对的对应关系,并分别计算Hash值,根据Hash值,把IPv4和IPv6地址端口对的信息分别插入到Hash表头所指向的相应链表的表头;最后,要给这两个记录设置互相指向的指针,表明它们之间的映射关系。
2.3 表的搜索
表的搜索主要是根据IPv4和IPv6地址端口对进行检索。首先根据地址端口对计算出Hash值;然后找到该值对应的链表,之后根据关键字进行匹配,顺序搜索;最后,将搜索到的记录移至Hash表头后的第一个记录。
2.4 表的修改
当地址映射关系发生变化时,要对地址转换表的记录进行相应的修改。修改的过程就是先搜索,后修改,即先根据表的搜索算法找到要修改的记录,之后再改动记录里面的内容。
2.5 表的删除
随着转换网关工作的日趋频繁,地址转换表的记录会越来越多。所以,一定要有一个表的维护策略,定期将无用或很久没用用到的记录删除,以释放空间。
3 协议转换设计
IPv4-IPv6(IPv6-IPv4)转换是根据一定的转换算法,把IPv4(IPv6)的报头转化为IPv6(IPv4)的报头。而IPv6-IPv4的转换和IPv4-IPv6转换类似,但转换方向相反。下面重点介绍IPv4-IPv6转换。
IPv4-IPv6转换是根据一定的转换算法,把IPv4的报头转化为IPv6的报头。
1)IP协议转换算法
IPv6报头各字段的内容填写规则如下:
Version:6
Priority:全0。
Flow Label:全0。
Payload Length:IPv4 报头中的 Total length-IPv4 报头的Header Length×4。
Next Header:填入 IPv4 报头中的 Protocol 域的值。如果协议号是 1(ICMPv4),则应替换成为 58(ICMPv6)。
Hop Limit:IPv4 的 TTL -1。如果结果已经为 0,则提示“TTL Exceeded”。
Source Address 和 Destination Address:填入经转换后的IPv6地址。如果数据报是一个分片的话,还要增加一个分片扩展头。此时,各域的设置基本上与不分片相同,只有以下的差别:
Payload Length:在上述计算结果的基础上再加 8。
Next Header:44。
分片扩展头的设置如下:
Next Header:填入IPv4中的Protocol域的值。如果协议号是1(ICMPv4),则应替换为58(ICMPv6)。
Reserved:0
Fragment Offset:用IPv4的分片偏移量替换。
MF 标志位:用IPv4的MF标志位替换。
Identification:低16位用IPv4中的标识符替换;高16位置0。
2)ICMP4-ICMP6协议转换算法
在ICMPv6中对部分代码(Code)的含义进行了改变,因此必须进行相应得代码转换。ICMP4-ICMP6协议转换算法如表1所示:
4 应用层(DNS ALG)设计
纯IPv4主机和纯IPv6主机之间无法直接通过IP地址进行连接通信。但由于IPv4和IPv6具有相同的域名结构,IPv4和IPv6可以使用相同的域名空间,因此可以通过DNS-ALG进行IPv4地址与IPv6地址之间的映像,实现纯IPv4主机和纯IPv6主机之间的连接通信。该模块主要的函数如下:
1)DNS数据报转换函数
这是DNS数据报转换的主函数,输入原来伪DNS数据报指针,输出转换后的DNS数据报指针。在这个函数中,对DNS报文中各个不同的字段,调用不同的转换函数进行相应的转换。
2)查询问题转换函数
查询问题转换函数用来转换DNS数据报中的查询问题部分,根据查询问题数循环修改其中的查询名、查询类型字段。查询类通常是1,表示互联网地址,在这里不需要修改。若查询类型是"AAAA",就要将其改为"A";若为"A",则改为"AAAA"。如果查询类型是"PTR"的话,则请求获得一个IP地址对应的域名。
3)资源记录转换函数
不同的字段在进行转换的时候,输入不同的指针。与查询问题转换函数一样,根据资源记录数对资源记录部分进行循环转换。域名和类的内容不需要改变,类型的转换与查询问题转换函数相同。生存时间设置为Q。转换之后,更新数据长度和数据的内容。
4)反向转换函数
该函数用于将PTR类型的查询名和资源记录名进行转换。转换过程中,首先查找地址转换表,若有待转换的IPv4/IPv6地址映射记录,则取出记录中的值作为返回值:若没有,则采取加上或去掉IP地址的前缀的方法进行地址转换。
5 小结
IPv6协议是下一代Internet通信协议,它取代IPv4成为了发展的必然。如何实现纯IPv4节点和纯IPv6节点之间相互通信是IPv6发展急需解决的关键问题。本文对IPv4和IPv6协议之间的相互转换进行了深入的研究,基本实现了IPv4和IPv6协议之间的数据通信,达到了预期的效果。
参考文献:
[1] 伍海桑.IPv6原理与实践[M].北京:人民邮电出版社,2000.
[2] RFC 2766:Network Address Translation-Protocol Translation(NAT-PT)[S],2000.
[3] 李津生,洪佩琳.下一代Internet网络技术[M].北京:人民邮电出版社,2001.
[4] Loshin P. IPv6详解[M].机械工业出版社,2000.