现在IPV6也普及的差不多了,折腾网络的时候总觉得有点不顺手,记录下有用的IPV6知识和踩过的坑

IPv6 Prefix
运营商分发给你的一段公网IP段,你可以通过DHCP等协议将具体IP分配给下游设备
终端的IPv6地址组成
IPv6 Prefix + 本地地址

本地地址生成方式

  • stateful对应DHCPv6,下游终端地址由DHCPv6服务器统一管理
  • stateless是IPv6独有分发方案,也叫SLAAC,客户端根据自身mac地址通过EUI-64算法生成
EUI-64
一种用硬件mac地址生成接口标识符的方法 EUI-64算法
SLAAC具体流程
  1. 使用link-local prefix拼接上EUI-64生成的接口标识符,生成本地IPv6地址,如fe80::1这种地址
  2. 执行Duplicate Address Detection (DAD),作用是使用多播检测自动生成的地址是否存在冲突
  3. 发送路由请求包Router Solicitation (RS) 到多播地址FF02::2,一般只有路由器在监听这个地址
  4. 路由器回复路由通告包Router Advertisement (RA),这个包包含公网IPv6 prefix和prefix length,一般prefix length不能超过64
  5. 终端将公网IPv6 prefix拼接EUI-64接口识别码,用作自己的公网IPv6地址,到这步已经具备基础IPv6链接能力了,但是还没有DNS配置
  6. 要获取DNS,必须通过DHCP请求,这时候再向DHCP服务器请求一下DNS就可以了 总结:SLAAC不使用DHCP配置地址,但需要DHCP配置DNS
DHCPv6具体流程
和DHCPv4差不多
RA报文标识Router Advertisement Flags
用来告诉终端从哪里获取IPv6地址和DNS信息
M-flag O-flag result
1   地址和DNS均通过DHCPv6获取
0 1 地址走SLAAC,DNS走DHCPv6
0 0 表示本地没有DHCPv6服务器
Prf-flag
路由优先级,有Low (1), Medium (0), or High(3)三个选项,当本地存在多个路由时,终端根据这个值选择路由网关
参考
networkacademy.io
OpenWrt wiki

留下评论