IPv6自动获取地址的方式
IPv6有两种自动获取地址的方式,分为有状态和无状态两种方式
- 无状态:通过NDP协议的RA报文获取地址前缀后由自动生成地址
- 有状态:通过DHCPv6获取地址
实验过程
查看自己网卡自动获取的IPv6地址会发现,网关地址是一个链路本地地址。并非类似于IPv4,使用上级路由器的接口地址作为网关。
经过抓包,可以看到PC与路由器的通信是直接发往对端的链路本地地址。在光猫是桥接模式直接使用电脑进行拨号的情况下,用自己的真机网卡 tracert 也可以看到第一跳IPv6地址与自身网卡获取到的地址并不是相同网段。好奇心驱使下做了下面的实验。
根据上面的拓扑并在配置好路由的基础上,路由器 R1 的 Ethernet0/0/0 接口我并没有配置IPv6地址,仅配置自动生成链路本地地址,因此需要配置指向PC1链路本地地址的路由。
ipv6 route-static 2002:: 64 Ethernet0/0/0 FE80::5689:98FF:FED6:3F3A
可以看到PC1通过DHCPv6协议获取到IPv6地址后,其网关地址也是个链路本地地址。
最下方 Tracert 结果也表明通过链路本地地址仍能够正常通信,Tracert 的结果正常情况下,第一跳路由应该是网关入接口的IPv6地址,这里为了测试所以没有配置IPv6地址,可以看到路由器R1的链路本地地址也不作为一跳,而是以路由器R1的出接口 Ethernet0/0/0 的IPv6地址作为了第一跳。
通过NDP协议获取地址网关同样是链路本地地址在此就略过了。
猜想
网关指向了链路本地地址,是因为IPv6特性所致。IPv6地址由网络前缀与接口ID组成,而接口ID大多是自动生成的。最终生成的地址存在不确定性,不便于手工指定。IPv6直接通过链路本地地址作为默认网关进行通信的方式,也体现IPv6即插即用的特性。
至于 tracert 结果的第一跳IPv6地址与网卡获取到的地址并不是相同网段,是由于运营商侧与实验中相同,入接口实际并没有对应IPv6地址,而是通过系统自动生成的UNR路由指向了用户。具体可参考unr路由产生场景这篇文章。