认识 IPv6

IPv6 的明显优势

  1. 更大的地址空间:从 IPv4 中的 32 位增加到 IPv6 中的 128 位,极大地扩展了可用的 IP 地址数量,能够满足全球互联网设备不断增长的需求。
  2. 提高了转发效率:更改了 IP 数据包头选项的编码方式,简化了数据包头结构,减少了路由器在处理数据包时的复杂性,从而提高了数据包的转发效率。
  3. 简化了地址配置:IPv6 相邻节点搜索(Neighbor Discovery, ND)协议简化了 IPv6 的地址配置过程,使得设备能够更容易地自动配置 IP 地址,减少了人工配置的复杂性和出错的可能性.

封装 IPv6 数据包

IPv6 数据包头由 40 个字节组成,具体字段包括:

  • 协议版本:4 位,标识该数据包使用的是 IPv6 协议。
  • 通信类别:8 位,用于区分不同类型的 IPv6 数据包。
  • 流标记:20 位,用于标识数据流,便于网络设备对特定数据流进行特殊处理。
  • 分组长度:16 位,表示数据包的总长度,不包括数据包头。
  • 下一个头部:8 位,指示数据包中紧随其后的数据类型,如 TCP、UDP 等。
  • 生存时间:8 位,表示数据包在网络中可以经过的最大跳数,每经过一个路由器,该值减 1,当值为 0 时,数据包被丢弃。
  • 源 IP 地址和目标 IP 地址:各占 128 位,分别标识数据包的发送者和接收者的 IP 地址。

IPv6 网络基本术语

  1. 节点:具有 IPv6 地址且接口配置为支持 IPv6 的任何系统。
  2. IPv6 路由器:用来转发 IPv6 数据包的节点。
  3. IPv6 主机:IPv6 主机可以有多个配置为支持 IPv6 的接口。
  4. 链路:单一且连续的网络介质,其两端均连接有路由器。
  5. 相邻节点:与本地节点在同一个链路上的 IPv6 节点。
  6. IPv6 子网:IPv6 网络的管理段。
  7. IPv6 隧道:一个 IPv6 节点和另一个 IPv6 节点端点之间提供虚拟的点对点路径的隧道。
  8. 边界路由器:位于网络边界的路由器。

IPv6 地址

IPv6 地址的组成

IPv6 地址由 128 位二进制数表示,通常以冒号分隔的十六进制数形式呈现,分为 8 组,每组 16 位。

IPv6 地址的简化

  • 使用双冒号“::”表示法:表示连续的 16 位零字段,但一个 IPv6 地址中,只允许使用双冒号一次。例如,地址 2001:0000:0000:0015:0000:0000:1a2f:1a2a 可以简化为 2001:0000:0000:0015::1a2f:1a2a。
  • 零字段表示为单个“0”:例如,2001:0:0:0015::1a2f:1a2a。
  • 省略字段中的前导零:例如,将 0015 更改为 15,最终简化为 2001:0:0:15::1a2f:1a2a。

IPv6 地址分类

地址类型 地址前缀(二进制) IPv6 前缀标识 备注
单播地址 未指定地址 00……0(128bits) ::/128
环回地址 00……1(128bits) ::1/128  
链路本地地址 1111 1110 10 fe80::/10  
唯一本地地址 1111 110 fc00::/7 包括 fd00::/8 和不常用的 fc00::/8
站点本地地址 1111 1110 11 fec0::/10 新版本已弃用,被唯一本地地址替代
全局单播地址 其他形式    
组播地址 1111 1111 ff00::/8  
任播地址     从单播地址空间中进行分配,使用单播地址的格式

IPv6 相邻节点搜索协议

  • 路由器搜索:帮助主机查找本地链路上的路由器。
  • 地址自动配置:使节点能够为其接口自动配置 IPv6 地址。
  • 前缀搜索:使节点能够搜索已分配给链路的已知子网前缀。节点使用前缀来区分位于本地链路上的目标和那些只能通过路由器来访问的目标。
  • 地址解析:帮助节点确定相邻节点的链路本地地址(如果只给定目标的 IP 地址)。
  • 确定下一个跃点:使用某种算法来确定本地链路之外的包接受者的跃点的 IP 地址。下一个跃点可以是路由器或目标节点。
  • 相邻节点无法访问检测:帮助节点确定相邻节点是否不再可以访问。对于路由器和主机,可以重复进行地址解析。
  • 重复地址检测:使节点能够确定其要使用的地址是否尚未被使用。
  • 重定向:使路由器能够通知主机要用于到达特定目标的较好的第一个跃点节点。

IPv6 地址自动配置

在地址自动配置过程中,主机将执行以下操作:

  • 为每个接口创建链路本地地址,该操作不要求链路上有路由器。
  • 检验地址在链路上是否唯一,该操作不要求链路上有路由器。
  • 确定全局地址是应通过无状态机制、有状态机制还是这两种机制来获取。这一操作要求链路上有路由器。
  • IPv6 主机使用相邻节点搜索从本地路由器获取子网前缀。
  • 主机通过合并子网前缀和从接口的 MAC 地址生成的接口 ID 来自动生成 IPv6 地址。
  • 如果没有路由器,主机可以只生成链路本地地址。

IPv6 链路本地地址

Interface ID 常见的格式规则有 EUI-64:

  • 将 MAC 地址的 48 位二进制分成前后 24 位,中间插入 1111111111111110(十六进制数 FFFE),得到 64 位二进制数,再将第 7 位取反,就得到了最终的接口标识符。
  • 例如,接口 MAC 地址为 00-11-22-33-44-55,插入 FFFE 后:00-11-22-ff-fe-33-44-55,第 7 位取反后:02-11-22-ff-fe-33-44-55,最终的链路本地地址为 fe80::211:22ff:fe33:4455/10。