-----关注IT小技术,分享更多IT小技术!

ipv6主要变化(IPV6详细讲解)(1)

01 IPv6介绍

IPv6是英文“Internet Protocol Version 6”(互联网协议第6版)的缩写,是互联网工程任务组(IETF)设计的用于替代IPv4的下一代IP协议。

为什么要使用IPv6呢?

IPv4地址资源紧张限制了IP技术应用的进一步发展。而移动和宽带技术的发展要求更多的IP地址,IPv6能从根本上解决这个问题。

Pv4地址资源紧张直接限制了IP技术应用的进一步发展,虽然CIDR,NAT,DHCP等技术只能暂时缓解IPv4地址紧张,但无法从数量上根本解决地址问题。

IPv6数量

要说IPv6是多少个地址,IPv6地址空间非常巨大,有夸张的说法是:可以做到地球上的每一粒沙子都有一个IP地址。IPv6的地址数量几乎无限的地址空间(地址长度由32bits增加到128bits )。

IPv6的地址数量为340万亿万亿万亿个地址,现在知道IPv6的强大了吧。

那谁来推动从IPv4迁移到IPv6呢?

主要是由政府、市场来推动。随着技术的进一步发展,Internet上的节点不再单纯是计算机了,将包括PDA、移动电话、各种各样的终端,甚至包括冰箱、电视等家用电器,这些备都需要一个全球单播地址,以连接到Internet中。

全新的地址配置方式

为了简化主机地址配置,IPv6除了支持手工地址配置和有状态自动地址配置(利用专用的地址分配服务器动态分配地址)外,还支持一种无状态地址配置技术。在无状态地址配置中,网络上的主机能自动给自己配置IPv6地址。在同一链路上,所有主机不用人工干预就可以通讯。

IPv6的特点

1、简单:简化固定的基本报文头格式,提高处理效率

2、充足的地址空间

3、层次化的地址结构

4、可扩展:引入灵活的扩展报头,易扩展

5、即插即用:地址配置简化,可以实现自动配置

6、安全:以IPSec作为认证与加密扩展头,提供端到端安全

7、支持Qos:新增流标记字段Flow Label

8、增强的邻居发现机制

9、移动:Mobile IPv6

02 IPv6地址结构与规范

IPv6地址结构

IPv6地址 = 前缀 接口标识

前缀:相当于v4地址中的网络ID

接口标识:相当于v4地址中的主机ID

2001:A304:6101:1::E0:F726:4E58

ipv6主要变化(IPV6详细讲解)(2)

类似于IPv4地址,IPv6地址的结构也是前缀加上一个特定的标识。在IPv4中是主机标识,而在IPv6中就是接口标识。

IPv6前缀

顾名思义,地址前缀就是在地址的最前面那段数字。当然也属于128bits地址空间范围之中。这部分或者有固定的值,或者是路由或子网的标识。

IPv6接口ID

IPv6的地址除了前缀以外,还包括接口ID,那么接口ID是如何形成的呢?目前有三种方式可以产生IPv6接口ID。

1、由IEEE EUI-64规范自动生成

2、设备随机生成

有时候设备也可以采用随机生成的方法产生一个接口ID,目前Windows XP支持该方式。

3、手动配置

顾名思义,手动配置就是人为指定接口ID来实现。建议在服务器和重要网络设备上配置

EUI-64规范

将48bits 的MAC地址转化为64bits 的接口ID

MAC唯一,所以接口ID也唯一

IEEE EUI-64规范

接口ID的典型长度是64bits,IEEE EUI-64规范给出了一个由IEEE 48bits MAC地址自动生成64bits Interface ID的方法。

MAC地址格式中c bit表示厂商ID,d bit 表示厂商编号ID,“0”bit 代表全局/本地位,表示全球有效。g表示其是表示单个主机还是某个组。

ipv6主要变化(IPV6详细讲解)(3)

具体的转换算法为:将上述的0转换为1,在c和d之间插入两个字节:FFFE,结果为IPv6接口ID。

这种由MAC地址产生IPv6地址接口ID的方法可以减少配置的工作量,尤其是当采用无状态地址自动配置时,只需要获取一个IPv6前缀就可以与接口ID形成IPv6地址。

使用这种方式最大的缺点就是某些恶意者可以通过二层MAC推算出三层IPv6地址。

03 IPv6地址表示方法

完整的IPv6地址格式是IPv6地址加上前缀长度来表示

首选格式(RFC2373)

用十六进制表示,如: FE08:….

4个数字一组(16bits),中间用 “ : ” 隔开,如: 2001:12FC:….

地址前缀长度用“/xx”来表示

例如:2001:0410:0000:0001:0000:0000:0000:45ff/64

IPv6的128位地址是按照每16bits 划分为一段,每段被转换为一个4位十六进制数,并用冒号隔开。这种表示方法叫冒号十六进制表示法。在首选格式后面加上前缀长度就是一个完整的IPv6地址格式。

压缩格式

压缩格式(RFC2373)

若以零开头可以省略,连续全零的组可用“::”表示,如: 1:2::ACDE:….

一个地址中::只能出现一次

地址前缀长度用“/xx”来表示

例如:2001:410:0:1::45ff/64

2001:410::1::45ff/64是错误的表示方法

RFC2373中规定:当一个或多个连续的16bits 为0字符时,为了缩短地址长度,用::(两个冒号)表示,但一个IPv6地址中只允许一个::(如果出现超过一个的::,就无法判断每个::到底省略了多少个全0段);没有意义的0可以省略掉。

对于首选格式地址:2001:0410:0000:0001:0000:0000:0000:45ff

又可以表示为:2001:410:0:1::45ff

根据这个规则下列地址是非法的(应用了多个::):

::AAAA::1

3ffe::1010:2A2A::1

注意:使用压缩表示时,不能将一个段内的有效的0也压缩掉。例如,不能把FF02:30:0:0:0:0:0:5压缩表示成FF02:3::5,而应该表示为FF02:30::5。

在压缩格式表示的IPv6地址后面加上前缀长度就是一个完整的IPv6地址:

2001:410:0:1::45ff / 64

内嵌IPv4地址格式

内嵌IPv4地址的表示方法(RFC2373)

在有些特定场合中使用的IPv6地址中必须包括某些IPv4的地址,例如IPv4兼容IPv6隧道中的地址

IPv6地址的其它部分(不包括IPv4地址的部分)可以采用首选或者压缩格式

IPv6地址中内嵌的IPv4地址采用以前IPv4的十进制表示方法

地址前缀长度用“/xx”来表示

例如:0:0:0:0:0:0:166.168.1.2/64

例如:::166.168.1.2/64

这其实是过渡机制中使用的一种特殊表示方法。关于过渡机制。

在这种表示方法中,IPv6地址的第一部分使用十六进制表示,而IPv4地址部分是十进制格式。

有两种内嵌IPv4地址的IPv6地址。

下面是这种表示方法的示例:

0:0:0:0:0:0:192.168.1.2或者::192.168.1.2

0:0:0:0:0:FFFF:192.168.1.2或者::FFFF:192.168.1.2

在内嵌IPv4地址格式后面加上前缀长度就是完整的IPv6地址格式:

0:0:0:0:0:0:192.168.1.2 / 64 或者 ::192.168.1.2 / 64

最后需要指出的是,RFC2373已经被新的RFC3513替代,不过其中关于地址各式的定义,没有大的变化。

该地址可以按照一种混合方式表达,即X : X : X : X : X : X : d . d . d . d,其中X表示一个1 6位整数,

而d表示一个8位十进制整数。例如,地址

0 : 0 : 0 : 0 : 0 : 0 : 1 0 . 0 . 0 . 1

04 IPv6地址分类

单播地址(Unicast Address)

标识一个接口,目的为单播地址的报文会被送到被标识的接口

组播地址(Multicast Address)

标识多个接口,目的为组播地址的报文会被送到被标识的所有接口

任播地址(Anycast Address)

标识多个接口,目的为任播地址的报文会被送到最近的一个被标识接口,最近节点是由路由协议来定义的

任播地址与单播地址使用同一个地址空间

IPv6单播地址分类(RFC3513)

未指定地址:全0地址 ::

回环地址:::1

全球单播地址 例2001:A304:6101:1::E0:F726:4E58

内嵌IPv4地址的IPv6地址 例::10.153.70.200

链路本地地址 例FE80::E0:F726:4E58

站点本地地址 例FEC0::E0:F726:4E58

未指定地址

未指定地址

全0,表示为 ::/128

仅用于接口没有分配地址时作为源地址

在重复地址检测中出现

含有未指定地址的包不会被转发

环回地址

环回地址

表示为 ::1/128

表示自己,如同IPv4中的127.0.0.1

全球单播地址

全球单播地址

格式

ipv6主要变化(IPV6详细讲解)(4)

已分配的全球路由前缀

2001::/16 IPv6 Internet

2002::/16 6to4

2003::/16-3ffd::/16 未指定

3ffe::/16 6bone

内嵌IPv4地址的地址

内嵌IPv4地址的IPv6地址

IPv4兼容IPv6地址:用于IPv4兼容IPv6自动隧道

ipv6主要变化(IPV6详细讲解)(5)

IPv4映射IPv6地址:用于IPv6表示IPv4地址

ipv6主要变化(IPV6详细讲解)(6)

当需要将IPv4单播地址与IPv6全球单播地址建立联系的时候一般使用两种地址,一种是IPv4兼容IPv6地址,另一种是IPv4映射IPv6地址。

IPv6组播地址

ipv6主要变化(IPV6详细讲解)(7)

Flags 永久标志

0000:永久多播地址

0001:临时多播地址

(注:前3bits 保留为0)

Scope 应用范围

0001:本地接口范围,单个接口范围有效,仅用于Loopback

0010:本地链路范围

0100:本地管理范围,管理员配置的

0101:本地站点范围

1000:本地组织范围,属于同一个组织的多个站点范围

1110:全局范围

Group ID

组播组ID

IPv6的组播与IPv4相同,也就是发往组播目的地址的报文会被发送到该组播地址代表的一组接口。

在IPv4中,组播地址的最高三bits 设为111。在IPv6网络中,组播地址也有特定的前缀来标识,其最高位前8bits 为1。

标志(Flags)字段有4个bits ,目前只使用了最后一个bit(前三bits 必须置0),当该bit值为0时,表示当前的组播地址是由IANA所分配的一个永久分配地址;当该值为1时,表示当前的组播地址是一个临时组播地址(非永久分配地址)。

范围(Scope)用来限制组播数据流在网络中发送的范围。该字段占有4bits 。RFC3513是这样定义该字段的:

0:预留

1:节点本地范围,单个接口有效,仅用于Loopback通讯

2:链路本地范围

4:管理本地范围,由管理员配置

5:站点本地范围

8:组织本地范围,属于组织的多个站点

E:全球范围

F:预留

其它的值暂时没有定义。

从这里我们就可以推断出FF02::2是一个链路本地范围的组播地址,而FF05::2是一个站点本地范围的组播地址。

最重要的字段要属于最后的组ID(Group-ID)字段了。该字段长度为112bits ,用以标识组播组,我们知道112bits 最多可以生成2的112次方个组ID。目前,RFC2373并没有将所有的112bits 都定义成组标识,而是建议仅使用该112bits 的最低32bits 组ID,将剩余的80bits 都置0。这样可以每个组ID都映射到一个唯一的以太网组播MAC地址(参见RFC2464)

预定义的组播组

Node-local

所有节点的组播地址: FF01:0:0:0:0:0:0:1

所有路由器的组播地址:FF01:0:0:0:0:0:0:2

Link-local

所有节点的组播地址: FF02:0:0:0:0:0:0:1

所有路由器的组播地址: FF02:0:0:0:0:0:0:2

Solicited-Node组播地址:FF02:0:0:0:0:1:FFXX:XXXX

所有OSPF路由器组播地址: FF02:0:0:0:0:0:0:5

所有OSPF的DR路由器组播地址:FF02:0:0:0:0:0:0:6

所有RIP路由器组播地址: FF02:0:0:0:0:0:0:9

所有PIM路由器组播地址: FF02:0:0:0:0:0:0:13

类似于IPv4,IPv6同样有一些特殊的组播地址,这些地址由特别的含义,这里举几个例子(还有很多类似的特殊地址):

FF01::1(节点本地范围组播地址)

FF02::1(链路本地范围所有节点组播地址)

FF01::2(节点本地范围所有路由器组播地址)

FF02::2(链路本地范围所有路由器组播地址)

FF05::2(站点本地范围所有路由器组播地址)

Solicited-Node组播地址

IPv6中特有的组播地址

Solicited-Node组播地址生成过程

接口ID的后24bits :XX:XXXX

前缀:FF02:0:0:0:0:1:FF

FF02:0:0:0:0:1:FFXX:XXXX

在IPv6组播地址中,有一种特别的组播地址,叫做Solicited-node地址,被请求节点组播地址。Solicited-node地址是一种特殊用途的地址,主要用于重复地址检测和节点用来获取相同本地链路上邻居节点的链路层地址。

Solicited-node地址由前缀FF02::1:FF00:0/104和单播地址的最后24bits 组成。一个单播地址对应一个Solicited-node地址。Solicited-node地址受限范围为本地链路范围。

IPv6任播地址

IPv6任播地址IPv6任播地址

IPv6任播地址

ipv6主要变化(IPV6详细讲解)(8)

这是IPv6特有的地址类型,它用来标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。适合于“One-to-One-of-Many”(一对组中的一个)的通讯场合。接收方只需要是一组接口中的一个即可,如移动用户上网就需要因地理位置的不同,而接入离用户最近的一个接收站,这样才可以使移动用户在地理位置上不受太多的限制。

任播地址从单播地址空间中进行分配,使用单播地址的任何格式。因而,从语法上,任播地址与单播地址没有区别。被分配具有任播地址的节点必须得到明确的配置,从而知道它是一个任播地址。目前,任播地址仅被用做目标地址,且仅分配给路由器。

子网路由器任播地址:发往该任播地址的报文会被发到该子网所有路由器中离得最近的一个,地址格式如下:

ipv6主要变化(IPV6详细讲解)(9)

在RFC3513中定义了子网路由器任播地址(Subnet-Router anycast Address),其接口ID为全0。

发往该任播地址的报文会被发送到任播地址所代表子网(子网路由器任播地址的前缀)内的某一台路由器,该路由器是离得最“近”的一台。所谓最近一般是路由的概念。

,