Skip to content

IPv6 - 子网划分

在 IPv4 中,子网划分涉及从地址的主机部分 (host portion) 借位来创建子网位 (subnet bits),这通常会减少每个子网可用的主机地址数量。这在有类别 (classful) 或更常见的无类别 (classless) (CIDR) 寻址方案中完成。

IPv6 子网划分在概念上类似,但由于巨大的地址空间 (address space) 和用于接口寻址的标准 /64 边界而更简单。一个 IPv6 地址长 128 比特。通常,前 64 比特是网络前缀 (network prefix)(包括站点前缀 Site Prefix 和子网 ID Subnet ID),后 64 比特是接口 ID (Interface ID)(主机部分)。

一个常见场景:ISP (互联网服务提供商) 为一个组织分配一个 /48 前缀 (prefix)(例如,2001:db8:abcd::/48)。这为该组织提供了 16 比特用于子网划分(从第 49 比特到第 64 比特),同时为每个子网保留 /64。这使得可以有 216 = 65,536 个子网,每个子网有 264 个可能的接口 ID。

可视化表示,对于 /48 的分配 (allocation):

[全球路由前缀 (Global Routing Prefix) (48 比特)] [子网 ID (Subnet ID) (16 比特)] [接口 ID (Interface ID) (64 比特)] 示例: |-------2001:db8:abcd-------|----0000 到 FFFF----|----接口特定 (Interface Specific)----|

为子网 ID 指定的 16 比特允许一个组织创建大量的内部网络 (internal networks)。例如:

  • 子网 1: 2001:db8:abcd:0001::/64
  • 子网 2: 2001:db8:abcd:0002::/64
  • …直到…
  • 子网 65536: 2001:db8:abcd:ffff::/64

强烈建议为所有最终用户子网 (end-user subnets)(驻留主机、服务器或其他终端设备 (end devices) 的链路 links)使用 /64 前缀。这是因为无状态地址自动配置 (Stateless Address Autoconfiguration, SLAAC) 需要一个 /64 才能正常工作 (function correctly),因为它使用 64 比特接口 ID。虽然技术上可以在子网中使用更长的前缀 (longer prefixes)(例如 /120),但这会破坏 SLAAC 并使寻址复杂化 (complicates addressing)。

对于点对点链路 (point-to-point links)(仅连接两台路由器的链路),出于简单性和一致性,通常也使用 /64,尽管 RFC 6164 建议在此类链路上使用 /127 以提高安全性 (security) 和效率 (efficiency),从而防止邻居缓存耗尽攻击 (neighbor cache exhaustion attacks)。然而,即使对于这些链路,/64 仍然是非常普遍的做法。

本质上,IPv6 子网划分通常涉及通过利用指定给子网 ID 的比特,将更大的前缀(例如从 ISP 收到的 /48 或 /56)划分为多个 /64 子网。每个 /64 中 264 个主机地址的巨大数量意味着在一个子网内不存在实际的主机地址短缺。