Technorati 标签: IPv6, IPv6 prefix, IPv6 auto config

人们常说,IPv6的一大特性就是移动性。

那么对于IP终端来说,如何去理解他的移动性呢?

其实就是IPv6的无状态自动配置。

前段时间有幸一个同事给我演示了一下这个功能,但是更多的疑问产生了。

IPv4中,比如说电脑,在网卡中设置自动获取IP地址和DNS.那么就可以自动从DHCP服务器上面获得IP地址和DNS还有网关了。

下面是IPv4的设置界面:

那么按照这个逻辑,IPv6就应该是没有这些选项,最终达到即插即用的目的嘛?答案是否,下面的截图IPv6也有:

那么为什么还需要自动配置?

意义在哪里?

如何实现呢?

带着这些问题,我们慢慢来看看IPv6这个自动配置auto config到底是个什么原理。

RFC2462上面写到,无状态自动配置是IPv6最有吸引力和最有用的新特性之一。他允许本地链路上得节点根据路由器在本地链路上公告信息自己配置单播IPv6地址。

PS:路由器可是不能用无状态自动配置来实现,无状态自动配置仅仅适用于IP终端.这点一定要记得。

所以换句话说,路由器上面是不能实现这个功能的,这个是RFC上面定义的。没有原因。可能主要的目的是统一规划,方便管理的目的。

这个就是从auto config延伸出来的几个子工作机制。

第一个知识点是前缀公告。

前缀公告是无状态自动配置中的初始机制。前缀公告机制使用路由器公告信息ICMPv6 type=134和所有节点的多播地址FF02::1,路由器公告机制在本地链路上周期性的发送到所有节点的多播地址。

在CISCO路由器上面公告IPv6前缀.

只要在接口上面配置了一个本地站点或者全球可聚合单播IPv6地址还有掩码,实际上就启用了cisco路由器上面的IPv6前缀公告。

IPv6前缀公告原理:

路由器周期性的发送ICMPv6 type=134的路由器前缀公告,用她得本地链路地址link-local FE80::250:3EFF:FEE4:4C00作为源,所有节点的多播地址FF02::1作为目的。

路由器公告消息公告的前缀是FEC0:0:0:1::/64,生存周期首选无穷大.

当本地链路多播地址FF02::1的节点A和B得到路由器公告消息,可以自己配置他们的IPv6地址.

这里我犯了一个错误,感觉这个是IPv6 前缀通告是配置了地址以后就自己有的一个机制。

实验结果并不是这样,我在R1和R2之间抓包,没有抓到ICMPv6 type = 134的报文,然后我又在网上查阅相关资。

为什么会这样,因为我忽略了一点很重要的,自动配置这个功能是仅仅限于路由器对PC终端之间的行为,路由器都不能支持这个auto config,所以为什么路由器要发前缀通告给邻居直连路由器呢?

后来我用路由器直连PC,得到了我想要的结果,PC自动获取到了IP地址,并且前缀和2012::/64是一样的.

:) 到这个时候我的心才稳下来。呵呵。下面是详细的实验结果:

在R1上面,用命令show ipv6 interface giga 1/0 prefix:

可以看到,R1有一个AD,是自己的前缀2012::/64:

呵呵,特意把giga 1/0的配置也show出来,2012::/64就是接口1/0的前缀。

在cisco上面,默认情况下有效生存期是30天.首选生存期是7天(604800s).

然后我做了一个实验,用迈普的路由器连接一个PC.

然后在PC机上面使能IPv6的功能(xp需要安装相关IPv6协议,默认是没有的,win7默认就加载了IPv6的协议栈了)

图谱图:

MAIPU router------------PC

后来在PC上面成功获取到了IP地址,前缀为2012::/64,可以ping通路由器接口FE0 : 2012::1

我在路由器上面FE0配置的地址是:2012::1/64.

最后在PC机上获得的地址是:

在PC机接电脑以前,我就一直用wireshark进行抓包。抓到了ICMPv6 type=134的报文,下面是报文的具体格式:

当然也可以用一个命令来修改前缀公告:

ipv6 nd prefix.

还有一个小功能就是在接口上面禁止路由器公告。

在cisco 2011年1月的IOS上面,这个命令有点不一样:

命令是: ipv6 nd ra suppress.

而以前老得IOS上面,命令却是:

其实无所谓,我们关注的是原理,命令行只是实现原理的一个手段罢了。

其实这里关于auto config还有几个参数,下面把几个参数都融合进行了一个接口中。

关于DAD和前缀重新编址,将在后续的文档中做实验进行验证。