IPv6 client获得的地址有2种SLAAC和IA_NA(DHCPv6)。SLAAC是通过RA中的前缀得到的,但是RA不能包含DNS Server地址,因此必须通过stateless dhcpv6拿到DNS地址。
RA总是需要监听的,因为DHCPv6不携带网关信息(DHCPv6 reply包的源地址不行?)。RA的源地址总是link local地址。host通过RA的源地址得到first nexthop地址。
On-link flag (L)
表明是不是有其它同前缀的地址在同一个子网上。这个意思是这样的,比如:router自己也用了这个前缀,
那么下挂设备看到这个标志,就知道这个前缀不是给自己独享的。相当于ipv4,路由器br-lan是192.168.0.1
下挂设备是192.168.0.x。碰到这个标志,host就添加一条link local路由。
Autonomous address-configuration flag (A)
这个标志表明这个前缀可以用于SLAAC配置host的ipv6地址,但是dns等信息,仍然需要通过DHCPv6拿取。
Other configuration (O)
这个标志表示router开启了DHCPv6,可以通过DHCPv6来获取其它配置(DNS)。
Managed address configuration (M)
这个标志表明router支持DHCPv6 statefull地址分配(IA_NA)。如果开启了M位,则O位也默认开启。
注意点:
SLAAC只支持64位前缀,因为小于64位,SLAAC不知道怎么填充64位之前的地址。所以小于64位的前缀开启A位是没有意义的。
前缀信息,既没有A位,也没有L位也是没有意义的。前者是配置SLAAC地址,后者是配置本地路由。两者都没有
下发了,也没用。
疑问点:前缀是怎么分配给下挂设备的?通过RA的prefix information吗?
仔细想想,RA是无状态的。如果是通过RA分配,那怎么知道哪个下挂设备是哪个前缀。因此前缀是通过DHCPv6的IA_PD。prefix delegation分配给下挂设备的。
dhcpv6请求中,可以请求前缀
参考:
https://blog.ipspace.net/2012/11/ipv6-router-advertisements-deep-dive.html
https://blog.ipspace.net/2012/11/ipv6-on-link-determination-what-is-it.html
https://blogs.infoblox.com/ipv6-coe/why-you-must-use-icmpv6-router-advertisements-ras/