🌐 IPv6 基础:地址表示方法 (Address Representation)

IPv6 地址长 128 位 (bits),这与 IPv4 的 32 位形成了巨大的差异,也是其地址空间庞大的根本原因。

1. 基本格式 (The Basics)

  • 十六进制表示: IPv6 地址使用十六进制(Hexadecimal)表示,而不是像 IPv4 那样使用十进制。
  • 分段 (Segments): 128 位地址被分成 8 个 16 位的段(或称为 Block/Group)。
  • 分隔符: 每个 16 位的段之间用冒号 (colon, : ) 分隔。

示例:

2001:0DB8:3C4D:0015:0000:0000:1A2B:0500

在这个例子中:

  • 地址由 8 个 16 位的十六进制段组成。
  • 每个段可以包含 4 个十六进制数字 (4 * 4 bits = 16 bits)。

2. 地址简化规则 (Address Simplification Rules)

由于 IPv6 地址很长,Cisco 和 IETF 定义了两条规则来简化地址的书写。

规则一:省略前导零 (Omit Leading Zeros)

  • 在每个 16 位的段内,可以省略段开头(左侧)的一个或多个 0
  • 如果一个段只包含零,则必须至少保留一个 0
原始段简化后解释
0DB8DB8省略前导 0
001515省略前导 00
00000保留一个 0

应用示例:

原始地址: 2001:0DB8:3C4D:0015:0000:0000:1A2B:0500

应用规则一: 2001:DB8:3C4D:15:0:0:1A2B:500

规则二:双冒号压缩 (Double Colon Compression - ::)

  • 地址中连续出现的 一个或多个 都是零的 16 位段,可以用双冒号 :: 替换。
  • 关键限制: 双冒号 :: 在一个 IPv6 地址中只能出现一次!这是为了确保地址的唯一性,否则我们无法确定 :: 代表了多少个零段。

应用示例:

  1. 地址 A (连续的零段): 2001:DB8:0:0:0:0:0:1
    • 简化: 2001:DB8::1 (:: 替换了中间的五个 0 段)
  2. 地址 B (零段在末尾): FE80:0:0:0:9876:5432:1A1A:0
    • 应用规则一: FE80:0:0:0:9876:5432:1A1A:0
    • 应用规则二: FE80::9876:5432:1A1A:0 (:: 替换了前三个 0 段)
  3. 地址 C (零段在开头): 0:0:0:1234:0:0:0:5678
    • 简化: ::1234:0:0:0:5678

注意: 如果一个地址中有两处连续的零段,例如:2001:DB8:0:0:ABCD:0:0:1

  • 只能选择最长的连续零段进行压缩,或选择任意一个。
  • 选择最长的(0:0):2001:DB8::ABCD:0:0:1 (保留了后面两个零)
  • 最佳实践: 应该尽量选择最长的零段进行压缩,但在这个例子中,两个零段一样长,选择哪一个都可以。

3. IPv6 前缀长度 (Prefix Length)

  • 与 IPv4 的子网掩码类似,IPv6 使用前缀长度来表示网络部分。
  • 表示方法:IPv6地址/前缀长度
  • 最常见的前缀长度是 /64,它表示地址的前 64 位是网络部分,后 64 位是主机部分。

示例: 2001:DB8:ACAD:1::/64

好的,我们继续 IPv6 地址类型 的学习。

🌐 IPv6 基础:地址类型 (Address Types)

IPv6 地址主要分为三大类,理解它们的用途是进行网络设计和故障排除的基础。

1. 单播地址 (Unicast Address)

单播地址用于点对点通信。数据包发送到此地址,只会被寻址到的单个接口接收。

IPv6 单播地址根据其作用域和可路由性,又分为以下几种:

  • **全局单播地址 (Global Unicast Address, GUA) **
    • 作用: 相当于 IPv4 中的公有地址 (Public Address)。
    • 特点: 在整个互联网上是唯一且可路由的。
    • 前缀: 目前由 IANA 分配的 GUA 地址通常以 2000::/3 开始(即从 2000::3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF)。
    • 结构: 典型的 GUA 地址结构为:
      • 前 48 位:全局路由前缀 (Global Routing Prefix),由 RIR/ISP 分配。
      • 接下来的 16 位:子网 ID (Subnet ID),由组织或企业自行分配给其内部子网。
      • 后 64 位:接口 ID (Interface ID),标识网络中的特定主机接口。
  • **链路本地地址 (Link-Local Address, LLA) **
    • 作用: 用于在同一物理链路上(即同一网段)进行通信,例如邻居发现协议 (NDP) 或路由器间的通信。
    • 特点: 不可路由,路由器不会转发带有 LLA 作为源地址或目标地址的数据包。
    • 前缀: 总是以 FE80::/10 开头。
    • 必须性: 接口上必须配置 LLA,即使配置了 GUA。
  • **唯一本地地址 (Unique Local Address, ULA) **
    • 作用: 类似于 IPv4 的私有地址 (RFC 1918 地址),用于内部网络通信
    • 特点: 在组织内部是唯一的,但不可在互联网上路由
    • 前缀:FC00::/7 开头(实际使用中通常为 FD00::/8)。

2. 组播地址 (Multicast Address)

组播地址用于点对多点通信。数据包发送到此地址,会被订阅了该组播地址的多个接口接收。

  • 前缀: 总是以 FF00::/8 开头。
  • 作用: 常用于向特定的设备组发送信息,例如:
    • FF02::1 (All Nodes Multicast Address):同一链路上的所有 IPv6 设备。
    • FF02::2 (All Routers Multicast Address):同一链路上的所有 IPv6 路由器。

3. 任意播地址 (Anycast Address)

任意播地址用于点对最近通信。数据包发送到此地址,会被路由到最近的(通过路由协议衡量)配置了该地址的一个接口。

  • 特点: 任意播地址在结构上与单播地址无法区分。它通常是配置给多个不同地理位置的路由器接口的一个全局单播地址
  • 用途: 常用于提供高可用性和负载均衡的服务(如 DNS 服务器)

好的,我们继续 IPv6 地址的配置和验证。这一部分是实验的基础。

💻 IPv6 基础:地址配置和验证 (Configuration and Verification)

在 IPv6 网络中,主机的接口 ID(地址的后 64 位)的分配有多种方法,这是 CCNA 考试中的重点。

1. 接口 ID 的生成方法 (Interface ID Generation)

由于 IPv6 地址的主机部分长达 64 位,因此手动配置非常繁琐。通常采用以下两种自动生成方式:

a. EUI-64 (Extended Unique Identifier)

  • 原理: 自动将接口的 48 位 MAC 地址 转换成一个 64 位 的接口 ID。
  • 步骤:
    1. 将 48 位的 MAC 地址(例如:001A.C100.0BEE)从中间分开。
    2. 在中间插入一个固定的 16 位十六进制值 FFFE
      • 001A.C1 + FFFE + 00.BEE001A.C1FF.FE00.0BEE
    3. 翻转 U/L 位: 将 MAC 地址的第 7 位(从左起,第一个字节的倒数第二位)翻转(0 变 1,1 变 0)。
      • 00 是二进制 0000 00**0**0
      • 翻转第 7 位后变成 0000 00**1**0,即十六进制的 02
    4. 最终接口 ID: 021A:C1FF:FE00:0BEE
  • 优点: 地址基于硬件,易于追踪。
  • 缺点: 暴露了设备的 MAC 地址,存在隐私和安全隐患。

b. 随机生成 (Randomly Generated / Privacy Extensions)

  • 原理: 接口 ID 由系统随机生成,并且会定期更换,以增强隐私保护
  • 特点: 这是现代操作系统(如 Windows、macOS)默认使用的地址生成方式。

2. 主机地址获取方式 (Address Assignment Methods)

主机获取完整的 IPv6 地址(包括 GUA 和 LLA)主要通过以下三种方式:

a. 静态配置 (Static Configuration)

  • 作用: 手动在接口上配置完整的 128 位地址前缀长度
  • 应用: 仅在路由器和服务器等设备上使用。

b. SLAAC (Stateless Address Autoconfiguration)

  • 作用: 无需 DHCP 服务器,主机即可自动配置自己的 IPv6 GUA。
  • 过程:
    1. 主机首先配置自己的 LLA (FE80::)。
    2. 主机发送一个 RS (Router Solicitation) 报文到组播地址 FF02::2
    3. 路由器回复一个 RA (Router Advertisement) 报文,其中包含 64 位的网络前缀(例如 2001:DB8:ACAD:1::/64)。
    4. 主机将这个网络前缀与其自己生成的 64 位接口 ID (EUI-64 或随机) 结合,形成一个完整的 GUA。
  • 特点: 无状态,路由器不保存主机的地址信息。只能分配地址,不能分配其他信息(如 DNS 服务器地址)。

c. DHCPv6 (Dynamic Host Configuration Protocol for IPv6)

  • 作用: 用于动态分配 IPv6 地址和/或其他网络配置参数(如 DNS 服务器地址)。
  • 类型:
    • 有状态 DHCPv6 (Stateful DHCPv6): DHCPv6 服务器分配并记录完整的 IPv6 地址。类似于 IPv4 的 DHCP。
    • 无状态 DHCPv6 (Stateless DHCPv6): 主机使用 SLAAC 获得地址,然后使用 DHCPv6 服务器仅获取其他配置信息(例如 DNS 服务器地址)。
方法地址分配其他信息(DNS等)服务器记录地址状态俗称
SLAAC✔️ (前缀+EUI-64/随机)无状态
DHCPv6 有状态✔️ (完整地址)✔️✔️有状态
DHCPv6 无状态❌ (SLAAC获取)✔️无状态

3. 思科 IOS 配置 (Cisco IOS Configuration)

在思科路由器上启用和配置 IPv6:

  1. 全局启用 IPv6 路由:

    1
    Router(config)# ipv6 unicast-routing 
  2. 配置接口地址 (GUA):

    1
    2
    Router(config)# interface GigabitEthernet0/0
    Router(config-if)# ipv6 address 2001:DB8:ACAD:1::1/64

    (注:思科 IOS 默认会自动配置 LLA)

  3. 配置接口地址 (使用 EUI-64):

    1
    Router(config-if)# ipv6 address 2001:DB8:ACAD:2::/64 eui-64 

    (路由器将使用其 MAC 地址和 EUI-64 规则自动计算最后的 64 位)

  4. 启用 SLAAC/DHCPv6 (在路由器接口上):

    • 仅 SLAAC: 默认即为 SLAAC。

    • SLAAC + 无状态 DHCPv6 (提供其他信息):

      1
      Router(config-if)# ipv6 nd other-config-flag 
    • 有状态 DHCPv6 (由 DHCPv6 服务器分配地址):

      Bash

      1
      Router(config-if)# ipv6 nd managed-config-flag 

4. 验证命令 (Verification Commands)

  • 验证 IPv6 地址和接口状态:

    1
    show ipv6 interface brief
  • 验证 IPv6 路由表:

    1
    show ipv6 route
  • 验证 IPv6 邻居表 (NDP 发现的 LLA 和 GUA 映射):

    1
    show ipv6 neighbors

🌐 IPv6 基础:邻居发现协议 (NDP)

1. NDP 概述 (Overview)

在 IPv6 中,邻居发现协议 (NDP, Neighbor Discovery Protocol) 彻底取代了 IPv4 中的 ARP (地址解析协议)ICMP 路由器发现 (ICMP Router Discovery) 机制。

NDP 是 IPv6 中的一个核心协议,它使用 ICMPv6 报文来实现其所有功能。

2. NDP 实现的关键功能 (Key Functions of NDP)

NDP 使用五种不同的 ICMPv6 报文来实现以下核心功能:

a. 地址解析 (Address Resolution)

  • 功能: 将邻居的 IPv6 地址解析为 MAC 地址。
  • 报文类型:
    • 邻居请求 (Neighbor Solicitation, NS): 主机 A 发送 NS 报文,询问主机 B 的 MAC 地址。
    • 邻居通告 (Neighbor Advertisement, NA): 主机 B 回复 NA 报文,告知主机 A 自己的 MAC 地址。
  • 对比 ARP: NS/NA 的作用等同于 IPv4 中的 ARP Request/Reply。

b. 路由器发现 (Router Discovery)

  • 功能: 主机发现同一链路上的 IPv6 路由器,并获取网络前缀等信息。
  • 报文类型:
    • 路由器请求 (Router Solicitation, RS): 主机发送 RS 报文,请求路由器发送 RA 报文。
    • 路由器通告 (Router Advertisement, RA): 路由器回复 RA 报文,其中包含:
      • 网络的 64 位前缀(用于 SLAAC)。
      • 链路 MTU (最大传输单元)。
      • M/O 标志(用于指导主机是否使用 DHCPv6,即 Managed/Other Config Flag)。
  • 对比: RS/RA 报文取代了 IPv4 的 ICMP 路由器发现。

c. 邻居不可达性检测 (Neighbor Unreachability Detection, NUD)

  • 功能: 持续跟踪邻居节点的可达性(例如,邻居的 MAC 地址是否仍在线)。
  • 原理: 通过周期性发送 NS 报文进行检测。

d. 重复地址检测 (Duplicate Address Detection, DAD)

  • 功能: 确保新配置的 IPv6 单播地址在本地链路上是唯一的。
  • 原理: 任何主机配置一个新地址后,会先发送一个 NS 报文,目标地址是该拟使用地址的组播地址。如果在规定时间内没有收到 NA 响应,则认为该地址唯一。

e. 重定向 (Redirect)

  • 功能: 路由器告诉主机有更好的第一跳路由器路径。
  • 对比: 与 IPv4 中的 ICMP 重定向功能类似。

3. NDP 与 ARP 核心区别对比 (NDP vs. ARP)

特性IPv4 (ARP)IPv6 (NDP)
实现协议ARP 独立协议ICMPv6 (报文类型 133-137)
地址解析报文ARP Request / ARP ReplyNeighbor Solicitation (NS) / Neighbor Advertisement (NA)
广播/组播广播 (Broadcast)组播 (Multicast)
MAC地址查找广播 ARP Request目标节点的特定组播地址 (Solicited-Node Multicast Address)
路由器发现需要额外的 ICMP 路由器发现协议集成在 NDP 中 (RS/RA 报文)
重复地址检测无内置机制集成在 NDP 中 (DAD 功能)

最重要区别:从广播到组播

IPv4 ARP Request 使用广播,会中断同一网段上所有设备的 CPU 处理。

IPv6 NDP 使用组播,具体是**目标节点组播地址 (Solicited-Node Multicast Address)**。

  • 原理: 每个 IPv6 接口都会自动订阅一个组播地址,该组播地址由 FF02::1:FF 加上该接口 IPv6 地址的最后 24 位组成。
  • 好处: 只有 IPv6 地址与组播地址最后 24 位匹配的设备才会唤醒并处理 NS 报文,大大降低了网络中其他设备的负载。

💻手动配置ipv6地址

配置GUA地址

假设局域网使用以下网络前缀:

网络前缀: 2001:DB8:ACAD:1::/64

我们将为三台设备手动分配以下完整的 IPv6 地址和默认网关(假设默认网关是路由器接口)。

设备角色IPv6 地址 (GUA)默认网关 (Router)
路由器接口默认网关2001:DB8:ACAD:1::1/64N/A
机器 A终端设备2001:DB8:ACAD:1::A/642001:DB8:ACAD:1::1
机器 B终端设备2001:DB8:ACAD:1::B/642001:DB8:ACAD:1::1
  1. 路由器接口配置(作为默认网关)

在 Cisco 路由器上配置接口地址是启用 IPv6 路由的第一步。

1
2
3
4
5
6
7
8
9
10
11
12
13
Router> enable
Router# configure terminal
Router(config)# ipv6 unicast-routing
! 必须先全局启用 IPv6 路由
Router(config)# interface GigabitEthernet0/1
! 替换为您的实际接口
Router(config-if)# ipv6 address 2001:DB8:ACAD:1::1/64
! 配置地址和前缀长度
Router(config-if)# no shutdown
! 启用接口
Router(config-if)# end
Router# show ipv6 interface brief
! 验证配置
  1. 机器 A 配置(以 Windows 10/11 为例)

  2. 打开 控制面板 -> 网络和 Internet -> 网络和共享中心

  3. 点击左侧的 更改适配器设置

  4. 右键点击您要配置的 以太网/Wi-Fi 适配器,选择 属性

  5. 在弹出窗口中,找到并双击 **Internet 协议版本 6 (TCP/IPv6)**。

  6. 选择 使用下面的 IPv6 地址,并手动输入以下信息:

字段输入值
IPv6 地址2001:DB8:ACAD:1::A
子网前缀长度64
默认网关2001:DB8:ACAD:1::1
  1. 机器 B 配置(以 Linux 命令行工具为例)

在大多数现代 Linux 发行版中,您可以使用 ip 命令进行配置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 假设网卡名称是 eth0 或 ens33,请根据实际情况替换

# 1. 查看当前 IPv6 配置
ip -6 addr show

# 2. 手动添加 IPv6 地址
sudo ip -6 addr add 2001:DB8:ACAD:1::B/64 dev eth0
# 地址/前缀长度 + 接口名称

# 3. 手动添加默认网关
sudo ip -6 route add default via 2001:DB8:ACAD:1::1 dev eth0
# 添加默认路由

# 4. 再次验证配置
ip -6 addr show
ip -6 route show

配置完成后,进行以下验证步骤:

  1. 在任意机器上:使用 ping 2001:DB8:ACAD:1::1 (ping 路由器网关) 确保您能到达默认网关。
  2. 在机器 A 上:使用 ping 2001:DB8:ACAD:1::B 确保您能 ping 通另一台机器。

如果 ping 命令成功,则说明您的手动 IPv6 配置是正确的,并且所有设备处于同一链路(局域网)中。

如果仅在本地局域网(或内部网络)范围内通信,同时确保这些地址的数据包不会被路由到互联网,应该使用以下两种地址类型:

配置LLA

最严格的本地通信——链路本地地址 (Link-Local Address, LLA),链路本地地址是实现“仅本地局域网访问”的最纯粹方式。

核心特点:

  • 前缀: FE80::/10
  • 路由性: 绝对不可路由。任何路由器在接收到源地址或目标地址是 FE80::/10 的数据包时,都必须将其丢弃,不会转发到其他网段。
  • 适用范围: 仅限于一个物理链路(即单台交换机连接的同一个网段)。

配置方法:

在局域网中,完全依赖 LLA 进行通信(例如,如果您想使用 LLA 作为默认网关地址):

1. 路由器接口配置:

您可以在路由器接口上手动指定 LLA,尽管路由器通常会自动生成一个。

1
2
3
4
5
Router(config)# interface GigabitEthernet0/1 
Router(config-if)# ipv6 address FE80::1 link-local
! 必须添加 "link-local" 关键字来指定这是一个 LLA
Router(config-if)# no shutdown
! 注意:由于 LLA 不可路由,您不能使用 FE80::1 作为 GUA 的默认网关

2. 主机配置(机器 A):

在 Windows/Linux 上,您只需要确保没有配置 GUA 或 ULA,并依赖 LLA 进行本地通信。

  • 目标地址: 要访问机器 B,您必须使用机器 B 的 LLA。
  • 重要提示: 由于 LLA 在不同网段上可以重复,您在进行 LLA 通信时,必须指定接口

例如,在 Windows 上 Ping 机器 B 的 LLA:

1
2
ping FE80::B%10  
! %10 是接口 ID 或接口名称,告诉操作系统使用哪个网卡发送数据包

例如,在 Linux 上 Ping 机器 B 的 LLA:

1
2
ping6 -I eth0 FE80::B 
! -I 指定了出口接口

配置ULA

内部网络路由但拒绝互联网访问——唯一本地地址 (Unique Local Address, ULA)

如果有一个稍微大一点的局域网,需要通过路由器划分多个子网,但仍然不想连接到公共互联网,ULA 是最佳选择。

核心特点:

  • 前缀: FC00::/7 (实际分配通常使用 FD00::/8)
  • 路由性: 可在内部网络中路由。路由器可以在使用 ULA 的不同子网之间转发数据包。
  • 拒绝性: ULA 在全局路由表中是被过滤和丢弃的,类似于 IPv4 中的私有地址 (RFC 1918)。

配置方法:

构建一个 ULA 网络,以实现内部可路由,外部不可达。

使用 ULA 前缀: FD00:1111:2222:1::/64 (这是一个随机生成的 ULA)

设备角色IPv6 地址 (ULA)默认网关 (Router)
路由器接口默认网关FD00:1111:2222:1::1/64N/A
机器 A终端设备FD00:1111:2222:1::A/64FD00:1111:2222:1::1
机器 B终端设备FD00:1111:2222:1::B/64FD00:1111:2222:1::1

1. 路由器接口配置:

1
2
3
4
5
6
7
Router> enable
Router# configure terminal
Router(config)# ipv6 unicast-routing
Router(config)# interface GigabitEthernet0/1
Router(config-if)# ipv6 address FD00:1111:2222:1::1/64
! 使用 ULA 地址和前缀长度
Router(config-if)# no shutdown

2. 主机配置 (机器 A/B):

配置步骤与之前配置 GUA 类似,只需将地址替换为 ULA 即可。

字段机器 A 输入值
IPv6 地址FD00:1111:2222:1::A
子网前缀长度64
默认网关FD00:1111:2222:1::1

对于单网段通信,使用 LLA (FE80::) 是最直接和底层的本地通信方式。

对于多网段、需要内部路由的内网,使用 ULA (FD00::/8) 是最符合需求的解决方案。