先说总结

仅论IPv6地址配置的话,有两种(自动)配置方法:有状态配置无状态配置

有状态配置

有状态配置,通常指有状态DHCPv6(Stateful DHCPv6),即通过有状态方式配置IPv6地址以及其他网络配置信息

DHCPv6协议将配置IPv6地址其他网络配置信息(比如DNSv6服务器、NTPv6服务器)的任务交给了路由器(或者说DHCPv6服务器)。换句话说,使用有状态配置的情况下,是路由器(或者说DHCPv6服务器)决定如何给客户端配置这些信息。

为了使用有状态配置,路由器通告需要带有M标志(表示允许通过有状态方式配置IPv6地址)以及/或者O标志(表示允许通过有状态方式配置其他IPv6网络配置信息)。

有了DHCPv6,路由器(或者DHCPv6服务器)便可以轻松集中管理大型网络。DHCPv6允许路由器决定IPv6地址的范围(地址池),或者给客户端配置统一的DNSv6、NTPv6以及PXEv6服务器。此外,因为DHCPv6是有状态协议,所以路由器可以知悉地址的分配情况,规定IPv6地址的租期,而且可以将IPv6地址设备MAC地址绑定(类似DHCPv4)。

美中不足的是,因为安卓系统的有意设计(据称是为了防止移动网络运营商通过DHCPv6,把用户的设备唯一的IPv6地址相绑定),直到安卓15有状态配置IPv6地址仍旧不受支持(尽管可以在手机root后使用第三方方案)。反观iOS,则早在iOS 4.2便支持了这个功能。

无状态配置

无状态配置,即SLAAC(无状态地址自动配置)

无状态配置下,路由器会通过IPv6组播,向网络上的所有IPv6客户端发送带有A标志(如果没有,表示不允许使用无状态配置)、IPv6前缀以及IPv6路由信息的路由器通告。

在这种配置方法下,客户端决定如何配置自己的IPv6地址。客户端在接收到IPv6前缀后,会用自己的64位ID补全IPv6地址的后缀,并将路由器通告的来源设备配置成默认网关。64位ID可以基于MAC地址生成,也可以完全是随机生成的。

因为路由器并不知道客户端的IPv6地址是如何配置的,为了避免地址重复,IPv6客户端会使用邻居请求询问网络上的所有其他客户端。如果没有客户端回应这个请求,则说明IPv6地址可用,而后这个客户端会向所有其他客户端发送邻居通告

IPv6客户端可以使用DNSv4服务器来负责IPv6的域名解析。不过,在无状态配置下,有两种办法可以配置DNSv6服务器,即RDNSS(但是支持有限)以及DHCPv6(只要路由器通告带有O标志),在使用SLAAC配置IPv6地址时,后者也称为无状态DHCPv6(Stateless DHCPv6)

结语

这篇文章没啥用,就当我瞎写的吧(?)