IPv6 基础知识,它是什么以及为何重要
互联网的 IPv4 地址已经耗尽。IPv6 通过 128 位地址和更简洁的设计解决了这个问题。以下是你需要了解的内容。
为什么需要 IPv6#
IPv4 地址已经耗尽。不是「可能耗尽」或「将会耗尽」,而是实实在在地耗尽了。IANA 在 2011 年将最后的地址块分配给了区域注册机构。到 2015 年,大多数地区已经用完了它们的地址池。
TL;DR - 快速摘要
要点:
- IPv4 已耗尽其 43 亿个地址;IPv6 提供 340 涧个地址
- IPv6 具有简化的 40 字节固定头部(相比 IPv4 的 20-60 字节可变头部),实现更快的路由
- 自动配置(SLAAC)和内置 IPsec 消除了对 DHCP 和 NAT 的需求
- 地址压缩使用前导零删除和
::表示连续的零(每个地址只能使用一次)
跳转至: 压缩规则 | IPv6 vs IPv4 | 特殊地址
IPv4 的 32 位地址空间为我们提供了约 43 亿个地址。在 1981 年,这似乎是无穷无尽的。但智能手机、物联网设备、服务器以及其他所有连接到互联网的设备消耗地址的速度比任何人预测的都要快。我们通过 NAT、运营商级 NAT 以及越来越复杂的技术手段来解决这个问题。这些手段虽然有效,但它们增加了延迟,破坏了端到端连接,并使网络管理变得更加困难。
IPv6 使用 128 位地址。这相当于 340 涧个地址,足以为地球表面的每平方米分配数十亿个地址。我们不会用完。
128 位地址格式#
IPv6 地址看起来像这样:
2001:0db8:85a3:0000:0000:8a2e:0370:7334八组四位十六进制数字,用冒号分隔。每组代表 16 位(4 个十六进制数字 × 每个数字 4 位 = 16 位)。八组 × 16 位 = 总共 128 位。
十六进制使用 0-9 和 a-f。大小写无关紧要,2001:DB8::1 和 2001:db8::1 是相同的。
压缩规则#
写出所有 32 个十六进制数字很繁琐。IPv6 有两条压缩规则来缩短地址。
规则 1:删除前导零#
你可以从任何组中删除前导零:
2001:0db8:0000:0042:0000:8a2e:0370:7334
↓
2001:db8:0:42:0:8a2e:370:7334每组仍需要至少一位数字。你不能将 0000 压缩为空,这就是规则 2 要处理的。
规则 2:用 :: 替换连续的零#
一个连续的全零组序列可以变成 ::。这在每个地址中只能使用一次。使用两次会产生歧义,你无法判断每个 :: 代表多少个零组。
2001:db8:0:0:0:0:0:1
↓
2001:db8::1选择最长的零串。如果有两个相等的零串,压缩第一个(尽管大多数工具按惯例压缩最左边的)。
每个地址只能有一个 ::
你只能使用一次 ::。地址 2001::db8::1 是无效的,因为你无法确定每个 :: 代表多少个零组。
实际示例#
以下是压缩在实际地址上的工作方式:
| 完整地址 | 压缩形式 | 说明 |
|---|---|---|
2001:0db8:0000:0000:0000:0000:0000:0001 | 2001:db8::1 | 带主机 1 的文档前缀 |
fe80:0000:0000:0000:0000:0000:0000:0001 | fe80::1 | 链路本地环回 |
0000:0000:0000:0000:0000:0000:0000:0001 | ::1 | 全局环回 |
0000:0000:0000:0000:0000:0000:0000:0000 | :: | 未指定地址 |
2001:0db8:85a3:0000:0000:8a2e:0370:7334 | 2001:db8:85a3::8a2e:370:7334 | 地址中间的零 |
使用我们的 IPv6 验证器尝试不同的格式,看看压缩是如何工作的。
IPv6 vs IPv4:不仅仅是更大#
大多数比较都集中在地址空间上。这是公平的,这是 IPv6 存在的主要原因。但协议重新设计也解决了其他问题。
| 特性 | IPv4 | IPv6 | 影响 |
|---|---|---|---|
| 地址长度 | 32 位 | 128 位 | 340 涧 vs 43 亿个地址 |
| 地址格式 | 点分十进制 | 冒号十六进制 | 更容易在半字节边界上进行子网划分 |
| 头部大小 | 20-60 字节(可变) | 40 字节(固定) | 更快的路由决策 |
| 头部校验和 | 有 | 无 | 路由器每个数据包的工作更少 |
| 分片 | 任何路由器 | 仅源 | 路由器工作更少,需要路径 MTU 发现 |
| NAT 需求 | 几乎普遍 | 不需要 | 恢复端到端连接 |
| IPsec | 后来添加 | 从一开始就设计进去 | 更容易的加密通信 |
| 自动配置 | 需要 DHCP | 内置 SLAAC | 设备可以自行配置 |
超越地址空间的关键改进#
简化的头部#
IPv4 的头部有 12 个必需字段和可将其扩展到 60 字节的选项。路由器必须为每个数据包解析所有这些内容。IPv6 的头部始终是 40 字节,有 8 个字段。扩展头部处理任何额外的内容,但大多数数据包不需要它们。路由器处理数据包更快。
不需要 NAT#
使用 IPv4,几乎每个家庭和办公网络都隐藏在 NAT 后面。NAT 破坏了嵌入 IP 地址的协议(如用于 VoIP 的 SIP),使对等连接变得更加困难,并为路由器添加状态。有了足够的 IPv6 地址用于所有设备,设备可以拥有全局可路由的地址。如果你愿意,你的笔记本电脑、手机和智能冰箱都可以端到端访问。(防火墙仍然存在,你可以在没有 NAT 的情况下阻止入站流量。)
自动配置(SLAAC)#
IPv6 设备可以使用 SLAAC(无状态地址自动配置)自行配置。路由器通告网络前缀,设备生成自己的地址。不需要 DHCP 服务器。你仍然可以使用 DHCPv6 进行集中管理,但基本连接无需它即可工作。
内置 IPsec#
IPv4 在部署多年后添加了 IPsec。IPv6 从一开始就包含了它。设计更清晰。(IPsec 现在是推荐而非强制性的,但集成仍然比 IPv4 的改装要好。)
实际性能
在实践中,IPv6 通常比 IPv4 性能更好。Facebook 报告称,IPv6 用户的连接速度提高了 10-15%,因为 IPv6 流量采用更直接的路径,没有运营商级 NAT,更少的中间设备,更少的复杂性。
你会看到的特殊地址#
环回:::1#
IPv6 环回地址。与 IPv4 中的 127.0.0.1 目的相同,发往此地址的流量保留在本地机器上。IPv6 只有一个环回地址,而不是 IPv4 的整个 127.0.0.0/8 块。
未指定:::#
表示「无地址」或「任何地址」。当设备还没有地址时,或在监听套接字配置中绑定到所有接口时,你会看到这个。
链路本地:fe80::/10#
每个 IPv6 接口都会自动生成一个以 fe80:: 开头的链路本地地址。这些地址仅在本地网段上工作,路由器不会转发它们。它们对于邻居发现、路由器通告和本地通信至关重要。你的接口可能是 fe80::1 或 fe80::a4b2:c3d4:e5f6:7890,具体取决于后缀的生成方式。
文档:2001:db8::/32#
为示例和文档保留。任何以 2001:db8: 开头的地址都保证永远不会在真实互联网中分配。这就是为什么你会在教程、RFC 和这些示例中看到它。如果你正在编写文档,请使用 2001:db8:: 前缀,这样读者就不会意外配置生产地址。
URL 中的 IPv6#
URL 中的 IPv6 地址需要方括号。没有它们,地址中的冒号会与端口分隔符冲突:
http://[2001:db8::1]/
http://[2001:db8::1]:8080/
https://[2001:db8:85a3::8a2e:370:7334]/api/endpoint方括号清楚地表明地址在哪里结束,端口在哪里开始。你将在浏览器 URL、配置文件以及任何其他将 IPv6 地址与其他组件组合的地方使用这种表示法。
我们今天所处的位置#
IPv6 的采用是真实的,但不均衡。谷歌报告称,他们约 40% 的流量通过 IPv6 到达。主要云服务提供商(AWS、Google Cloud、Azure)、CDN(Cloudflare、Akamai)和 ISP(Comcast、T-Mobile、Deutsche Telekom)都有强大的 IPv6 支持。移动网络通常运行纯 IPv6,在需要时转换回 IPv4。
企业网络落后。许多内部工具和安全设备仍然将 IPv6 视为可选。这正在改变,但速度很慢。
好消息是:IPv4 和 IPv6 并行运行。双栈网络同时支持两者。你不必一夜之间翻转开关并转换所有内容。但如果你正在构建新系统,请从一开始就为 IPv6 设计它们。以后添加更困难。
相关文章#
- IPv6 地址类型:全局、链路本地、多播详解 - 深入了解不同类型的 IPv6 地址,包括全局单播、链路本地和多播地址的使用场景。
- IPv6 子网划分:从 /48 到 /64 - 学习如何将 IPv6 地址空间划分为子网,比 IPv4 更简单直观。
亲自尝试
使用我们的 IPv6 验证器练习编写和压缩 IPv6 地址。它会显示规范格式并捕获常见错误。