一种可穿越网络地址翻译的自动隧道的方法

文档序号:7977754阅读:207来源:国知局
专利名称:一种可穿越网络地址翻译的自动隧道的方法
技术领域
本发明涉及互联网技术领域,特别是一种可穿越NAT(网络地址翻译)的自动隧道方法。该方法利用现有的IPv4网络路由体系传输IPv6数据包,是一种IPv4向IPv6过渡时期的隧道技术,用以实现IPv4向IPv6的过渡。
背景技术
NAT(网络地址翻译)技术是解决IPv4地址不足的一种有效方法,它在中国的部署极其广泛。NAT按映射关系不同可以分为3种类型“cone”NAT、“Restricted”NAT、“Symmetric”NAT。
NAT收到来自内部网络的数据包时,将数据包的IPv4源地址(私有地址)转换成另一地址(公有地址),我们称该地址为外部地址,将TCP或UDP源端口号转换成另一端口号,我们称该端口号为外部端口,然后向外部网络发送转换后的数据包。并在它维护的转换表中增加源地址、源端口和外部地址、外部端口之间的映射关系。外部网络收到数据包后如果要往回发送数据包,它将外部地址设为数据包的目的地址,将外部端口设为数据包的目的端口。当NAT收到来自外部网络的数据包时,根据转换表中的映射关系将数据包的IPv4目的地址和TCP或UDP目的端口(也就是原来的外部地址和外部端口)转换成源地址和源端口后发送给内部网络。
“cone”NAT中,转换表的映射关系为<源地址,源端口,外部地址,外部端口>。只要来自外部网络的数据包中的<目的地址,目的端口>符合映射关系中的<外部地址,外部端口>,它就将之转化为映射关系中的<源地址,源端口>,然后向内部网络发送该数据包。
“Restricted”NAT中,转换表的映射关系为<源地址,源端口,外部地址,外部端口,目的地址,目的端口>或<源地址,源端口,外部地址,外部端口,目的地址>。如果来自外部网络的数据包的<目的地址、目的端口、源地址、源端口>符合映射关系中的<外部地址,外部端口,目的地址,目的端口>或<外部地址,外部端口,目的地址>,它就将数据包的<目的地址,目的端口>转化为映射关系中的<源地址,源端口>,然后向内部网络发送该数据包。
上述两种NAT,映射关系是一对一,也就是说只要原象<源地址,源端口>不变,映射后的象<外部地址,外部端口>也不变。”Symmetric”NAT不同,它的映射关系是一对多,对于同一个原象<源地址,源端口>,根据数据包不同的目的地址,会被映射成不同的象<外部地址,外部端口>。
NAT在解决IPv4地址不足的同时也破坏了IP协议端到端的特性,而IPv4协议本身在地址分配策略、安全、接入、Qos、移动性等方面存在诸多不足,IPv6就是为解决这些问题而设计的。随着政府和企业对IPv6互联网研究和运行投入的不断增加,IPv4互联网向IPv6互联网的转变势在必行。但这种转变不是一蹴而就的,它需要一个漫长的过程。目前,IETF已经提出了从IPv4过渡到IPv6的3种主要迁移机制双栈、协议翻译、隧道。
双栈节点同时实现了IPv4和IPv6协议,可以和IPv4或IPv6节点建立通信。节点根据目的IP地址决定采用IPv4还是IPv6协议发送或接收数据包。目前双栈是运行最广泛的迁移机制。但双栈只允许相同IP版本之间的通信。
协议翻译就是将数据包透明的从一种协议翻译成另一种协议。这样使得纯IPv6节点可以和纯IPv4节点之间建立通信,而不需要修改任何软件。最有名的协议翻译机制是NAT-PT。NAT-PT采用SIIT(StatelessIP/ICMP T路由广告nslator)进行协议翻译,当IPv6节点和IPv4节点需要建立通信时,NAT-PT为IPv6节点分配一个临时的IPv4地址,并在会话期间维护IPv4地址和IPv6地址的映射关系。同时它还可以提供应用层网关的功能,执行IPv4和IPv6 DNS请求和应答的翻译。
隧道技术的实质是将IPv6(IPv4)数据包封装在IPv4(IPv6)数据包中,利用已有的IPv4(IPv6)路由体系进行传输,从而解决被不兼容的网络分离的采用相同IP版本的节点之间相互通信的问题。在过渡前期,IPv4网络占主导地位,IPv6网络好比是整个IPv4汪洋中的孤立岛屿,这些岛屿之间的通信可采用IPv6-over-IPv4隧道来实现。过渡后期,IPv6网络占统治地位,类似地,各个孤立IPv4岛屿之间的通信可采用IPv4-over-IPv6隧道来实现。
通常隧道由3部分组成隧道首节点,对数据包进行封装;隧道尾节点,对数据包进行解封装;隧道主体,实际上是一条IPv6或IPv4路径,将封装后的数据包从隧道首节点传送到隧道尾节点。根据各部分实现方式的不同,隧道技术包括6to4、ISATAP、6over4、Tunnel Broker、DSTM等。
目前绝大部分隧道技术都采用将IPv6数据包封装在IPv4载荷中的方式解决被IPv4网络分离的两个IPv6节点之间通信的问题。但是,这些隧道技术都无法支持NAT域内的IPv6节点和其他IPv6节点之间的通信,也就是说,这些隧道不允许隧道主体上有NAT存在。原因是目前的NAT基本上不允许IPv6-in-IPv4数据包(也就是IPv4头部的协议类型字段为41的数据包)通过。NAT收到IPv6-in-IPv4数据包后,由于不认识而将之丢弃。

发明内容
本发明提出一种可穿越NAT的自动隧道的方法,目的是解决NAT域内的IPv6节点和其他IPv6节点(可以在NAT域内,也可以不是)之间互相通信的问题。
本发明的技术方案因此提出了一种将IPv6数据包封装在UDP载荷中的隧道技术,我们称之为“SilkRoad”,相应的,我们称这种隧道为SilkRoad隧道,SilkRoad不受隧道主体上存在任意类型和任意数量的NAT的影响,可将IPv6数据包从隧道首节点传送到隧道尾节点。
SilkRoad隧道定义了3个通信实体,用于实现上述的方法1.Silkroad客户端(以下简称客户端),表示NAT域内的IPv6/IPv4双栈节点,支持Silkroad隧道功能,有一个全球单播聚类IPv6地址(我们称之为SilkRoad地址)和一个私有IPv4地址。
2.Silkroad服务器(以下简称服务器),在NAT域外,表示为客户端分配IPv6地址并具有路由功能的IPv6/IPv4双栈节点,支持Silkroad隧道功能,有一个公有IPv4地址,它可以有通向IPv6骨干网的路由,也可以有通向孤立IPv6网络的路由。
3.普通IPv6节点,表示除客户端和服务器以外的其他IPv6节点。


图1为服务器分配给客户端的SilkRoad地址格式图。
图2为SilkRoad定义的数据包格式图。
图3为SilkRoad定义的维持包格式图。
图4为SilkRoad的路由体系图。
图5为客户端启动后的初始化配置过程图。
图6为相同链路上客户端之间的通信过程图。
图7为位于不同NAT域客户端之间通信的第一种情况图。
图8为位于不同NAT域客户端之间通信的第二种情况图。
图9为位于不同NAT域客户端之间通信的第三种情况图。
图10为客户端到普通IPv6节点的通信过程图。
图11为普通IPv6节点到客户端的通信过程图。
客户端通信时采用的IPv6地址是一种规定格式的地址,它包括64位的IPv6地址前缀和64位的接口标识符,接口标识符由伪外部端口字段、NAT类型标志位字段、Silkroad地址标志位字段和伪外部地址字段组成,如附图1所示。各部分说明如下◆IPv6前缀IANA正式分配的全球聚类单播地址前缀或“site-local”地址前缀,不可以是“1ink-local”地址前缀或组播地址前缀。
◆伪外部端口外部端口(经NAT映射后的端口)和0xFFFF与或后的16位数值。
SilkRoad客户端启动后向服务器发送一个初始化数据包,该包经过NAT时其UDP端口被映射成一个不同的端口,我们称之为外部端口。服务器从接收到的初始化数据包中获得此端口。考虑到NAT会删除过期的映射关系,客户端(或服务器)将周期性的向NAT发送数据包以维持这种映射关系,所以NAT的转换表中始终保留该映射关系。对外部端口进行与或操作的目的是为了防止某些“自作聪明”的NAT将UDP数据包载荷,即IPv6头部+IPv6载荷中的外部端口进行转化。
◆NAT类型标志位长度为2位,用来表示客户端所在NAT的类型。00表示客户端位于“cone”NAT域,10表示客户端位于“Restricted”NAT域,11表示客户端位于“Symmetric”NAT域。
◆Silkroad地址标志位长度为14位,设为0,表示该地址是一Silkroad地址。将该字段放在接口标识符中间的目的在于避免和其他地址冲突,因为目前只要不是随机分配的接口标识符,其中间16位都是FFFE。
◆伪外部地址外部地址即经NAT映射后的地址和0xFFFFFFFF与或后的32位数值。客户端启动后向服务器发送一个初始化数据包,该包经过NAT时其私有IPv4地址被映射成一个公有IPv4地址,我们称之为外部地址。服务器从接收到的初始化数据包中获得此地址。考虑到NAT会删除过期的映射关系,客户端(或服务器)将周期性的向NAT发送数据包以维持这种映射关系,所以NAT的转换表中始终保留该映射关系。对外部地址进行与或操作的目的是为了防止某些“自作聪明”的NAT将UDP数据包载荷,即IPv6头部+IPv6载荷中的外部端口进行转化。客户端和其他IPv6节点通信时发送或接收的数据包我们称之为Silkroad数据包,它由IPv4头部、UDP头部、IPv6头部以及IPv6载荷组成,如附图2所示。具体说明如下●IPv4头部源IPv4地址为客户端的IPv4地址(私有地址),目的IPv4地址为服务器的IPv4地址(如果目的地是普通IPv6节点)或对方客户端经NAT映射后的外部地址(如果目的地是另一客户端)。
●UDP头部
源端口为5188,目的端口为5188(如果目的地是普通IPv6节点)或对方客户端经NAT映射后的外部端口(如果目的地是另一客户端)。
●IPv6头部包含源IPv6地址和目的IPv6地址,其中至少有一个是SilkRoad地址。
●IPv6载荷由0或若干个IPv6扩展头部,以及上层协议数据单元(PDU)组成。
为了维持NAT中的映射关系,如“cone”NAT的<源地址,源端口,目的地址,目的端口>。客户端需要周期性的向NAT发送数据包,我们称这种数据包为维持包,如附图3所示。在维持包的IPv6头部中,下一跳字段设为59,表示没有IPv6载荷。
Silkroad的路由体系如附图4所示。客户端通过SilkRoad隧道接口发送或接收数据包,SilkRoad隧道接口是一个逻辑接口,它会自动将IPv6数据包封装在UDP载荷中进行发送。同样,Silkroad隧道接口接收到的数据包肯定是一个封装了IPv6报文的UDP数据包。客户端有一个缺省路由(∷/0),它将所有IPv6地址视为同一链路上的地址并使用SilkRoad隧道接口进行转发。缺省路由的下一跳地址为IPv6数据包中的目的地址,下一跳接口为SilkRoad隧道接口。服务器有通向IPv6骨干网以及各孤立IPv6网络的路由,也有通向各客户端的路由。IPv6骨干网以及各孤立IPv6网络中任何一个IPv6节点发送的数据包,只要目的地址前缀是服务器分配给客户端的地址前缀,都将被路由至服务器(图中以地址前缀2001*/64为例),服务器再通过去往客户端的路由将数据包转发至客户端。同样,客户端可通过服务器和IPv6骨干网以及各孤立IPv6网络中的任何一个IPv6节点实现互访。
客户端每次启动后首先向服务器注册以获得一个SilkRoad地址,这样才能和其他IPv6节点建立通信,这个过程我们称之为客户端的初始化配置,如附图5所示。
客户端的初始化配置通过向服务器发送一系列路由请求报文来完成,服务器以路由广告报文作为响应,路由广告报文中含有客户端被NAT映射后的外部地址和外部端口信息。通过此过程客户端获得一个SilkRoad地址并判断它位于何种NAT域内。
客户端的初始化配置过程如下1、客户端向首选的服务器(图中为服务器1)发送一个路由请求报文,报文的源IPv6地址是一个“1ink-local“地址,其F字段值为00。
2、服务器1收到路由请求报文后发送一个路由广告报文作为响应,因为路由请求报文显示客户端位于“cone”NAT域内(F字段设为00),所以它选择一个不同的IPv4地址作为源地址发送路由广告报文,如果客户端能收到此报文,表明客户端确实位于“cone”NAT域内。
3、如果客户端没有收到此路由广告报文,它将再向服务器1发送一个路由请求报文,路由请求报文的源IPv6地址是另一个“link-local“地址,其F字段值为10。
4、服务器1收到路由请求报文后发送一个路由广告报文作为响应,因为路由请求报文显示客户端位于“Restricted”NAT域内,它将以路由请求报文中的目的IPv4地址作为源IPv4地址发送路由广告报文,客户端如果收到此报文,表示它位于一个“Restricted”NAT域内。
5、客户端为了明确是否位于“Symmetric”NAT域内,将再向另一个服务器(图5中为服务器2)发送路由请求报文,服务器2收到路由请求报文后发送一个路由广告报文作为响应。
6、客户端收到此路由广告报文后和原先收到的路由广告报文作比较,如果报文包含的用来构造SilkRoad地址的信息相同,表示NAT的地址端口映射关系是一一对应的。如果不同,表示NAT将相同的内部地址和端口映射成了不同的外部地址和端口,映射关系是一对多,所以客户端认为它位于“Symmetric”NAT域。
根据第2、4或6步收到的路由广告报文, 客户端按如下构造一个SilkRoad地址●地址的前64位设置为路由广告报文中的“前缀信息选项”(如2001***/64)。
●接下去的16位设为路由广告报文中包含的外部端口。
●接下去的2位设为00(如果客户端位于“cone”NAT后)或10(如果客户端位于“Restricted”NAT后)或11(如果客户端位于“Symmetric”NAT后)。
●接下去的14位设为0。
●最后32位设为路由广告报文包含的外部地址。
客户端和其他IPv6节点之间的通信情况分以下3种情况一、通信对方是同一链路上的客户端;对于目的地是相同链路上客户端的数据包,SilkRoad隧道接口采用SilkRoad维持包的交换代替邻居发现的地址决议过程,交换SilkRoad维持包是为了获得通信对方在该链路上的IPv4地址以便可以直接进行通信;为了判断目的地址所对应的主机是否位于同一链路,客户端会检查它的SilkRoad邻居缓存,每个客户端都会向和它相连的IPv4链路发送SilkRoad维持包以表明它在该链路上的存在,所有收到这些SilkRoad维持包的客户端将包中的SilkRoad地址和IPv4地址放入它的SilkRoad邻居缓存;因此,如果某个目的SilkRoad地址位于SilkRoad邻居缓存,那么该地址对应的主机肯定位于相同的链路上,相同链路上客户端之间的通信如附图6所示。通信过程如下1、客户端1,本主机发送一个维持包,其IPv4目的地址为一保留的IPv4多播地址224.0.0.1(由IANA分配)。维持包的IPv6头部的目的IPv6地址为客户端2,目的主机的SilkRoad地址。
2、客户端2收到SilkRoad维持包后判断客户端1的IPv4地址是否属于同一链路、UDP端口是否为5188。若地址端口都得到确认,客户端2向客户端1发送一个维持包作为响应,客户端1收到该包后获得客户端2的IPv4地址(此地址是NAT域内的私有地址)。
3、接着客户端1直接向客户端2发送数据,不需要经过NAT,更不需要经过服务器。
二、通信对方另一NAT域的客户端;这种情况又可细分为3种情况1.本主机位于“cone”NAT域或“Restricted”NAT域,目的主机位于“cone”NAT域它们之间的通信可以直接进行,如附图7所示。因为“cone”NAT不会对任何源IPv4地址加以限制,所以客户端1可以直接向客户端2发送数据包来创建对方NAT转换表中的地址端口映射关系。若客户端1位于“Restricted”NAT,因为在它向客户端2发送数据后NAT1已经建立了目的地为NAT2的映射关系,所以客户端2的数据包可以通过NAT1;2.目的主机位于“Restricted”NAT域SilkRoad隧道接口采用维持包的交换来代替邻居发现的地址决议过程,使得对方所在NAT创建通信必须的地址端口映射关系,之后两个客户端之间就可以直接交换数据包,如附图8所示。具体通信过程如下●客户端1(即本主机)向客户端2(即目的主机)发送一个维持包,目的是为了在“Restricted”NAT1建立目的地为NAT2的映射关系,以便来自NAT2的数据可以通过NAT1。如果NAT1是“cone”类型,则可以省略这一步。
●接着客户端1向服务器1(即客户端1注册的服务器)发送维持包,目的IPv4地址为服务器1的公有IPv4地址,目的IPv6地址为客户端2的地址。
●服务器1收到此包后剥去IPv4头部和UDP头部,新的数据包只有一个IPv6头部。通过IPv6网将新数据包转发至服务器2(即客户端2注册的服务器)。图中虚线表示该包走的是IPv6网络。
●服务器2收到此包后从目的IPv6地址中提取出外部地址和外部端口,将此包封装在UDP中后发送给客户端2。UDP的目的端口为提取的外部端口,源端口为5188,IPv4头部的源地址为服务器2的IPv4地址,目的地址为提取的外部地址。
●客户端2收到来自服务器2的数据包后从源IPv6地址中提取出客户端1的外部地址和外部端口,并从客户端1的地址中获知它不位于“Symmetric”NAT域。然后向客户端1发送一个维持包,其中IPv4源地址为客户端2的私有地址,IPv4目的地址为提取的外部地址。UDP源端口为5188,目的端口为提取的外部端口。即使NAT1是“Restricted”类型,因为第一步中NAT1已经建立了到NAT2的映射关系,所以该包可以通过NAT1。
接下去客户端1就可以直接向客户端2发送数据包,不需要中间服务器的转发。发送之前从目的IPv6地址也就是客户端2的SilkRoad地址中提取出外部地址和外部端口,然后将数据包封装在UDP中,目的IPv4地址为提取的外部地址,源IPv4地址为本机的私有IPv4地址,目的端口为提取的外部端口,源端口为5188。客户端2收到此包后进行解封装,如果它要向客户端1发送数据包,必须执行同客户端1一样的封装过程。
3.本主机或对方位于“Symmetric”NAT域它们之间通信的数据包必须通过服务器转发,如附图9所示。具体过程如下●客户端1,本主机将要发送的数据包封装在UDP中,目的IPv4地址为服务器1的公有IPv4地址,源IPv4地址为本机的私有IPv4地址,目的端口和源端口均为5188。
●服务器1(即客户端1注册的服务器)剥去IPv4和UDP头部,通过IPv6网将没有封装的IPv6数据包转发至服务器2。图中虚线表示该包走的是IPv6网络。
●服务器2(即客户端2注册的服务器)收到此包后从目的IPv6地址中提取出外部地址和外部端口,将此包封装在UDP中然后发送给客户端2目的主机。UDP的目的端口为提取的外部端口,源端口为5188,IPv4头部的源地址为服务器2的IPv4地址,目的地址为提取的外部地址。
●客户端2收到来自服务器2的数据包后如果要向客户端1发送数据包,则将该包封装在UDP中,目的IPv4地址为服务器2的公有IPv4地址,源IPv4地址为本机的私有IPv4地址,目的端口和源端口均为5188。
三、通信对方是普通IPv6节点客户端和普通IPv6节点之间通信的数据包必须通过服务器转发,客户端和服务器之间采用“SilkRoad”隧道传送数据流,服务器和普通IPv6节点之间的数据流直接利用IPv6网络进行传送或通过IPv6-over-IPv4隧道利用IPv4网络进行传送。
客户端到普通IPv6节点的通信过程如附图10所示,具体描述如下●客户端将要发送的数据包封装在UDP中,目的IPv4地址为服务器的公有IPv4地址,源IPv4地址为本机的私有IPv4地址,目的端口和源端口均为5188。
●服务器剥去IPv4和UDP头部,通过IPv6网将没有封装的IPv6数据包转发给IPv6节点。图中虚线表示该包走的是IPv6网络。
●IPv6节点向客户端发回的数据包最终将被路由至服务器。图中虚线表示该包走的是IPv6网络。
●服务器收到此包后从目的IPv6地址中提取出外部地址和外部端口,并将该数据包封装在UDP中,其IPv4头部的源IPv4地址为服务器的公有IPv4地址,目的地址为提取的外部地址,源端口为5188,目的端口为提取的外部端口。
普通IPv6节点到客户端的通信过程,如附图11所示,具体描述如下●IPv6节点向客户端发送数据包,目的IPv6地址为客户端的SilkRoad地址。图中虚线表示该包走的是IPv6网络。
●该数据包最终被路由至服务器,服务器从目的IPv6地址中提取出外部地址和外部端口,并将该数据包封装在UDP中,其IPv4头部的源IPv4地址为服务器的公有IPv4地址,目的地址为提取的外部地址,源端口为5188,目的端口为提取的外部地址。然后将封装后的数据包发送给客户端。
●客户端将要发送的数据包封装在UDP中,目的IPv4地址为服务器的公有IPv4地址,源IPv4地址为本机的私有IPv4地址,目的端口和源端口均为5188。
●服务器剥去IPv4和UDP头部,通过IPv6网将没有封装的IPv6数据包转发给IPv6节点。图中虚线表示该包走的是IPv6网络。
权利要求
1.一种可穿越NAT的自动隧道的方法,其特征在于,提出了一种将IPv6数据包封装在UDP载荷中的隧道技术,称这种隧道为SilkRoad隧道,SilkRoad不受隧道主体上存在任意类型和任意数量的NAT的影响,可将IPv6数据包从隧道首节点传送到隧道尾节点。
2.根据权利要求1所述的方法,其特征在于,该隧道技术定义了3个通信实体,用于实现上述的方法Silkroad客户端,表示NAT域内的IPv6/IPv4双栈节点,支持Silkroad隧道功能,有一个全球单播聚类IPv6地址和一个私有IPv4地址;Silkroad服务器,在NAT域外,表示为客户端分配IPv6地址并具有路由功能的IPv6/IPv4双栈节点,支持Silkroad隧道功能,有一个公有IPv4地址,它可以有通向IPv6骨干网的路由,也可以有通向孤立IPv6网络的路由;普通IPv6节点,表示除客户端和服务器以外的其他IPv6节点。
3.根据权利要求1所述的方法,其特征在于,客户端通信时采用的IPv6地址是一种规定格式的地址,它包括64位的IPv6地址前缀和64位的接口标识符,接口标识符由伪外部端口字段、NAT类型标志位字段、Silkroad地址标志位字段和伪外部地址字段组成,各部分说明如下◆IPv6前缀IANA正式分配的全球聚类单播地址前缀或“site-local”地址前缀,不可以是“link-local”地址前缀或组播地址前缀;◆伪外部端口外部端口,即经NAT映射后的端口和0xFFFF与或后的16位数值,SilkRoad客户端启动后向服务器发送一个初始化数据包,该包经过NAT时其UDP端口被映射成一个不同的端口,我们称之为外部端口;服务器从接收到的初始化数据包中获得此端口,考虑到NAT会删除过期的映射关系,客户端或服务器,将周期性的向NAT发送数据包以维持这种映射关系,所以NAT的转换表中始终保留该映射关系,对外部端口进行与或操作的目的是为了防止某些NAT将UDP数据包载荷,即IPv6头部+IPv6载荷中的外部端口进行转化;◆NAT类型标志位长度为2位,用来表示客户端所在NAT的类型,00表示客户端位于“cone”NAT域,10表示客户端位于“Restricted”NAT域,11表示客户端位于“Symmetric”NAT域;◆Silkroad地址标志位长度为14位,设为0,表示该地址是一Silkroad地址,将该字段放在接口标识符中间的目的在于避免和其他地址冲突,因为目前只要不是随机分配的接口标识符,其中间16位都是FFFE;◆伪外部地址外部地址,即经NAT映射后的地址和0xFFFFFFFF与或后的32位数值,客户端启动后向服务器发送一个初始化数据包,该包经过NAT时其私有IPv4地址被映射成一个公有IPv4地址,称之为外部地址,服务器从接收到的初始化数据包中获得此地址,考虑到NAT会删除过期的映射关系,客户端或服务器,将周期性的向NAT发送数据包以维持这种映射关系,所以NAT的转换表中始终保留该映射关系,对外部地址进行与或操作的目的是为了防止某些NAT将UDP数据包载荷,即IPv6头部+IPv6载荷中的外部端口进行转化。
4.根据权利要求1所述的方法,其特征在于,客户端和其他IPv6节点通信时发送或接收的数据包由IPv4头部、UDP头部、IPv6头部以及IPv6载荷组成;具体说明如下·IPv4头部源IPv4地址为客户端的IPv4地址,即私有地址,目的IPv4地址为服务器的IPv4地址,如果目的地是普通IPv6节点或对方客户端经NAT映射后的外部地址,如果目的地是另一客户端;·UDP头部源端口为5188,目的端口为5188,如果目的地是普通IPv6节点或对方客户端经NAT映射后的外部端口,如果目的地是另一客户端;·IPv6头部包含源IPv6地址和目的IPv6地址,其中至少有一个是SilkRoad地址;·IPv6载荷由O或若干个IPv6扩展头部,以及上层协议数据单元,即PDU组成;为了维持NAT中的映射关系,如“cone”NAT的<源地址,源端口,目的地址,目的端口>,客户端需要周期性的向NAT发送数据包,称这种数据包为维持包,在维持包的IPv6头部中,下一跳字段设为59,表示没有IPv6载荷。
5.根据权利要求1所述的方法,其特征在于,客户端通过SilkRoad隧道接口发送或接收数据包,SilkRoad隧道接口是一个逻辑接口,它会自动将IPv6数据包封装在UDP载荷中进行发送,同样,Silkroad隧道接口接收到的数据包肯定是一个封装了IPv6报文的UDP数据包,客户端有一个缺省路由(∷/0),它将所有IPv6地址视为同一链路上的地址并使用SilkRoad隧道接口进行转发,缺省路由的下一跳地址为IPv6数据包中的目的地址,下一跳接口为SilkRoad隧道接口,服务器有通向IPv6骨干网以及各孤立IPv6网络的路由,也有通向各客户端的路由,IPv6骨干网以及各孤立IPv6网络中任何一个IPv6节点发送的数据包,只要目的地址前缀是服务器分配给客户端的地址前缀,都将被路由至服务器,以地址前缀2001*/64为例,服务器再通过去往客户端的路由将数据包转发至客户端;同样,客户端可通过服务器和IPv6骨干网以及各孤立IPv6网络中的任何一个IPv6节点实现互访。
6.据权利要求1所述的方法,其特征在于,客户端每次启动后首先向服务器注册以获得一个SilkRoad地址,这样才能和其他IPv6节点建立通信,这个过程我们称之为客户端的初始化配置;客户端的初始化配置通过向服务器发送一系列路由请求报文来完成,服务器以路由广告报文作为响应,路由广告报文中含有客户端被NAT映射后的外部地址和外部端口信息,通过此过程客户端获得一个SilkRoad地址并判断它位于何种NAT域内;客户端的初始化配置过程如下1、户端向首选的服务器,即服务器1发送一个路由请求报文,报文的源IPv6地址是一个“link-local“地址,其F字段值为00;2、服务器1收到路由请求报文后发送一个路由广告报文作为响应,因为路由请求报文显示客户端位于“cone”NAT域内,F字段设为00,所以它选择一个不同的IPv4地址作为源地址发送路由广告报文,如果客户端能收到此报文,表明客户端确实位于“cone”NAT域内;3、如果客户端没有收到此路由广告报文,它将再向服务器1发送一个路由请求报文,路由请求报文的源IPv6地址是另一个“link-local“地址,其F字段值为10;4、服务器1收到路由请求报文后发送一个路由广告报文作为响应,因为路由请求报文显示客户端位于“Restricted”NAT域内,它将以路由请求报文中的目的IPv4地址作为源IPv4地址发送路由广告报文,客户端如果收到此报文,表示它位于一个“Restricted”NAT域内;5、客户端为了明确是否位于“Symmetric”NAT域内,将再向另一个服务器,即服务器2发送路由请求报文,服务器2收到路由请求报文后发送一个路由广告报文作为响应;6、客户端收到此路由广告报文后和原先收到的路由广告报文作比较,如果报文包含的用来构造SilkRoad地址的信息相同,表示NAT的地址端口映射关系是一一对应的;如果不同,表示NAT将相同的内部地址和端口映射成了不同的外部地址和端口,映射关系是一对多,所以客户端认为它位于“Symmetric”NAT域;根据第2、4或6步收到的路由广告报文,客户端按如下构造一个SilkRoad地址·地址的前64位设置为路由广告报文中的“前缀信息选项”,如2001***/64;·接下去的16位设为路由广告报文中包含的外部端口;·接下去的2位设为00,如果客户端位于“cone”NAT后或10,如果客户端位于“Restricted”NAT后或11,如果客户端位于“Symmetric”NAT后;·接下去的14位设为0;·最后32位设为路由广告报文包含的外部地址;
7.根据权利要求1所述的方法,其特征在于,Client和其他IPv6节点的通信情况有以下3种一、通信对方是同一链路上的客户端;对于目的地是相同链路上客户端的数据包,SilkRoad隧道接口采用SilkRoad维持包的交换代替邻居发现的地址决议过程,交换SilkRoad维持包是为了获得通信对方在该链路上的IPv4地址以便可以直接进行通信;为了判断目的地址所对应的主机是否位于同一链路,客户端会检查它的SilkRoad邻居缓存,每个客户端都会向和它相连的IPv4链路发送SilkRoad维持包以表明它在该链路上的存在,所有收到这些SilkRoad维持包的客户端将包中的SilkRoad地址和IPv4地址放入它的SilkRoad邻居缓存;因此,如果某个目的SilkRoad地址位于SilkRoad邻居缓存,那么该地址对应的主机肯定位于相同的链路上,相同链路上客户端之间的通信过程如下1、客户端1,即本主机发送一个维持包,其IPv4目的地址为一保留的IPv4多播地址224.0.0.1,由IANA分配,维持包的IPv6头部的目的IPv6地址为客户端2,即目的主机的SilkRoad地址;2、客户端2收到SilkRoad维持包后判断客户端1的IPv4地址是否属于同一链路、UDP端口是否为5188,若地址端口都得到确认,客户端2向客户端1发送一个维持包作为响应,客户端1收到该包后获得客户端2的IPv4地址,此地址是NAT域内的私有地址;3、接着客户端1直接向客户端2发送数据,不需要经过NAT,更不需要经过服务器;二、通信对方另一NAT域的客户端;这种情况又可细分为3种情况1、本主机位于“cone”NAT域或“Restricted”NAT域,目的主机位于“cone”NAT域它们之间的通信可以直接进行,因为“cone”NAT不会对任何源IPv4地址加以限制,所以客户端1可以直接向客户端2发送数据包来创建对方NAT转换表中的地址端口映射关系,若客户端1位于“Restricted”NAT,因为在它向客户端2发送数据后NAT1已经建立了目的地为NAT2的映射关系,所以客户端2的数据包可以通过NAT1;2、目的主机位于“Restricted”NAT域SilkRoad隧道接口采用维持包的交换来代替邻居发现的地址决议过程,使得对方所在NAT创建通信必须的地址端口映射关系,之后两个客户端之间就可以直接交换数据包,具体通信过程如下·客户端1,即本主机向客户端2,即目的主机发送一个维持包,目的是为了在“Restricted”NAT1建立目的地为NAT2的映射关系,以便来自NAT2的数据可以通过NAT1,如果NAT1是“cone”类型,则可以省略这一步;·接着客户端1向服务器1,即客户端1注册的服务器发送维持包,目的IPv4地址为服务器1的公有IPv4地址,目的IPv6地址为客户端2的地址;·服务器1收到此包后剥去IPv4头部和UDP头部,新的数据包只有一个IPv6头部,通过IPv6网将新数据包转发至服务器2,即客户端2注册的服务器,虚线表示该包走的是IPv6网络;·服务器2收到此包后从目的IPv6地址中提取出外部地址和外部端口,将此包封装在UDP中后发送给客户端2,UDP的目的端口为提取的外部端口,源端口为5188,IPv4头部的源地址为服务器2的IPv4地址,目的地址为提取的外部地址;·客户端2收到来自服务器2的数据包后从源IPv6地址中提取出客户端1的外部地址和外部端口,并从客户端1的地址中获知它未位于“Symmetric”NAT域,然后向客户端1发送一个维持包,其中IPv4源地址为客户端2的私有地址,IPv4目的地址为提取的外部地址,UDP源端口为5188,目的端口为提取的外部端口,即使NAT1是“Restricted”类型,因为第一步中NAT1已经建立了到NAT2的映射关系,所以该包可以通过NAT1;接下去客户端1就可以直接向客户端2发送数据包,不需要中间服务器的转发,发送之前从目的IPv6地址也就是客户端2的SilkRoad地址中提取出外部地址和外部端口,然后将数据包封装在UDP中,目的IPv4地址为提取的外部地址,源IPv4地址为本机的私有IPv4地址,目的端口为提取的外部端口,源端口为5188,客户端2收到此包后进行解封装,如果它要向客户端1发送数据包,必须执行同客户端1一样的封装过程;3、本主机或目的主机位于“Symmetric”NAT域它们之间通信的数据包必须通过服务器转发,具体过程如下·客户端1,即本主机将要发送的数据包封装在UDP中,目的IPv4地址为服务器1的公有IPv4地址,源IPv4地址为本机的私有IPv4地址,目的端口和源端口均为5188;·服务器1,即客户端1注册的服务器剥去IPv4和UDP头部,通过IPv6网将没有封装的IPv6数据包转发至服务器2,虚线表示该包走的是IPv6网络;·服务器2,即客户端2注册的服务器收到此包后从目的IPv6地址中提取出外部地址和外部端口,将此包封装在UDP中然后发送给客户端2,即目的主机,UDP的目的端口为提取的外部端口,源端口为5188,IPv4头部的源地址为服务器2的IPv4地址,目的地址为提取的外部地址;·客户端2收到来自服务器2的数据包后如果要向客户端1发送数据包,则将该包封装在UDP中,目的IPv4地址为服务器2的公有IPv4地址,源IPv4地址为本机的私有IPv4地址,目的端口和源端口均为5188;三、通信对方是普通IPv6节点客户端和普通IPv6节点之间通信的数据包必须通过服务器转发,客户端和服务器之间采用“SilkRoad”隧道传送数据流,服务器和普通IPv6节点之间的数据流直接利用IPv6网络进行传送或通过IPv6-over-IPv4隧道利用IPv4网络进行传送;客户端到普通IPv6节点的通信过程如下·客户端将要发送的数据包封装在UDP中,目的IPv4地址为服务器的公有IPv4地址,源IPv4地址为本机的私有IPv4地址,目的端口和源端口均为5188;·服务器剥去IPv4和UDP头部,通过IPv6网将没有封装的IPv6数据包转发给IPv6节点,虚线表示该包走的是IPv6网络;·IPv6节点向客户端发回的数据包最终将被路由至服务器,虚线表示该包走的是IPv6网络;·服务器收到此包后从目的IPv6地址中提取出外部地址和外部端口,并将该数据包封装在UDP中,其IPv4头部的源IPv4地址为服务器的公有IPv4地址,目的地址为提取的外部地址,源端口为5188,目的端口为提取的外部端口;普通IPv6节点到客户端的通信过程如下·IPv6节点向客户端发送数据包,目的IPv6地址为客户端的SilkRoad地址,虚线表示该包走的是IPv6网络;·该数据包最终被路由至服务器,服务器从目的IPv6地址中提取出外部地址和外部端口,并将该数据包封装在UDP中,其IPv4头部的源IPv4地址为服务器的公有IPv4地址,目的地址为提取的外部地址,源端口为5188,目的端口为提取的外部地址,然后将封装后的数据包发送给客户端;·客户端将要发送的数据包封装在UDP中,目的IPv4地址为服务器的公有IPv4地址,源IPv4地址为本机的私有IPv4地址,目的端口和源端口均为5188;·服务器剥去IPv4和UDP头部,通过IPv6网将没有封装的IPv6数据包转发给IPv6节点,虚线表示该包走的是IPv6网络。
全文摘要
本发明涉及互联网技术领域,一种可穿越NAT(网络地址翻译)的自动隧道技术,也就是该隧道技术允许隧道主体存在任何类型和任意数量的NAT,它是一种新的IPv4互联网向IPv6互联网过渡时期的隧道技术。目的是为了使NAT域内的IPv6/IPv4双栈节点获得全球端到端IPv6连接。利用该隧道技术NAT域内的IPv6/IPv4双栈节点将通过中间服务器和不在NAT域内的IPv6节点进行通信,对同为NAT域内的IPv6/IPv4双栈节点之间。
文档编号H04Q3/545GK1525699SQ0315897
公开日2004年9月1日 申请日期2003年9月17日 优先权日2003年9月17日
发明者吴贤国, 刘敏, 张天乐, 石晶林, 李忠诚 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1