2024年2月19日发(作者:)

IPv6简介

1. 认识IPv6地址

对于128位的IPv6地址,考虑到IPv6地址的长度是原来的四倍,RFC1884规定的标准语法建议把IPv6地址的128位(16个字节)写成8个16位的无符号整数,每个整数用四个十六进制位表示,这些数之间用冒号(:)分开,例如:3ffe:3201:1401:1:280:c8ff:fe4d:db39

为了简化其表示法, rfc2373提出每段中前面的0可以省略,连续的0可省略为"::",但只能出现一次.例如:

1080:0:0:0:8:800: 200C : 417A 可简写为 1080::8:800: 200C : 417A

FF01:0:0:0:0:0:0:101 可简写为 FF01::101

0:0:0:0:0:0:0:1 可简写为 ::1

0:0:0:0:0:0:0:0 可简写为 ::

类似于 IPv4中的CDIR表示法,IPv6用前缀来表示网络地址空间,比如:

2001:251:e000::/48 表示前缀为48位的地址空间,其后的80位可分配给网络中的主机,共有2的80次方个地址。

2. IPv6地址作用域和地址分类

IPv6地址指定给接口,一个接口可以指定多个地址。

2.1 IPv6地址作用域

每一个Ipv6地址都属于且只属于一个对应于其地址范围的区域。例如,可聚合的全球单播地址(Aggregatable Global Unicast Addresses)地址范围就是全球;链路本地地址(Link-Local Addresses)的地址范围就是由一条特定的网络链路和连接到这条链路的多个接口组成的区域。这样,地址的唯一性只能在其范围区域内的到保证。

*

link local地址 本链路有效

*

site local地址 本区域(站点)内有效,一个site通常是个校园网

*

global地址 全球有效,即可汇聚全球单播地址

2.2 IPv6地址分类

在RFC1884中指出了三种类型的IPv6地址,他们分别占用不同的地址空间:

* unicast 单播(单点传送)地址 :这种类型的地址是单个接口的地址。发送到一个单点传送地址的信息包只会送到地址为这个地址的接口。

* anycast 任播(任意点传送)地址 :这种类型的地址是一组接口的地址,发送到一个任意点传送地址的信息包只会发送到这组地址中的一个(根据路由距离的远近来选择)

* multicast 组播(多点传送)地址 :这种类型的地址是一组接口的地址,发送到一个多点传送地址的信息包会发送到属于这个组的全部接口。

其中单播地址又包括:全局可聚集的单播地址,站点本地地址和链路本地地址。

3.常见的IPv6地址及其前缀

• ::/128 即0:0:0:0:0:0:0:0,只能作为尚未获得正式地址的主机的源地址,不能作为目的地址,不能分配给真实的网络接口。

• ::1/128 即0:0:0:0:0:0:0:1,回环地址,相当于IPv4中的localhost(127.0.0.1),ping locahost可得到此地址。

• 2001::/16 全球可聚合地址,由 IANA 按地域和ISP进行分配,是最常用的IPv6地址,属于单播地址。

• 2002::/16 6 to 4 地址,用于6to4自动构造隧道技术的地址,属于单播地址。

• 3ffe::/16 早期开始的IPv6 6bone试验网 地址,属于单播地址。

• fe80::/10 (1111 1110 10)本地链路地址,用于单一链路,适用于自动配置、邻机发现等,路由器不转发以fe80开头的地址。

• fec0::/10 (1111 1110 11)站点-本地单播地址

• ff00::/8 (1111 1111) 组播地址。

• ::A.B.C.D 兼容IPv4的IPv6地址,其中代表IPv4地址。自动将IPv6包以隧道方式在IPv4网络中传送的IPv4/IPv6节点将使用这些地址。

• ::FFFF:A.B.C.D 是IPv4映射过来的IPv6地址,其中代表IPv4地址,例如 ::ffff:202.120.2.30 ,它是在不支持IPv6的网上用于表示IPv4节点。

4. IPv4和IPv6地址对应关系和区别

IPv4地址

组播地址( 224.0.0.0/4)

广播地址

未指定地址为 0.0.0 .0

回路地址为 127.0.0.1

公用 IP地址

私有地址( 10.0.0 .0/8、172.16.0.0/12和192.168.0.0/16)

Microsoft自动专用IP寻址自动配置的地址(169.254.0.0/16)

表达方式:点分十进制 表达方式:冒号十六进制式(取消前置零、零压缩)

子网掩码表示:以点阵十进制表示法或前缀长度表示子网掩码表示:仅使用前缀长度表示法法( CIDR) ( CIDR)

本地链路地址( FE80::/64)

IPv6地址

IPv6组播地址(FF00::/8)

无,只有任播( anycast)地址

未指定地址为 ::

回路地址为 ::1

可汇聚全球单播地址

本地站点地址( FEC0::/48)

5. Pv6地址结构

struct sockaddr_in6

{

u_char sin6_len;

u_char sin6_family; //协议族

u_int16_t sin6_port; //端口号

u_int32_t sin6_flowinfo; //设置流标记

struct in6_addr sin6_addr; //地址

u_int32_t sin6_scope_id; //设置IPv6地址作用范围,是可聚集的全球化地址,还是本地站地址,还是链路地址

}

struct in6_addr

{

u_int8_t __u6_addr8[16];

}

in6addr_any表示本地任意地址.

sin6_flowinfo和sin6_scope_id数据成员。在数据成员sin6_flowinfo中将包含IPV6报头中的通信流类别字段和流标签字段。在XP和 SERVER2003系统中不支持sin6_flowinfo数据成员。在数据成员sin6_scope_id中包含了范围ID,它用于标识一系列的接口,这些接口与地址字段中的地址相对应。

6. 从IPv4到IPv6的过渡策略过渡技术的概述与现状

6.1过渡技术

目前解决过渡问题基本技术主要有三种:双协议栈(RFC 2893 obsolete RFC1933)、隧道技术(RFC 2893)、NAT-PT(RFC 2766)。

(1) 双协议栈 ( Dual Stack)

采用该技术的节点上同时运行IPv4和IPv6两套协议栈。这是使IPv6节点保持与纯IPv4节点兼容最直接的方式,针对的对象是通信端节点(包括主机、路由器)。这种方式对IPv4和IPv6提供了完全的兼容,但是对于IP地址耗尽的问题却没有任何帮助。

(2) 隧道技术 ( Tunnel)

隧道技术提供了一种以现有IPv4路由体系来传递IPv6数据的方法:将IPv6的分组作为无结构意义的数据,封装在IPv4数据报中,被IPv4网络传输。根据建立方式的不同,隧道可以分成两类:(手工)配置的隧道和自动配置的隧道。隧道技术巧妙地利用了现有的IPv4网络,它的意义在于提供了一种使IPv6的节点之间能够在过渡期间通信的方法,但它并不能解决IPv6节点与IPv4节点之间相互通信的问题。

(3) 网关转换(NAT-PT)

转换网关除了要进行IPv4地址和IPv6地址转换,还要包括协议并翻译。转换网关作为通信的中间设备,可在IPv4和IPv6网络之间转换IP报头的地址,同时根据协议不同对分组做相应的语义翻译,从而使纯IPv4和纯IPv6站点之间能够透明通信。

6.2 IPv6与IPv6之间的通信

(1) 手工配置隧道 ( Configured Tunnel)

(2)

自动配置的隧道 ( Auto-configured Tunnel )

(3)

隧道中介(Tunnel Broker)

(4)

6 over 4

6 over 4是一种点到点、点到路由和路由到点的自动隧道技术,它被用作通过Ipv4内部

网的Ipv6节点之间的单点或多点连接。这种隧道端点的IPv4地址采用邻居发现的方法确定。

6.3 IPv6/IPv4通信

(1) Dual Stack Model (双栈模型 )

(2) Limited Dual Stack Model (限制型双栈模型)

(3) SIIT ( Stateless IP/ ICMP Translation,无状态IP/ICMP 转换)

(4) NAT-PT (Network Address Translation - Protocol Translation,网络地址―协议转换)

(5) BIA ( Bump-In-the-API, Internet Draft )