同时两个互联网

IPv6 与 IPv4 在线路上并不兼容:一台仅 IPv6 的主机无法直接与一台仅 IPv4 的服务器交谈,因为这些数据包使用不同的地址大小与报头。从来就不会有一个所有人都在午夜切换的决断之日,所以互联网花了数年并排运行这两个协议、并在它们之间架桥。这些过渡技术之存在,是为了让那种共存对用户不可见,而旧的协议则被缓缓地退役。

双栈:径直把两者都跑起来

最简单的办法便是双栈:一台主机、路由器或服务器同时运行 IPv4 与 IPv6,每个里各有一个地址。当 DNS 中一个名字既有一条 A 记录(IPv4)、又有一条 记录(IPv6)时,一个双栈客户端可经由任一者抵达它。当下的偏好是:在 IPv6 可用时使用它、否则退回到 IPv4。双栈是大多数网络最先采取的路径,因为无物需要被转换;每个协议都径直地原生运行。

Happy Eyeballs:把那些失败藏起来

唯有当一条损坏的 IPv6 路径不让用户久等时,偏好 IPv6 才是惬意的。Happy Eyeballs(RFC 8305)以让两者赛跑来解决此事:客户端发起一个 IPv6 连接,并在一个极短的领先之后、也发起一个 IPv4 连接,继而使用率先完成的那一个、并悄然丢弃另一个。其效果便是:当 IPv6 健康时用户得到它,而当它不健康时、得到一个即时且不被察觉的、向 IPv4 的退回。这个算法,是为何启用 IPv6 鲜少让任何东西感觉更慢的一大部分缘由。

内嵌于 IPv6 中的 IPv4 地址

数种机制借由在一个 IPv6 地址内部携带一个 IPv4 地址而运作,而工具能识别这些形式。IPv4 映射范围 ::ffff:0:0/96 向一个双栈套接字表示一个 IPv4 地址,所以 ::ffff:192.0.2.1 便是 IPv4 主机 192.0.2.1 在一个 IPv6 API 中现身的方式。转换系统使用众所周知的前缀 64:ff9b::/96(RFC 6052)、把一个 IPv4 目的地内嵌进一个可被路由到转换器的 IPv6 地址。识别出一个内嵌的 IPv4 地址,便告诉你:那看似一个 IPv6 目的地之物,其实是一条通往 IPv4 互联网上某物的路径。

NAT64 与 DNS64:仅 IPv6 抵达 IPv4

对那些已转为仅 IPv6 的网络,NAT64(RFC 6146)与 DNS64(RFC 6147)让那些客户端仍能抵达仅 IPv4 的服务器。DNS64 为一个仅 IPv4 的名字合成一条 AAAA 记录——把其 IPv4 地址内嵌进那众所周知的前缀,于是客户端得到一个可供连接的 IPv6 目的地。NAT64 继而坐镇于边界,在出向之路上把那些 IPv6 数据包转换为 IPv4、并在入向之路上转换回来。二者合力,让一个现代的仅 IPv6 网络表现得仿佛整个互联网都可经由 IPv6 抵达。

464XLAT,应对顽固的 IPv4 应用

某些应用仍传递字面的 IPv4 地址,且即便有 NAT64 在场、也在一个仅 IPv6 的网络上崩坏。464XLAT(RFC 6877),在移动运营商处被广泛部署,在客户端添加一小段转换:在本地呈现一个私有的 IPv4 地址,并把它跨越仅 IPv6 的网络隧道传输到一个 NAT64 网关。它便是为何仅 IPv6 的移动网络仍能运行仅 IPv4 的应用、而用户毫无察觉之缘由。

为何原生 IPv6 中没有 NAT

来自 IPv4 管理员的一个常见问题,便是 去了哪里。原生 IPv6 给每一台主机一个全局可路由的地址,所以那种定义了 IPv4 家庭与办公网络的、共享地址的 NAT 便径直地不再必要;连通是端到端的,而提供边界的是一道有状态的防火墙、而非地址转换。在确实需要私有的、不被路由的编址之处,IPv6 在 fc00::/7 中提供唯一本地地址(Unique Local Addresses),即工具所识别的那个 ULA 类型。在 IPv6 边缘所见的转换,是为了抵达那个协议,而非为了把一个稀缺的地址空间拉伸开来。

是脚手架,而非目的地

所有这套机器——双栈、Happy Eyeballs、NAT64、DNS64、464XLAT——都是过渡性的脚手架。其终态是处处皆原生 IPv6,而转换仅在抵达任何残存的 IPv4 时方才需要。在此期间,识别那些内嵌 IPv4 的形式、并理解当下是哪一座桥在起作用,会帮助你推断一条或许悄然在两个互联网之间穿行的路径。当工具把一个地址标记为 IPv4 映射、或坐落于那个转换前缀之中时,那便是你的提示:一个 IPv4 端点正藏身于一个 IPv6 地址之内。