任何支持IPv6的通用IP协议栈也支持IPv4。也就是说,它是双堆栈的能力。“通用”是一个重要的限定符:当然会有专门的设备只支持IPv6。但这些设备——直到未来某个不确定的时间IPv4不再存在——在“围墙花园”应用中发挥作用,比如具有明显边界的传感器或控制网络,它们永远不会与IPv4交互。双叠加的重要意义在于,如果在双向对话中,其中一个设备可以同时使用IPv4和IPv6,那么另一端的设备是否只能使用其中一个版本并不重要。只要两个说话者中有一个是“双语”的,对话就可以进行。
因此,双叠加是开始部署IPv6最简单的方法。如果一个支持IPv6的网络中的所有设备都是双层的,那么它们就可以与任何目标通信,无论是IPv4还是IPv6。在部署的早期阶段,当公共Internet上的绝大多数目标内容仍然仅使用ipv4时,这是极其重要的。
对偶叠加的突出问题,正如我在以前的文章这就是为什么我们需要开始部署IPv6的主要原因,因为我们正在迅速耗尽IPv4地址。如果IPv4地址已经用完,如何在每个接口上同时放置IPv6地址和IPv4地址?
事实上,我们在很久以前就已经耗尽了全球唯一的IPv4地址。你可能会问(听起来有点像Tevye),“这是怎么回事?”IANA还有28 /8个IPv4地址块还没有分配。也就是大约4.69亿个地址。我们的IPv4地址还没有用完!”
我的答案是我们给了自己错觉通过很好地共享我们拥有的地址,就可以获得足够的IPv4地址。
共享的一种方法是使用DHCP动态地址分配。我们假设并不是一个给定网络上的所有设备都需要同时在线,所以当设备需要时,我们从有限的池中借出一个地址,当设备用完这个地址时收回它。然后,地址可以给一些其他需要的设备。我们在统计上复用地址池。
这在20世纪90年代运行良好,但如今越来越多的联网设备希望“一直开着”。这意味着设备会保留它们被给予的地址,减少了在需要的基础上可以共享的地址的数量。
共享全球唯一IPv4地址的另一种方法是备受推崇的网络地址转换(NAT),这是迄今为止更为成功的一种方法。特别是NAT44,它将一个IPv4地址转换为另一个IPv4地址。私有(RFC1918) IPv4地址在一个给定的网络中使用;这里的假设是,在一个网络中,大多数IP设备只希望与同一网络中的其他IP设备通信。
但是因为RFC1918地址可以在不同的网络中重用,所以它们不是全局唯一的。当一个网络上的设备希望与跨公共Internet可访问的不同管理域中的设备进行通信时,不能保证这两个设备不使用相同的地址。公共域内的路由器也无法区分使用相同地址块的网络。
因此,我们将NAT44(通常驻留在路由器或防火墙中)放在网络的边缘,在那里它与公共互联网接口。NAT有一个或多个全局唯一的IPv4地址。当包从它的内部接口或私有接口传递到外部接口或公共接口时,NAT将包的私有IPv4地址替换为它的一个公共IPv4地址。NAT通过将内部地址映射到外部地址来“记住”包来自哪个内部设备。
如果NAT44没有超出我目前所描述的范围,那么它将面临与动态地址分配相同的问题:可用地址池将无法扩展到“始终在线”设备的现代网络的需求。由于越来越多的数据交换是通过公共Internet进行的,认为大多数网络内部设备在大多数情况下与其他网络内部设备通信的假设已经不再有效。
NAT44不仅使用了它的公共IPv4地址池,还使用了每个地址可用的端口号,从而克服了这个伸缩性问题。TCP和UDP报头最多支持65,536个端口号,其中大部分是未使用的。因此,通过将内部的[私有地址,端口]元组映射到外部的[公共地址,端口]元组,NAT44实际上映射的是会话而不是设备,并且可以通过每个公共地址支持大量的会话。
这种方法有不同的叫法网络地址和端口转换(组织),端口地址转换(PAT),解决重载,或IP伪装在过去。现在它被认为是NAT44的一个标准函数。
NAT早在20世纪90年代中期就已经存在了,当时它是几个短期解决方案之一(还有DHCP、RFC1918地址和CIDR),在下一代互联网协议(最终成为IPv6)被开发出来的时候,它被用来减缓IPv4的消耗。当时它被称为NAT,而不是NAT44,因为将一个IPv4地址转换成另一个IPv4地址是唯一的选择。没有必要将其与NAT64区分开来,因为IPv6还不存在,所以一些可以在IPv4和IPv6之间转换的东西也还不存在。
回到服务提供商所面临的双栈困境:为什么不将双栈连接的IPv4的一半NAT给客户呢?这使得客户在开始使用IPv6的同时仍然提供IPv4连接。
这是基础载波级NAT (CGN)。传统NAT - CPE NAT -出现在客户网络的边缘,在那里它连接到服务提供商,并在客户网络中的私有IPv4地址和提供商分配的一个或几个公共地址之间转换。中广核出现在服务提供商的网络中。它也可以在私有IPv4地址和公共IPv4地址之间进行转换;中广核的私人部门面对的是该供应商的客户。
换句话说,中广核允许服务提供商为他们的客户分配私有的RFC 1918 IPv4地址,而不是公共的,全球唯一的IPv4地址。NAT再一次拯救了日益减少的地址供应。
这也提出了一个问题:为什么不直接使用中广核而忘记IPv6呢?在我们进一步研究了中国广核集团的各种问题和架构选择之后,我将在稍后的一篇文章中解决这个问题(请原谅双关语)。
围绕中广核集团的第一个问题是名称。中广核和任何其他NAT之间没有真正的区别,除了假设如果它出现在服务提供商网络中,它很可能会出现在一个运营商类路由器上。但并没有特定的品质使中广核自身成为“航母级别”。
由于没有什么能真正定义中广核的“运营商等级”部分,一项运动正在进行,将其更名为“大规模NAT”(LSN)。我在本文开始时使用了CGN这个术语,因为大多数人仍然熟悉这个术语。但是我打算在后续文章中使用“大规模NAT”,现在我有机会解释了为什么名称正在改变:LSN更好地反映了服务于大量服务提供商客户的NAT的意图,比如在一个单一的PoP中,它必须扩展到大量客户流量。
另外,通过从名称中去掉“carrier”引用,它更好地反映了这样一个事实:LSN是一种NAT解决方案,不仅可以在服务提供者场景中使用。它在任何大规模网络中都是有用的。
除了需要扩展之外,LSN的另一个大问题是,它被用来将RFC 1918地址分配给客户,然后客户在他们自己的NATs的“公共”端使用这些地址。然后,这些CPE NATs将从客户端RFC 1918地址转换为提供方RFC 1918地址。因此,终端用户流量现在通过两层或分层的NAT架构,而不是单一设备。
这个架构,以及在LSN和CPE NATs之间拥有私有IPv4地址所引发的问题,是我下一篇文章的主题。