1、ICS 33 060 40 M33 Y目中华人民共和国通信行业标准YD厅1635-2007IPv6网络技术要求面向网络地址翻译(NA丁)用户的IPv6隧道技术Technical Requirements for IPv6 network 一一-IPv6Tunneling Technology with private network addresses through NAT devices 2007一04-16发布2007-1001实施中华人民共和国信息产业部发布YD厅1635-2007目次前言. . . . . . . . . . . .(1 . . . . .,.,.o-.E l 范围.
2、 . . . . . . . . . . . . . . . 2 规范性寻|用文件. . . . . . . . 3 定义和缩略i吾. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I . . . I . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3.1 定义.3.2 缩略语. . . . . . . 4 面向NAT用户的IPv6隧道机制4.1 NAT分类. . .
3、 . . . . . . . . . . . . . . r. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0- . . . . . 4 4.2 Teredo . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 4.3 Silkroad . . . . . . . . . . . . . . . . . . . .
4、. . . . . . . . . . . . . . . . . . . . . . . 15 I YD厅1635-2007目Ijs 本标准主要依据国内目前IPv6网络和IPv4网络的现状,并以相关JETF盯C为技术依据编写而戚。本标准是IPv4扭v6网络互通系列标准之一。该系列标准预计的结构及名称如下:1. IPv4网络向1Pv6网络过渡中的互联互通;2.基于1Pv6网络的1Pv4网络互联;3.面向网络地址翻译(NAT)用户的IPv6隧道技术要求。与之相关的IPv6协议系列标准的结构及名称目前如下:1. IPv6技术要求一-IPv6协议;2. IPv6技术要求一一支持计算机移动部分;3.
5、1Pv6技术要求一一地址,过渡及服务质量;4. IPv6元状态地址自动配置技术要求;5.基于IPv6的邻居发现协议;6. IPv6协议一致性测试方法。本标准的发布机构提请注意如下事实,声明符合本标准时,可以使用涉及4.3节中有关一种可穿越网络地址翻译的自动隧道的方法和4.3节中有关一种利用现重隧道机制穿越NAT的方法的相关专利。本标准的发布机构对于专利的范围、有效性和验证资料不提出任何看法。专利持有人已向本标准的发布机构保证,他愿意同任何申请人在合理和非歧视的条款及条件下,就使用授权许可证进行谈判。在这方面,该专利持有人的声明巳在本标准的发布机构备案。有关资料可从以下地址获得:专利持有单位名称
6、:中国科学院计算技术研究所地址:北京海淀科学院南路6号请注意除上述已经识别出的专利外,本标准的某些内容有可能涉及专利。本标准的发布机构不应承担识别这些专利的责任。本标准由中国通信标准化协会提出井归口。本标准起草单位:中国科学院计算技术研究所中国联合通信有限公司中国电信集团公司华为技术有限公司中兴通讯股份有限公司本标准主要起草人:刘敏李忠诚舒童王明会杨征张荣陈洪飞戴险峰文武II YD厅1635-2007IPv6网络技术要求一一面向网络地址翻译(NA丁)用户的IPv6隧道技术1 范围本标准规定了在IPv4网结向IPv6网络过技中出现的面向NAT用户的IPv6隧道机制。本标准适用于IPv4网络和IP
7、v6网络中位于NAT域内的IPv6/IPv4双钱主机。2 规范性引用文件下列文件中的条款通过本标准的引用而成为本标准的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本标准。然而,鼓励根据本标准达成协议的各方研究是否可使用这些文件的最新版本。凡是不注目期的引用文件,其最新版本适用于本标准。EF RFC768 ( 1980 ) 用户数据报协议(UDP)EFRFC791 (1981) IETFRFC1321 (1992) EF RFC240 1 (1999) IETFRFC2460 (1998) ffiTF即C2461(1998) ffiTF RFC2572 (
8、 1999 ) ffiTF RFC2574 ( 1999 ) ffiTF盯C2575(1999) EF RFC2663 ( 1999 ) IEF RFC3315 (2003) ffi而RFC3489(2003) IETF RFC3633 (2003) 3 定义和缩略语F协议MD5算法E协议的安全体系结构IPv6协议规范IPv6邻居发现协议简单网络管理协议的消息处理和分配SNMPv3的基于用户的安全模型SNMP的基于视图的访问控制模型E网络地址转换(NAT)的术语和考虑事宜IPv6动态主机配置协议(DHCPv6) STUN:利用UDP报文穿越NAT设备IPv6动态主机配置协议的前辍选项下列定义和
9、缩略语适用于本标准。3.1 定义地址(address ) 一个或一组接口的IP层标识。通信(communication ) 节点之间进行的任何包交换称为通信。要求在这种包交换过程中,每个节点进行交换时使用的地址保持不变,例如TCP连接或UDP请求一响应。封装(encapsulation ) 把一种协议的数据包作为内容数据,完整地放到另一协议数据包内的过程称为封装。YD汀1635-2007解封装(decapsulation ) 把封装过的数据包内的内容数据恢复成原来的协议数据包的过程称为解封装。链蹄(link ) 通信设备或媒介。节点可以通过链路在数据链路层(紧接在IP峭的下层)进行通信。例如:
10、Ethemet、PPP链路、帧中继、A币在网络以及互联网(或更高)层的隧道(如在IPv4或IPv6上的隧道)。链路层地址(Iinklayer address ) 为一个接口分配的链路层标示符。如:以太网链路的回EE802地址和ISDN链路的E.l64地址。节点(node ) 实现1Pv6的设备。数据包(packet) 由E头和有效载荷构成的数据块。网络地址转换(Network Address Translator, NAT) 本标准引用的术语网络地址转换(NAT)与盯C2663中的IPv4网络地址转换(NAT)意义相同。Teredo害户端(Teredo Client ) Teredo客户端是指
11、支持Teredo隧道接口的IPv6I IPv4现枝节点,可通过Teredot协议与其他的Teredo客户端以及IPv6Internet上的其他节点(通过Teredo中继)建立IPv6通信。Teredo服务器(Teredo Server ) Teredo B&务器是具有IPv4全局地址的IPv6/IPv4双枝节点,支持Teredo隧道接口,用于帮助Teredo客户端进行地址配置,以及协助Teredo客户端与其他的Teredo客户端或纯IPv6主机建立通信连接。Teredo服务器使用UDP3544端口侦听Teredo通信。Teredo中继(Teredo Relay ) Teredo中继是指能够在E
12、叫Internet上的Teredo客户端之间(使用Teredo隧道接口)以及Teredo客户端与纯IPv6主机之间传送数据包的IPv6!IPv4双1宝路由器,负责在整个Internet上或Internet的一个子集范围内通告Teredo服务前级的可达性。在某些情况下,Teredo中继和Teredo服务器协同工作,帮助TeD巳do客户端与其他的Teredo客户端或纯IPv6主机建立通信连接。Teredo中继使用UDP3544端口侦听Terdo通信。Teredo气泡包(Teredo Bubble ) Teredo气泡包是为建立或维持一个NAT映射而发迭的最小的IPv6包,只包含一个IPv6包头。其
13、IPv6有效载荷为null,载荷类型为5902 Teredo前摄(Teredo IPv6 Service Prefix ) 用于组建Teredo地址的特殊IPv6前缀。全局Teredo前辑(Global Teredo IPv6 Service Prefix ) 取值为2001:0000:/320 Teredo UDP端口(Teredo UDP po时Teredo&务器用于监昕Teredo报文的UDP端口,该值为35440Teredo服务端口(Teredo Service P。此)Teredo客户端发送Teredo报文的端口。Teredo发现地址(TeredoIPv4 Discove叩Addre
14、ss)用于发现同一IPv4子网中其他Teredo客户端的IPv4多播地址,其值为224.0.0.2530Silkroad害户端(Silkroad Client ) YD厅1635-2007位于NAT城内,支持Silkroad隧道接口的IPv6!IPv4双横节点,可通过Silkroad协议与其他的Silkroad客户端或者IPv6Internet上的其他节点建立IPv6通信。Silkroad接入路由器(Silkroad Access Router ) 能够通过公有IPv4地址访问IPv4Internet的IPv6IIPv4双棋路由器,用来帮助Silkroad客户端建立IPv6连接。Silkroa
15、d导航器(Silkroad Navigator ) Silkroad导航器是用来帮助Silkroad接人路由器相互路由的节点,只需能够被Silkroad接人路由器访问,可以通过IPv4或IPv6来寻址,具体方式取决于特定的ISP0 Silkroad导航器为推荐使用。Silkroad UDP端口(Silkroad UDP port) Silkroad接人路由器用于监听Silkroad报丈的UDP端口,该值为518803.2 缩畸语IETF Int巳rnetEngineering Task Force 互联网工程任务组E Internet Protocol 互联网协议IPv4 Internet P
16、rotocol Version 4 互联网协议版本4IPv6 Internet Protocol Version 6 互联网协议版本6NAT Network Address Translator 网络地址翻译RS Route Solicitation 路由请求RA Route Advertisement 路由通告SC Silkroad Client SiIkroad客户端SAR SilkroadAess Router Silkroad接人路由器SN Silkroad Navigator Silkroad导航器4 面向NAT用户的IPv6隧道机制NAT(即网络地址翻译)是解决IPv4地址不足的一
17、种技术,用来实现多个用户共用一个合法IPv4地址与外部Internet进行通信。在我国,由于IPv4地址资洒、严重不足,NAT技术应用得非常广泛。然而,传统隧道机制均无法实现NAT域内的IPv6节点与其他IPv6节点间的通信。本标准中所涉及的两种隧道技术( Teredo和Silkroad)均采用E咱也-UDP隧道,也就是通过将IPv6报文封装在IPv4的UDP1丈载荷中的方式实现NAT用户和IPv6网络的互连。其区别在于,Teredo是一种自动隧道技术,需要特殊的IPv6地址前缀。Teredo的IPv6地址中嵌有Teredo服务器的IPv4地址,以及客户端映射后的IPv4地址和端口。因此其IP
18、v6地址会随内嵌IPv4地址的改变而改变。另外,Teredo隧道不能穿越对称NAT(Symmetric NAT)。与T巳redo相比,SiIkroad是一种配置隧道技术,可为NAT用户分配固定或动态的IPv6地址,且所分配的IPv6地址没有采用固定格式的前壤,也没有嵌人NAT映射地址或映射端口等信息,可支持包含对称NAT在内的现有NAT类型。Silkroad是一种穿越NAT域建立可控隧道的方法。这对愿意为NAT域内客户提供IPv6连接的ISP来说是一种有效的方案。但在Silkroad中进行路由优化要比Teredo复杂,因为Silkroad客户端所使用的IPv4地址和UDP端口无法通过其IPv6
19、地址直接获得。3 YD厅1635-2007Teredo和Silkroad作为两种面向NAT用户的IPv6隧道机制,其适用范围不同,用户可根据需要进行选择。如巾和Silkroad隧道机制的目的是为NAT用户提供IPv6连接,其代价是增加了UDP封装的开销。所以,对于有本地IPv6接人的用户以及NAT域外的用户,不建议使用Teredo和Silkroad隧道。4.1 NAT分类NAT ( Network Address Translator,网结地址翻译)是一种把E地址从一个域映射到另一个域的方法。实现的核心是担内部网络中数据报文的地址翻译为外部合法地址,并将报文向外部网络发送;而在收到外部数据报文
20、后,再翻译为内部地址并向内部网络发迭。这有可能是因为内部地址对外网元效,也可能是因为内部地址必须对外网保密。本标准假定读者熟悉NAT设备。NAT设备能够采用许多不同的策略来实现oRFC3489将NAT分为4类:完全锥型NAT(Full Cone NAT,或简写为ConeNAT)、受锥型NAT(Restricted Cone NAT)、端口受限锥型NAT(Port Restricted Cone NAT )和对称NAT(Symmetric NAT)。Teredo可以对完全锥型NAT、受限锥型NAT、端口受限锥型NAT中的用户提供JPv6连接服务;Silkroad 可以为所有这四种NAT域中的用户
21、提供IPv6连接服务c因为TCP报文和UDP报文是仅有的两类可以通过所有常用的NAT类型的报文。而由于TCP的拥寨控制机制,利用TCP来传输IPv6报丈实时性差,故此目前穿越NAT的技术通常选用UDP报文作为承载报丈。4.2 Teredo 4.2.1 Teredo地址Teredo地址格式如下:+-+-+-t-t-+ I Prefix I Server IPv4 I Flags I Port I Client IPv4 I +-t-t-t-+-+ -Prefix: 32位的Teredo地址前缀。-Server IPv4: Teredo服务器的IPv4地址。-Flags: 16位,指示地址和NAT
22、的类型。-Port: TeredoIt务在客户端的UDP映射端口。-Client IPv4:客户端的IPv4映射地址。在此格式中,客户端的P映射端口和IPv4映射地址是隐藏的。此地址和端口的每个比特要取非,通过把16位的端口号和32位的地址分别与Ox阳FF和OxF即回回F进行按位异或运算来实现。IPv6的寻址规则指出,吁页对才以i非t问0oO开头的所有单播地址,要求用改进的EU囚1-64格式构建长64位的接口标识对应。4 。00 78 5 t-卢-t-+-+-tICzzzlzzUGlzzzzlzzzzl t-+-+-+-t 此格式中:一一UG位应设为00YD厅1635-2007一一若客户端确信
23、它位于完全锥型NAT域中,贝UC(cone)位应设为1,否则设为Oj这些值会在资格确认过程中确定不同的服务器行为(详见4.2.3.1节)以及客户端和中继对气泡包的不同处理。一一z位必须设为0,井在接收时被忽略。因此,Flags域当前有两种指定的值:若C位为0,则Flags为OxOOOO;若C位为1,贝IJFlags为0x.8000。在有些情况下,Teredo节点使用本地链路地址。这些地址包含本地链路前摄(阳80:/64)和64位标识,其构成方式与上述格式相同。本地链路地址和全局地址的区别在于全局地址中的标识必规包含金局范围的IPv4单播地址,而本地链路地址中的标识可以包括IPv4私有地址。4.
24、2.2 数据包格式在Teredo隧道机制中,IPv6数据包是封装在IPv4RF巳791的UDPRFC768数据包中进行传输的。掘和目的节点的E地址和UDP端口使用本节所指定的值。数据包分两种格式:简单封装(simple encapsulation ) 和带原始指示符的封装(巳ncapsulationwi出originindication )。简单封装时,直接把IPv6报文封装在UDP报文的载荷里面:+-+-+-+ I IPv4 I UDP I IPv6 packet I +-+-+-+ 当服务器中转来自第三方的数据包时,它可能会在UDP载荷的前几个字节中插入原始指示特(originindica
25、tion) : +-+-+-+-+ I IPv4 I UDP I Origin indication I IPv6 packet I 十-+-+-+-+原始指示特有8个字节,格式如下:+-+-+-四-+I OxOO I OxOO I Origin port # I +-+-+-甲曰-+Origin IPv4 address +-+ 原始指示符的前两个字节设为null,用来区分简单封装和带原始指示特的封装,因为简单封装的前4位包含IPv6协议的标识。接下来的16位包含隐藏的源端口号(网络字节序)。其后32位包含隐藏的掘IPv4地址(网络字节序)。此格式中,客户端的源IPv4地址和端口的每个比特都
26、要取非,这里也是通过把16位的端口号和32位的地址分别与OxF即F和OxFFFFFFFF进行按位异或操作来实现的。在Teredo客户端和其服务器交换路由请求(Route Solicitation, RS )和路由通告(RouteAdvertisement , RA)消息时,数据包可包含验证指示符:十冉-+-+-一由一-白-+-+I IPv4 I UDP I Authentication I IPv6 packet I 十-+-+-一-+-+验证指示符的长度可变,包括客户端标识(ClientIdentifier )、验证值(AuthenticationValue)、当前值(Nonce)和确认字节
27、(ConfrrmationByte) ,具体格式如下:5 YD厅1635-2007+-+-畸-+-俨_.句-+-+I OxOO 1 OxOl I ID-len I AU-len I +-十啕-+-十-+I Client identifier (ID-len t-一-十-伊-四-tI octets) I Authentication I t-t-卢-+-+I value (AU-len octets) I Nonce I +-胃-+-+I value (8 octets) +-帽-+-+I Conf. I +-+-+ 验证指示特的第1个字节为null,第2个字节为1,这样就可以与IPv6报文和原
28、始指示符区分开。第3个字节指定客户端标识的长度(以字节为单位);第4个字节指定验证值的长度(以字节为单位)。验证值后是8字节的当前值和确认字节。如果服务器不要求明确的客户端认证,ID-len和AU扣n可设为null。验证指示符和原始指示符可以组装在一起。在这种情况下,验证指示符必须是UDP载荷的第1个元素:+-+-+-由而-+-白白-+-自由-+I IPv4 I UDP I Authentication I Origin indication I IPv6 packet I +-t-白白-+-自由-+-t-+4.2.3 Teredo窑户端的描述在使用Teredo服务之前,客户端必须配置:服务器
29、的IPv4地址和该服务器的第二IPv4地址(secondary IPv4 address )。如果要求安全检测,客户端必须配置:(1)客户端标识;(2)与服务器的共享密钥;( 3 )与服务器共亭的认证算法。为避免在端口预留(po此conserving)的NAT域中进行操作所出现的问题,在同一NA域中的不同客户端应使用不同的发送端口。这可以显示地设定;若未设定,则随机选取服务端口。客户端要维护以下反映Teredo服务状态的变量:(1) Te时o连接状态;(2) Teredo服务喘口对应的时才地址和端口号;(3) Teredo服务端口对应的Teredo前缀;(4)根据前缀生成的Ter时oIPv6地
30、址;(5)本地链路地址;(6)与Teredo服务器最近一次交互的日期和时间j(7) Teredo刷新间隔;(8)随机刷新间隔;(9) Teredo对等节点列表。在发送数据包之前,客户端必须完成Teredo的资格确认过程,确定Teredo的连接状态、映射地址和端口以及Teredo前辍。客户端还应完成完全锥型NAT的确认过程,确定NAT的状态,此过程有可能改变前辍值。如果资格确认是成功的,另么客户端可以用TeredoH务端口发送和接收IPv6包。上述过程使用对等节点列表。对每个节点而言,该列表包括:(1)节点的IPv6地址j(2)节点的IPv4映射地址和UDP映射端口j( 3 )映射地址状态,即可
31、信或不可信j(4)最近一次向此节点发迭的nonce值i(5 )最近一次从此节点接收报文的日期和时间;( 6) :最近一次向此节点发送报文的日期和时间;(7 )发送给该节点的气泡包数。6 YD厅1635-2007节点列表使IPv6包的传输能够使用直接路径。客户端应该实现列表的管理策略,例如:删除最近最少使用的表项。客户端应保证列表具有足够的长度,以避免不必要的气泡包交换。客户端必须定期完成维护过程,以保证Teredo服务端口的可用性。是否使用比过程依赖于与Teredo服务器最近一次交互的时间距离当前时间的时间间隔。刷新过程使用Teredo刷新间隔参数,此参数初值设为30秒。随机刷新间隔是在刷新间
32、隔的75%到100%之间选取一个随机数。Teredo客户端可以使用4.2.3.6节中定义的可选的本地客户端发现过程来避免位于相同NAT域中的站点间的三角路由。当NAT不能把某一内部主机发送的包转发给另一内部主机的映射地址和端口时,使用此过程还可以增强连通性。4.2.3.1 资格确认过程资格确认过程的目的是确定本地IPv4连接的状态和本地Teredo接口的Teredo前壤。此过程从initial 状态开始,若资格确认成功,则在q ualified 状态结束,否则在of-line状态结束。1 Initia1 1 1 Set ConeBit= 1 1 +-帽-+嗣瞩目-+1ConeBit=l? 1-
33、一+1 Response -民臼-/1 No v v 1一一一一一一一-Yes 1一一-一一1 ConeBit = 1? 1-一10汪lineI -I 1 -/ No I v I 1-饵-四-四1 IConeNATI +-+-+ -1 I New Server I +-+-+ +-+-+ I Start 1 1S严nmettcNAT 1 -/ 崎-1IY 飞J/- 1 Restricted Cone NAT 1 -/ 圄1资格确认过程7 YD厅1635-2007起韧,Teredo连接状态被设为initi剖。当接口初始化后,正如RFC2461中所定义的,系统首先发送路由请求消息RS来执行起始操作
34、。客户端选取一个本地链路地址并把它作为消息的IPv6掘地址,地址中的C位设为1(参见第4.2.1部分中的地址格式)0 RS的IPv6目的地址是所有路由器多播地址(al1-routers multicast address)。数据包将通过UDP报文从Teredo服务端口友送到Teredo&务器的IPv4地址和TeredoUDP端口。此后,连接状态将变为飞st削削n吨g在飞st削i讪ngi,状态,客户端监听由Teredo服务器发送的路由通告。如果在时间T内,未收到响应,客户端会重新发送路由请求消息。如果重复N次均元回应,那么客户端就认为自己不在完全锥型NAT域中,因此把C位设为0,井重复此过程。如
35、果N次超时和章发后仍没有回应,则客户端就断定自身不能使用P,Teredo服务不可用;并把状态设为ofLHne。根据盯C2461,默认的超时时间T为4秒,最大重复数N=3o如果收到响应,那么客户端检查响应中是否包含原始指示符和在RFC2461中定义的有效的队,检查IPv6目的地址是否与RS中的本地链路地址相同,检查队是否包含前辍信息选项。此前缀应是有效的TeredO前缀:前32位应包含全局Teredo前缀,紧接着的32位应包含Teredo服务器的IPv4地址。在这种情况下,客户端将从原始指示特中获知Teredo映射地址和Teredo映射端口。队的IPv6源地址是Teredo服务器的本地服务器地址
36、(link-lal server address )。若响应不是有效的队,将直接丢弃。如果客户端收到一个队,并且这个队的JPv6目的地址中的C位为1,则该客户端位于完全锥型NAT域中,并完全符合资格确认的要求。若所收到的拙的C位为0,则该客户端无法知道本地NAT是受阳AT还是对称NATo此时客户端选用服务器的第二IPv4地址,并重复此过程,其中C位仍设为0。如果客户端收不到响应,那么可探知此服务不可用。如果客户端收到响应,那么它将把第2次响应中的映射地址和映射端口与第1次收到的值进行比较。若值不同,则客户端位于对称NAT域中,不能使用Teredo服务。若值相同,则客户端位于端口受限锥型NAT或
37、受限锥型NAT中,可以使用Teredo&务(对受限锥型NAT和端口受限锥型NAT,Teredo的操作相同o) 如果客户端符合资格确认的要求,那么它将使用从队中获知的Teredo前缀,以及原始指示符中的隐藏UDP映射端口和IPv4脚地址来创建TeredoIPv6地址。若客户端位于完全锥型NAT域内,C位设为1,否则为0。此后,客户端便可以开始使用Teredo服务。4.2.3.2 挝据包的接收Teredo客户端从Teredo接口接收数据包o包接收的过程不仅包括接收数据包,而且还要维护与Teredo服务器的最新交互日期和时间,以及当前节点列表。当从Y巳redo服务端口收到UDP包时,Teredo客户
38、端根据4.2.2节定义的包格式检查它的编码格式,判断其中是只包含有效的IPv6包,还是有效的原始指示特和IPv6包的组合。相关报文可能会通过验证指示符来进行安全防护。如果数据包不符合要求,就会被直接丢弃。如果IPv6包遵循RFC2460,则被认为是有效的:应有协议标识符指示是IPv6包,载荷长度应与封装它的UDP报文长度相一致。此外,客户端应检测该包的IPv6目的地址是否与其Teredo地址相对应o然后,T巳redo客户端检查所收包的IPv4掘地址和UDP端口。如果这些值与服务器的IPv4地址和Teredo端口相匹配,那么客户端把与Teredo服务器交互的最新日期和时间更新为当前日;朗和时间。
39、如果出现原始指示特,客户端应进行4.2.3.7节描述的直接IPv6连接测试。如果IPv4源地址和UDP端口与服务器的IPv4地址和Teredo端口不同,那么客户端检查包的IPv6草地址:8 YD厅1635-2007( 1 )如果可信的对等节点列表中有该IPv6、源地址对应的表项,那么客户端把表项中的IPv4映射地址和映射端口与数据包的源IPv4地址和游、端口比较。如果值匹配,那么该包被接收;同时更新最近一次从对等节点接收报文的日期和时间。(2 )如果不可信的对等节点列表中有IPv6掘地址对应的表项,那么客户端查看诙数据包是否是ICMPv6 echo rep1y 0在此情况下,若响应中的IC阳v
40、6数据与对等节点表项中所存的nonce值相匹配,则接收此包,并把表项的状态改为可信。表项中的IPv4映射地址和映射端口应设为所收包的源IPv4地址和源端口,并且应更新最近一次从对等节点接收报文的日期和时间。( 3 )如果游lIPv6地址是Teredo地址,那么客户端把源IPv6地址中隐藏的IPv4映射地址和映射端口与数据包的源IPv4地址和拥端口进行比较。如果匹配,那么客户端在对等节点列表中为该IPv6源地址创建一个对等节点表项;如果表项已经存在,那么只需更新表项。表项中IPv4映射地址和映射端口应设为所收包的相应值,并把状态设为可信。如果这个表项是新创建的,那么应把最近一次向此节点发送报文的
41、日期和时间设为当前时刻的30秒之前,井把气炮包数设为0。若数据包为气泪包,则处理后即可丢弃;否则数据包应被接收。在这两种情况下,客户端都将把队列中等待此目的地址的数据包移出队列井进行转发。(4)如果收到此包的IPv4地址是Teredo发现地址(TeredoIPv4 Discovery Address) , IPv6源地址是有效的T巳redo地址,井且目的地址是所有节点多播地址(al1 nodes on link multicast address) ,那么该数据包应该被当作本地发现气泡包(1al discovery bubble )。如果掘地址不存在本地表项,那么就创建一个表项,但要把状态设为
42、不可信。客户端应该向此气也包的IPv4源地址和端口回复单播的Teredo气泡包,并把气泡包的IPv6源地址设为本地的Terdo地址,把气泡包的IPv6目的地址设为所收气泡包的lPv6掘地址。(未实现可选的本地发现过程的客户端将不能处理本地发现气泡包)。( 5 )如果IPv6源地址是Teredo地址并且源地址中的IPv4映射地址和映射端口与数据包的IPv4裸地址和掘端口不匹配,那么客户端会查看此IPv6地址是否存在本地表项。如果存在,并且该表项中的本地IPv4地址和本地端口与数据包的IPv4掘地址和掘端口匹配,那么客户端更新本地表项,将其状态设为可信若数据包为气泡包,则处理后即可丢弃,否则应接收
43、。在这两种情况下,客户端都将把队列中等待此目的地址的数据包移出队列并进行转发。(6 )在其他情况下,数据包可以被接收,但客户端应该意识到可能存在惊地址欺骗。在数据包处理前,客户端应进行4.2.3.7节所述的直接llv6连接测试。无论IPv4源地址和UP源端口是什么,收到IPv6包的客户端都可以向该目标发送Teredo气抱包,参见4.2.3.5节。4.2.3.3 数据包的发送当Teredo客户端从Teredo接口发送数据包时,它会检削IPv6目的地址。客户端首先检查当前Teredo对等节点列表中是否有此lPv6地址对应的表项,以及此表项是否仍然有效:如果此表项(本地/非本地对等节点)对应的最近一
44、次接收日期和时间距当前时间在30秒之内,那么此表项有蚊。(只有在客户端使用4.2.3.6中所述的本地客户端发现过程的情况下,本地对等节点表项才存在。)然后,客户端进行以下操作:( 1 )如果在对等节点列表中,有此IPv6地址对应的表项并且该表项状态为可信,那么应该利用UDP封装把IPv6包发送到表项中指定的IPv4地址和UDP端口G客户端更新对等节点表项中的最近发送日期和时间。9 YD厅1635-2007(2)如果目的地址不是Teredo地址,那么数据包进人队列,并且客户端进行4.2.3.7节中所述的直接IPv6连接测试o如果此过程成功,那么数据包出队并转发。如果在2秒内,直接IPv6连接测试
45、未完成,应该重复此过程,丑最多重复3次。(3)如果目的地址是本地对等节点的Teredo地址(即在最近600秒内收到过该Ter叫。地址发来的本地发现气泡包),那么数据包进人队列。客户端向表项中指定的本地IPv4地址和本地端口发送一个单播Teredo气泡包,并向Teredo发现地址发送一个本地,Teredo气泡包。(4)如果目的地址是Teredo地址并且它的C位为1,那么可以从IPv6地址中抽取出IPv4映射地址和UDP映射端口,把IPv6包封装在UDP中发向该地址。(5):如果目的地址是Teredo地址,并且C位为0,那么数据包进入队列。如果客户端位于非完全锥型NAT域中,它就向目的地址的IPv4映射地址和映射端口,发送直接气泡包。在任何情况下,客户端都将通过