1. IPv6 特征


  • IPv6 地址空间大,由 IPv4 的 32 位扩展到 128位
  • 支持分层结构,便于寻址和路由聚合,提高路由选路能力
  • 不需要 NAT 协议,可以实现端到端的安全通信
  • 扩展了组播和任意播地址
  • 相比 IPv4,报头格式进行了简化
  • 加强了扩展报头和 Option 的支持a
  • 安全性更高,IPv6 报头支持认证(IPSec)
  • 对移动网络更好的支持
  • IPv6 没有定义广播地址,由组播地址代替
  • 更好的支持流标签功能(Qos)。与 IPv4 定义一组流(五元组)相同
  • 支持无状态地址配置(只需要分配 IPv6 地址前缀,主机号可以自动生成)
  • 地址格式
    • 每一段前的 0 可以被省略
    • 多个段连续的 0 可以被 “ :: “ 省略,” :: “只能使用一次
    • 冒号分 16 进制(一共 8 段,每段由 4 个 16 进制表示)
  • 地址分类
    • 单播地址
    • 组播地址
    • 任播地址

      2. 单播地址


如果地址的前三 bit 不是 000,则接口标识必须为 64 位。如果前三 bit 是 000,则没有限制

1)IPv6 地址结构

image.png

  • 网络前缀:n 比特(相当于 IPv4 中网络部分)
  • 接口标识:128 - n 比特(相当于 IPv4 中主机部分)
    • 用来代表一个接口,目的地址为单播地址的报文会被送到被标识的接口
    • IPv6 中一个接口可以拥有多个 IPv6 地址
  • 特殊单播地址

    • ::/0(0:0:0:0:0:0:0:0/0),表示匹配所有 IPv6 地址
    • ::/128(0:0:0:0:0:0:0:0/128),表示某个接口或节点没有 IPv6 地址
    • ::1/128(0:0:0:0:0:0:0:1/128),是一个环回地址,与 IPv4 中 127.0.0.1 作用相同,实际发送的数据包中不能使用该地址作为源或目的

      2)EUI - 64

      image.png
  • 用于自动生成接口地址(接口 ID 部分需要为 64位),用于无状态配置

  • 接口标识部分为 48 位 MAC 地址+插入的 FFFE

    • MAC 地址的前 24 位和后 24 位中间插入 FFFE
    • 再将前面第 7 位二进制反转(0 → 11 → 0

      3)全球单播地址(GUA)

      image.png
  • 全球唯一的和全球可路由的地址,可以作为业务网络(用于 IPv6 Internet),相当于 IPv4 的公网地址

    • 全球路由前缀:「前缀至少 48bit」,目前已分配的前 3bit 均为 2xxx::/3(001)
    • 子网:用子网来构建本地网络(64bit - 全球路由前缀),与 IPv4 中的子网号作用类似
    • 接口标识:用来标识一个设备,与 IPv4 中的主机位作用类似
  • /48 是 BGP 最小网段
  • /56 是局部多子网网段
  • /64 是最小子网

    4)链路本地地址(Link-Local)

    image.png

  • 前10位固定为**FE80::/10**(1111 1110 10)」

  • 只能存在于一个链路的两端,不能跨越,TTL = 1
    • 每个 IPv6 接口都必须具备一个链路本地地址
    • 一个链路上不能相同,一个设备上多个接口可以相同
  • 在启动 IPv6 协议的节点上,专门用来和相同链路上的其他主机通信,不能作为业务网络
    • 可以作为路由协议的源地址、发现邻居、无状态配置等
  • 可以自动生成也可以手动配置,采用自动生成,后 64 位会采用 EUI-64 的算法

    • 接口只要配置了全球单播地址,就会自动生成 Link-Local 地址

      5)唯一本地地址(site-local address、ULA)

      image.png
  • 前7位固定为**FC00::/7**(1111 110)、**FD00::/8**(1111 1101)」

  • 代替了站点本地地址的功能,永远不会与全球 IPv6 的 Internet 进行通信的地址
    • 可以作为业务网络
    • 相当于 IPv4 的私网地址,在 IPv6 的 Internet 上不可被路由

      3. 组播地址


image.png

  • 类似于 IPv4 组播地址,用于标识多个接口,在 IPv6 中组播地址代替了 IPv4 的广播地址
  • 目的地址为组播地址的报文会被送到被标识的所有接口
  • 只有加入相应组播组的设备才会侦听发往该组播地址的报文
  • 由固定位、前缀(Flag)、范围(Scope)字段以及保留位、组播ID组成
    • 固定位:前 8 位固定为**FFxx::/8**(1111 1111)」
    • 前缀(Flag):前三位固定为 000
      • 第 4 位 = 0,表示为永久固定地址
      • 第 4 位 = 1,表示为临时地址
    • 范围(Scspe):用于判定组播流量能否发送出去,十六进制表示,值越大,传播范围越广
      • 0:预留
      • 1:节点本地范围
      • 2:链路本地范围
      • 3:保留
      • 4:管理本地范围
      • 5:站点本地范围
      • 8:企业本地范围
      • E:全球范围
      • F:预留

        1)预定义和预留的组播地址

        image.png
IPv6 预定义组播地址 IPv4 预定义组播地址 组播组
节点本地地址
FF01::1 224.0.0.1 所有节点地址
FF01::2 224.0.0.2 所有路由器地址
链路本地范围
FF02::1 224.0.0.1 所有节点地址
FF02::2 224.0.0.2 所有路由器地址
FF02::5 224.0.0.5 所有 OSPF 路由器
FF02::6 224.0.0.6 所有 OSPF DR/BDR 路由器
FF02::9 224.0.0.9 所有 RIPv2 路由器
FF02::D 224.0.0.13 所有 PIM 路由器
站点本地范围
FF05::2 224.0.0.2 所有路由器
全局
FF0x::101 224.0.1.1 NTP 协议

预留的组播地址

  1. Node-Loacl: 只能是本地生效
  2. Link-Loacl: 只能在一条链路上生效,不能跨越
  3. ::/0(0:0:0:0:0:0:0:0/0): 表示默认路由,与 IPv4 中 0.0.0.0 的作用相同

    2)请求节点组播地址(Solicited-Node)

  • 每个节点必须分配给单播和任播的一个组播地址(Link-Local 地址也会生成),是可以自动生成的
  • 用于地址 DAD 重复检测和 NDP 协议(NDP 相当于 IPv4 的 ARP),可以冲突(不会受到影响)
  • 前缀固定:「**FF02::1:FF**``**/104**,后 24 位是 IPv6 单播地址的后 24 位拷贝过来的」
    • 例如IPv6单播地址:2001::12:1/64 → 对应请求节点组播地址为FF02::1:FF12:1
    • 例如Link-local地址:FE80::5689:98FF:FE1A:822 → 对应请求节点组播地址为FF02::1:FF1A:822


子网路由器任播地址,由 n bit 子网前缀标识子网,其余用 0 填充

image.png

  • 任播地址表示在不同节点标识一组网络接口,是一个特殊的单播地址,本质是服务,只能作为目的地址使用,并且不做冲突检测
  • 互联网的设备可以给多台相同 IPv6 地址的设备发送报文,需要在配置时指明是任播地址(anycast)
  • 目标地址是任播地址时,路由器会将数据包发送给最近的一个网络接口(最近的一台设备)
  • 子网路由器任播地址是已经定义好的一种任播地址,用于节点需要和远端子网上所有设备中的一个通信时使用
    • 例如:一个移动节点需要和它的 “家乡” 子网上的所有移动代理中的一个进行通信

      5. 地址分配


每个适配器可以分配多个 IPv6 地址,IPv6 主机至少拥有两个可以接收数据包的地址[用于接收本地链路流量的地址和可路由的地址],此外还会侦听组播流量

1)主机的 IPv6 地址

  1. 链路本地地址
  2. 单播地址(可以是 1 个或多个唯一本地地址或全球单播地址)
  3. FF01::1
  4. FF02::1
  5. 每个单播地址的请求节点多播地址
  6. 已加入的多播地址
  7. Loopback 地址(::1)

    2)路由器的 IPv6 地址

  8. 链路本地地址

  9. 单播地址(可以是 1 个或多个唯一本地地址或全球单播地址)
  10. FF01::1
  11. FF01::2
  12. FF02::1
  13. FF02::2
  14. 每个单播地址的请求节点多播地址
  15. 已加入的多播地址
  16. Loopback 地址(::1)

    6. IPv6 Header Message


1)基本 Header

  • IPv6 的报头字段更少(比较简洁)
  • 基本报头有 8 个字段,固定大小 「40 字节」,每个 IPv6 数据包都必须包含报头
  • 基本报头提供报文转发的基 本信息,会被转发路径上的所有路由器解析
  • IPv6 在标准头部没有分片字段,分片字段移到了扩展头部

image.png
IPv6 Header Message 格式解析

  • Version:版本
  • Traffic Class:流分类
  • Flow Label:流标签
  • Payload Length:荷载长度。上层的总长度(包含 IPv6 扩展 Header)
  • Next Header:下一个报头。承载的什么协议类型
  • Hop Limit:跳数限制
  • Source Address:源 IPv6 地址
  • Destination Address:目的 IPv6 地址

    2)扩展 Header

    设备转发时是根据基本报头中 Next Header 值来决定是否处理扩展报头,并不是所有的扩展报头都需要被转发设备查看和处理

  • 扩展报头是可选的,有需要扩展头部对应的功能才会进行添加

    • 原 IPv4 Options 字段放入扩展报头
    • IPv6 包含 0 个、1 个或多个扩展报头
    • 固定为 8 字节长度的倍数

image.png

  • Next Header:下一个报头(8bit),与基本报头的作用相同
  • Extension Header Length:扩展报头长度(8bit),不包含 Next Header 长度
  • Extension Header Data:扩展报头数据(可变长 bit),是扩展报头的内容(一系列 Options 和填充字段)
  • 除了目的选项扩展报头可以出现 1-2 次,其他扩展报头只能出现一次
  • 当超过一种扩展报头用在同一个分组时,必须按照以下顺序出现(并不一定所有都必须有):
    • IPv6基本报头
    • 逐条选项扩展报头
    • 目的选项扩展报头
    • 路由扩展报头
    • 分段扩展报头
    • 认证扩展报头
    • 封装安全有效载荷扩展报头
    • 目的选项扩展报头
    • 上层协议数据报文 | 报头类型 | Next Header 字段值 | 描述 | | —- | —- | —- | | 逐跳选项报头 | 0 | 该选项主要用于为在传送路径上的每跳转发指定发送参数,传送路径上的每台中间节点都要读取并处理该字段,应用场景:
      - 用于巨型载荷
      - 用于路由器提示
      - 用于资源预留
      | | TCP | 6 | / | | UDP | 17 | / | | 封装 IPv6 头部 | 41 | / | | 路由报头 | 43 | 路由报头和 IPv4 的 Loose Source and Record Route 选项类似,该报头能够被 IPv6 源节点用来强制数据包经过特定的路由器 | | 分段报头 | 44 | 同 IPv4 一样,IPv6 报文发送也受到 MTU 的限制。当报文长度超过 MTU 时就需要将报文分段发送,而在 IPv6 中,分段发送使用的是分段报头 | | 封装安全净载报头 | 50 | 该报头由 IPSec 使用,提供认证、数据完整性以及重放保护和 IPv6 数据报的保密,类似于认证报头 | | 认证报头 | 51 | 该报头由 IPSec 使用,提供认证、数据完整性以及重放保护。它还对 IPv6 基本报头中的一些字段进行保护 | | ICMPv6 | 58 | / | | 没有下一个头部 | 59 | / | | 目的选项报头 | 60 | 目的选项报头携带了一些只有目的节点才会处理的信息。目前,目的选项报头主要应用于移动 IPv6 |

7. IPv6 和 IPv4 地址的对应关系


IPv4 IPv6
主类地址分类
组播地址 224.0.0.0/4
广播地址
未知地址 0.0.0.0
环回地址 127.0.0.1
公网地址
私有地址
10.0.0.0/8
172.16.0.0/16
192.168.1.0/24
自动专用IP寻址
类型 IPv6 预定义地址 IPv4 预定义地址
主类地址
广播地址 ×
组播地址 FF00::/8 224.0.0.0/4
未知地址 :: 0.0.0.0
环回地址 ::1/128 127.0.0.1
私网地址 FE00::/7
FD00::/7
10.0.0.0/8
172.16.0.0/16
192.168.1.0/24
公网地址 全球单播地址 除私网地址和保留地址外的所有地址
IP 寻址 链路本地地址 自动专用IP寻址