关于IPv6的概述
现在正常使用的IP协议为版本4,用32位来表示,地址空间为65536 x65536,结果约为42.9亿,但并不表示这些地址可以供42.9亿个节点使用,所以这样就使得版本4的IP一下子变得空间狭小,那么随着网络的迅速膨胀,IPv4的地址空间变得几乎快耗尽了。在这样的情况下,出现了一些缓解IP地址的技术:如VLSM、NAT。与此同时,人们也开发了一个地址空间更为庞大的IP地址,来解决地址匮乏的问题,这个协议就是IP版本6,即IPv6
IPv6的地址空间为128位,采用16进制表示
IPv6将整个地址分为8段来表示,每段之间使用冒号隔开,每段的长度为16位,表示如下:
XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX
可以看出,IPv6中每一个段是16位,每段共四个X,其中X使用4bit表示。
XXXX的取值范围为 0000到FFFF。
IPv6的表示方法
对于一个完整的IPv6地址,看起来比较复杂,写起来也不是很方便,没有v4那么友好,这个怎么解决呢?在IPv6中有两种压缩方法,分别如下所示:
1.省“0”压缩法
2.双冒号“::”压缩法
在一个完整的IPv6中,会经常的出现很多个0,表示起来比较麻烦,其实可以将不必要的0去掉。这样可以大大的节省时间,方便人们的阅读和书写。
例:
压缩前:2001:0410:0000:0000:0000:0000:0000:0001
压缩后:2001:410:0:0:0:0:0:1
注意:在第二个字段中的0410省掉的是开头的0,而不是结尾的0,这是IPv6地址表示中的一个约定;对于中间的0,如2001,不做省略;对一个段中全0的情况,保留一个0。
这仍然比较麻烦,为了方便书写,当地址中存在一个或多个连续的16比特为0字符时,为了缩短地址长度,可用一个::(双冒号)表示,当一个IPv6中只能有一个::。
压缩前:FF02:30:0:0:0:0:0:5
压缩后:FF02:30::5
要注意的是,不能将有效的0也压缩掉,例如:FF02:3::5。
要确定::代表多少位0,可以计算压缩地址中的块数,用8减去此数,然后将结果乘以16。例如,地址FF02::有两块(“FF0”2和“2”两块),这意味着其他6个16位快(总共96位)已被压缩。
两种压缩方法结合使用:
例如:
压缩前:0000:0000:0000:0000:0000:0000:0000:0001
压缩后:::1
IPv4过渡IPv6的兼容地址
在网络从IPv4过渡到IPv6时,就可能出现某些设备及连接了IPv4网络,又连接了IPv6网络,在IPv4内嵌在IPv6中即可以表示IPv4地址,又可以表示IPv6地址。
在IPv4原有的地址基础上,增加96个0,变成128位。
例如:
IPv4地址为:123.1.1.1
IPv6地址为:::123.1.1.1
注:IPv6中没有广播地址,IPv6不建议划子网,如果需要划子网,网络位请不要低于48位。
在IPv4地址中,地址分许多类型,比如代表节点自己的127.0.0.0/8,私有地址段,组播地址段,广播地址段,以及不可用地址,在IPv6中同样也有许多类型。
Unicast (单播)
Anycast (任意播)
Multicast (组播)
地址类型 |
二进制前缀 |
IPv6标识 |
未指定 |
00...0(128bits) |
::/128 |
环回地址 |
00...0(128bits) |
::/128 |
组播 |
11111111 |
FF00::/8 |
本地链路地址 |
1111111010 |
FE80::/10 |
本地站点地址 |
1111111011 |
FEC0::/10 |
可聚合全球地址 |
(其他) |
Link-Local Address (本地链路地址)
而在IPv6网络中,两个IPv6的节点通过链路相连,必须在这条链路之间为各自确立一个Link-Local Address (即本地链路地址),在一条链路上,必须知道对方节点的本地链路地址,如果不知道,将是不能通信的,所以一条链路中的IPv6节点要通信必须拥有本地链路地址,并且这个地址只在一条链路中有效,也不能被路由,而不同链路的本地链路地址是可以重复的。
注:当一个节点上正常启动了IPv6之后,本地链路地址是不需要人工干预,会自动生成,也可以手工配置
自动生成的本地链路地址,默认的特殊格式为:
FE80::/10+54个+EUI-64
FE80 |
0 |
EUI-64 |
10bit 54bit 64bit
EUI-64结构
EUI-64是将MAC地址的48为平均分成两部分,前24位,后24位;然后在中间补上FFFE(16位)。地址中的U/L位进行求反(如果是1、则设置为0,反之亦然)。
这样说不是很容易理解,下面举个例子:
证明目标:ca00.02a8.0038
将MAC地址重中间分开 |如下
ca00.02|a8.0038 将固定部分FFFE填充到MAC中间
ca00.02|FF.FE|a8.0038 将ca换成二进制
1100 1010 将1取反
1100 1000 转换16进制为 :
C 8
以上就是本地链路地址的形成过程;
非以太网接口的EUI-64的产生
若没有MAC地址的接口,在开启IPv6后,需要产生EUI-64时,需要借用设备上第一个以太网插槽的第一个接口,也可以理解为没有MAC地址的接口,统统使用设备上MAC地址池中的第一个地址;
注:EUI-64不仅在产生本地链路地址时使用,在正常配置IPv6地址时,同样可以使用EUI-64来填充后64位
Unique local address本地站点地址:
本地站点地址是单播中一种受限制的地址,只在一个站点内使用,不会默认启用,这个地址不能在公网上路由,只在一个指定范围内路由,需要手工配置,IPv6的本地站点地址类似IPv4中的私有地址。
得不到合法IPv6地址的机构可配置本地站点地址,表示方法为:
FECO::/10
Aggregatable global address 可聚合全球
可聚合全球单播地址相当于IPv4的公网地址,可以被路由的,可以正常使用的地址,网络位最少为48位;
可聚合全球单播地址范围:
2000:0000:0000:0000:0000:0000:0000:0000
到
3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
以上可以看出;可聚合全球单播地址第一位是2和3,由此说明;可聚合单播地址占IPv6总地址空间的8分之一。
回环地址
回环地址表示节点自身,类似于IPv4的127.0.0.0/8
回环地址表示为:
0000:0000:0000:0000:0000:0000:0000:0001
0:0:0:0:0:0:0:1
::1
Anycast 任意播
任意播地址表示一组接口,当一个发向某个任意播地址的数据包,只被最近的接口收到,这个地址是由路由协议定义的,不能手工配置,但是我们无法看到一个地址就能区分到底是单播还是任意播地址,因为任意播地址的表示格式和单播地址是一样的,也就是说任意播地址就是用普通的单播地址来表示的。任意播地址只能出现在路由器上,并且不能作为数据包的源地址来使用。
Multicast 组播
组播地址就是一个目标为组播地址的数据包将被多个节点收到,地址以
FF00::/8(1111 1111)打头,表示为:
FF00:0000:0000:0000:0000:0000:0000:0000/8
FF00:0:0:0:0:0:0:0/8
FF00::/8
配置IPv6地址
1.激活IPv6功能
开启IPv6流量转发功能
R1(config)#ipv6 unicast-routing
2.配置正常的IPv6地址
R1(config)#int f0/0
R1(config-if)#ipv6 address 2001:1::1/64
查看ipv6接口状态
R1#show ipv6 interface f0/0
3.使用EUI-64配置静态地址:
R1(config)#interface f0/0
R1(config)#ipv6 add 2001:1::/64 eui-64
4.启用接口ipv6功能
R1(config)#interface f0/0
R1(config-if)#ipv6 enable
5.为接口配置无编号地址
R1(config)#interface f0/0
R1(config)#ipv6 unnumbered f0/0
在IPv6中,静态路由的写法分为三种:
1.直连静态路由(directly attached static routes)
2.递归静态路由(recursive static routes)
3.完全静态路由(fully sepcified static routes)
1.直连静态路由
写法为只指定路由的出口,目标网络被认为是和此接口直连的,但此方法在接口为多路访问时,会有问题。
例:ipv6 route 2001:1::2/64 f0/1
说明:到达目标网络2001:1::2/64的数据包从接口f0/1发出去。
2.递归静态路由
写法为只指定路由的下一跳地址,此方法在任何网络环境中可行。
例:ipv6 route 2001:2::1/64 2001:1::2
说明:到达目标网络2001:2::1/64的数据包发给下一跳地址 2001:1::2.
3.完全静态路由
写法为同时指定出口和下一跳地址,只有当出口为多路访问时,并且确实需要明确指定下一跳时,才需要写完静态路由,下一跳必须是和出口同网段的
例:ipv6 route 2001:2::2/64 f0/0 2001:1::2
说明:到达目标网络2001:2::2/64的数据包从接口f0/0发出去,并且交给下一跳地址2001:1::2。
IPv6 RIP (RIPng)
IPv6的RIP,所有路由规则与IPv4 RIPv2基本相同,不同之处是IPv4 RIPv2使用UDP端口520,而RIPng使用UDP端口521,IPv4 RIPv2数据包更新使用地址224.0.0.9,而RIPng使用跟新地址为FF02::9。
在配置RIPng时,方法不同于IPv4 RIP,RIPng是采用先配置进程,然后需要让那些接口运行在RIPng下,就必须到相应的接口下明确指定,并不像IPv4那样在进程下通过network来发布
OSPFv3与OSPFv2(IPv4 OSPF) 的原理都是相同的,OSPFv3选举router-ID的规则与OSPFv2相同,OSPFv3也是选择路由器上的IPv4地址作为router-ID,如果设备上没有配置IPv4地址,那么必须手工指定router-ID。在配置OSPFv3时,先配置进程,然后需要然那些接口运行在OSPFv3下,就必须到相应的接口下明确指定,并不像OSPFv2那样在进程下通过network来发布。
EIGRPv6与IPv4 EIGRP的原理都是相同的,但是EIGRPv6必须有router-ID才能运行,所有在EIGRPv6不能获得Router-ID时,请手工配置Router-ID,更多的是EIGRP v6进程有个shutdown的特征,然后需要让那些接口运行在EIGRPv6下,就必须到相应的接口下明确指定,并不像IPv4 EIGRP那样通过network来发布。
EIGRP hello时间默认是5秒发一次,再低链路是60秒发一次,比如MBMA,或者所有低于或等于T1的链路(1.544M)。Hold time是hello的三倍。
欢迎大家前来交流技术