msn: [email protected]
来源:http://yfydz.cublog.cn
0. 概述
IPv6是下一代IP协议标准,虽然目前还都只是实验阶段,但IPv6取代IPv4是不可避免的。
1. IPv6中的“6”的由来 说法一: 4:已经被IPv4使用 5:保留用于流协议 (STP, RFC 1819 / Internet Stream Protocol Version 2),但该协议从未正式应用,下一个空闲数即为 6 说法二: 由于IPv4地址4个字节,版本号为“4”;IPv6地址是128位,即16字节,故版本号取其个位为“6” 2. IPv4与IPv6协议格式 2.1 RFC791定义的IPv4头 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ IPv4的不足 地址空间有限:32位地址只能支持42亿多个地址的空间,以目前情况看根本不够用; 安全性:本身无安全性考虑,真正的安全性需要上层协议支持,IP层不支持; 性能、QoS:自身支持不足,也需上层协议支持; 自动配置:BOOTP、DHCP等相对较烦琐; 另外IPv4头部结构复杂,参数过多,而且IPv4选项部分对系统性能和安全性都有影响。 2.2 IPv6协议 2.2.1 RFC1883定义的IPv6头 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| Prio. | Flow Label | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload Length | Next Header | Hop Limit | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Source Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Destination Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ RFC1883说明: Version: 4位协议号,值为6 Prio.: 4位数据优先级. Flow Label: 24位,流标签,主要用于QoS Payload Length: 16位,载荷长度 Next Header: 8位,下一个头,类似于IPv4的Protocol字段,但不完全相同 Hop Limit: 8位跳数限制,类似IPv4中的TTL Source Address: 128位源地址 Destination Address: 128位目的地址 RFC1883已经被RFC2460取代,主要是RFC1883中Prio字段只有4位,而IPv4中的TOS字段为8位,两者不能完全兼容。 2.2.2 RFC2460定义的IPv6头 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| Traffic Class | Flow Label | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Payload Length | Next Header | Hop Limit | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Source Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Destination Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ RFC2460格式说明: Version: 4位协议号,值为6; Traffic Class: 8位传输类别,相对1883中的4位prio能更好支持QoS,在源端或中间转发端用来区分不同类型和优先权的IPv6包,和IPv4的TOS字段一样是8位,这样有利于设计IPv4/IPv6兼容的QoS标准; Flow Label: 20位流标签,用于源端标记IPv6包顺序,供路由器特别处理,用来满足某些特殊服务,如QoS和实时信息 Payload Length: 16位负载长度; Next Header: 8位,下一个头,类似于IPv4的Protocol字段,但不完全相同 Hop Limit: 8位跳数限制,类似IPv4中的TTL Source Address: 128位源地址 Destination Address: 128位目的地址 其中Traffic Class字段在RFC 2460中未明确定义,后来在在RFC 2474中定义为: 0 1 2 3 4 5 6 7 +---+---+---+---+---+---+---+---+ | DSCP | CU | +---+---+---+---+---+---+---+---+ DSCP: differentiated services codepoint CU: currently unused 2.2.3 IPv6的扩展头类型 IPv6中取消了IP选项,对于IPv4中需要IP选项完成的功能,在IPv6中使用IPv6扩展头来实现: Hop-by-Hop Options:nh=0,选项信息 Routing:nh=43,路由信息 Fragment:nh=44,分片信息 Destination Options:nh=60,目的端要检查的特殊信息 Authentication:nh=51,AH协议头,RFC4302 Encapsulating Security Payload:nh=50,ESP协议头,RFC4303 Nh=59: No Next Header 举例:一个最完整的IPv6头包括IPv6头和各种扩展头: IPv6 header (next header=0) Hop-by-Hop Options header (next header=60) Destination Options header (next header=43) Routing header (next header=44) Fragment header (next header=51) Authentication header (next header=50) Encapsulating Security Payload header (next header=60) Destination Options header (next header=upper-layer protocol) upper-layer header 多个扩展头的使用从协议本身角度是方便性提高,但对于防火墙等设备来说来说就必须跟踪到最后一个扩展头才知道上层是什么协议,不象IPv4可以在固定位置处就能检查协议。 2.2.4 上层协议计算校验和时用到的伪IPv6头 和IPv4一样,在计算TCP、UDP等的校验和时需要用到IP头部部分信息,用到部分数据称为伪IP头,除需要的字段外其他字段值置0。 IPv6的伪头格式: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Source Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | + + | | + Destination Address + | | + + | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Upper-Layer Packet Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | zero | Next Header | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2.3 IPv6相对IPv4优点 地址范围扩大:地址范围从2^32扩大到2^128,基本可视为无限,可以不再需要NAT 地址类型强化和提高:简化了地址自动配置,设备自己的硬件地址直接对应IPv6地址,可以不用配置;增强了多播路由功能;新增“anycast”(泛播)地址类型,取消了广播类型以防止广播风暴; 头部格式简化:头部长度固定,数据项也精简,路由设备处理起来更加容易; 增强头部的扩展和选项支持:通过“next header”项将各种扩展头串起来 性能提高:使用流标签,使数据具备“流”的概念,而不仅仅是IPv4中的单独的“包”的概念; 认证和安全性提高:IPSec将不再是象IPv4那样是“突兀”地插入IP协议,而称为IP协议中自然的组成部分。 3. IPv6地址 3.1 书写格式 基本格式:X:X:X:X:X:X:X:X,X:16位数 缩写格式:对于连续的0,可以用“::”代替,但只能代替一次 兼容V4格式:X:X:X:X:X:X:a.b.c.d 3.2 IPv4到IPv6的格式转换: IPv4-compatible IPv6 address, v6的低32位地址同v4,高96位地址为0 | 80 bits | 16 | 32 bits | |0000...............0000|0000| IPv4 address | IPv4-mapped IPv6 address,v6的低32位地址同v4,33-48位为1,高80位地址为0 | 80 bits | 16 | 32 bits | |0000...............0000|FFFF| IPv4 address | 3.3 IPv6地址空间和类型 3.3.1 地址空间分配 Unspecified 00...0 (128 bits) ::/128 Loopback 00...1 (128 bits) ::1/128 Multicast 11111111 FF00::/8 Link-local unicast 1111111010 FE80::/10 Site-local unicast 1111111011 FEC0::/10 Global unicast (everything else) 3.3.2 地址类型(广播类型地址不再存在): 单播:unicast,每个设备的ID号成为地址的一部分,包括以下三类: Link local:用于单一连接,不可路由 | 10bits | 54 bits | 64 bits | |1111111010| 0 | interface ID | Site local:用于内部网络,网络外不可路由 | 10bits | 54 bits | 64 bits | |1111111011| subnet ID | interface ID | Global unicast:全局地址 | n bits | m bits | 128-n-m bits | | global routing prefix | subnet ID | interface ID | 组播:multicast, FF00::/8,v4中的广播在v6中用组播代替。 泛播:anycast,地址空间和单播地址空间相同,一个unicast地址设置到多个网络接口后就可成为anycast地址,需要指明anycast属性。泛播包只被路由到最近的具有该地址的网络接口,通常用于DNS等服务。 4. 从IPv4到IPv6升级需要修改的协议 链路层:以太网相对修改较小,IPv6协议号0x86DD,比较大的修改部分应该是为MTU发现处理;对于ATM网络可能修改量较大 ARP/RARP:需要支持v6地址到MAC的变换 网络层:ICMPv4需要升级为ICMPv6, IGMP也需要升级 传输层:需要网络层信息的所有协议都必须修改,如TCP/UDP的校验和计算都用到了IP伪头信息 应用层:所有使用IP地址信息的协议都需要修改,特别是有子连接的协议 路由协议:RIP、OSPF、…全部需要更新 文本地址表示协议:如FTP、SIP等,修改相对简单 数值地址表示协议:如DNS、DHCP、BOOTP、H.323等,修改相对复杂 用户界面:要支持IPv6地址格式 简化部分:IPSec,在IPv6中实现IPSec相对比较简单,因为在设计IPv6时就把IPSec作为一个部分考虑进去了,而设计IPv4时根本还不存在IPSec概念,IPSec是后来硬塞进IPv4中的。 5. IPv4与IPv6共存方式 V6 over V4:IPv6包封装在IPv4包中传输 V4 over V6:IPv4包封装在IPv6包中传输 对于网络中的服务器,路由交换设备,都需要支持同时IPv4、IPv6,因此需要实现双栈。 6. 实施IPv6障碍 目前实施IPv6有以下几个障碍,第一,目前没有一项应用是必须使用IPv6才能完成的,所有协议IPv4均能完成;第二,由于NAT和 CIDR的使用,使IPv4地址分配速度减慢,使得IPv6需求不是那么迫切;第三,IPv6标准的不成熟性,表现在新RFC不断废除老RFC,这样抑制了厂商的生产积极性,使得相关产品总是属于实验室产品。 7. 结论 第一,IPv4升级到IPv6是大势所趋,因为IPv4地址总会在可见时间内分配完,为了支持IPv6,需要从底层到应用层的协议进行全面修改;第二,IPv4即使在地址分配完后仍然会存在,IPv4和IPv6会共存相当长时间,单纯只支持IPv6的网络设备是没有市场的。 8. IPv6相关网站 http://www.ipv6.org http://www.6bone.net http://www.freenet6.net/ http://playground.sun.com/pub/ipng/html http://www.6ren.net http://www.ipv6forum.com http://hs247.com/ http://www.ipv6.net.cn 9. IPv6相关RFC 以下是我整理的和IPv6相关的RFC,同时也是本文的相关参考文献,括号表示新RFC取代老RFC,可看到有些协议标准的RFC甚至被废除了两次。 协议标准: IPv6: 1883(2460) Addressing Architecture: 1884(2373(3513)) testing address: 1897(2471(3701)) address format: 2073(2374(3587)) multicast address: 2375, 3307 Unicast-Prefix-based IPv6 Multicast Addresses: 3306, 3956 reserved subnet anycast: 2526 literal address in URL: 2396/2732(3986) Flow Label: 3595, 3697 Mobility: 3775, 3776 Scoped address architecture: 4007 unique local ipv6 unicast address: 4193 物理层: ipv6 over ethernet: 1972(2464) ipv6 over fddi: 2019(2467) ipv6 over token ring: 2470 ipv6 over PPP: 2472 ipv6 over NBMA: 2491 ipv6 over ATM: 2492 ipv6 over ARCnet: 2497,1201 ipv6 over frame relay: 2590 ipv6 over IEEE 1394 Networks: 3146 ipv6 over fibre channel: 3831 3G: 4215 网络传输层: neight discovery: 1970(2461), 3122 address autoconfig: 1971(2462), 3041 DHCPv6: 3315, 3633, 3646, 3736, 3898 ipv6 over ipv4: 2529 IPv6 Domains via IPv4 Clouds: 3056 ICMP6: 1885(2463) IGMP: 2236(3376) TCP/UDP: 2147(2675) tunneling:2473 DiffServ: 1455/1349(2474,3168,3260) Multicast Listener Discovery (MLD) for IPv6: 2710, 3590, 3810 Transition Mechanisms for IPv6 Hosts and Routers: 1933(2893(4213)) 应用层: SNTPv4: 2030 RIPng: 2080 MIB for ipv6: 2465, 2466 BGP-4 for ipv6: 2545 OSPF: 2328, 2740 FTP: 2428 DNS: 2535, 2874, 3152, 3226, 3363, 3364, 3596, 3901, 4033, 4034, 4035 Router renumbering: 2894 Service Location Protocol Modifications for IPv6: 3111 Radius: 3162 RSVP: 3175 SDP: 2327, 3266 MLDv2: 2710, 3810 HMIPv6: 4140 编程接口: socket interface extension: 2133 (2553 (3493) ) socket api: 2292(3542)