为什么IPv6难以取代IPv4
2020-07-29王雄
王雄
工程师的想象力是无穷的,在过去的十几年间,尝试通过各种办法为IPv4协议续命延缓IP资源耗尽的时间,不过在可预见的未来IPv4协议也终将被IPv6替代,我们也会拥有几乎用不完的IP地址。
网络层协议承担了分组转发和路由选择两大功能,它能够为上层提供在不同主机之间运输分组的职责,IP协议作为网络层协议,它虽然只能提供无连接的、不可靠的服务,但是它在今天的互联网中起到了极其关键的作用。
在一般情况下,当我们想要访问其他主机提供的服务时,都需要通过IP地址来访问目标主机,拥有了IP地址才能在互联网上被其他主机访问。IP地址就像家庭住址,需要保证所有主机IP地址的唯一性,这样才能找到正确的主机。
作为在1974年诞生的IP协议,第一个主要版本IPv4使用32位表示地址,总共可以提供232也就是4 294 967 296个IP地址。42亿个IP地址虽然看起来很多,但是可用地址的数量却一直在减少,早在2011年,顶级的IPv4地址就已经被全部分配出去了。
为了解决IP地址即将被耗尽的问题,IETF在1998年发布了IPv6协议的草稿,并在2017年正式成为互联网标准。IPv6使用128位的IP地址,总共可以有2128个地址,IPv6甚至可以为地球上的每粒沙子分配独立的地址。
新版本的互联网协议IPv6不仅能一劳永逸地解决IP地址即将被耗尽的问题,还能提高网络的传输速度以及安全性。IPv6协议的设计者最初认为随着IPv4地址的快速减少,IPv6会被快速采纳,它们最初估计IPv6协议会在2003年在全球部署,但是从今天的角度来看,这些预测还是过于乐观了。
本文想要分析的问题是,为什么IPv6协议有如此之多的好处并且能够解决IPv4的地址短缺问题,但是在距离最初预估的2003年后又过了17年,IPv6协议也没有被大规模采纳。我们在这里会讨论以下几个原因:
NAT技术很大程度上缓解了IPv4地址短缺的问题;
IPv6协议在设计时没有考虑与IPv4的兼容性问题;
更细粒度的管控IPv4地址并回收闲置的资源。
网络地址转换(Network Address Translation,NAT)是一种在IP数据包通过路由器时修改网络地址的技术,它能够将当前地址空间中的IP地址映射到另一个地址空间。当切换网络或者上游的ISP出现改变时,NAT技术可以避免修改网络中全部节点的IP,可以将NAT技术理解成一个转换表,其中存储着外部地址和端口到内部地址的转换关系。
当数据包从内部访问外部网络时,NAT会为当前请求分配一个端口、覆写数据包中的源地址和端口并将地址和端口信息存储到本地的转换表中。当数据包从外部进入网络内部时,NAT会根据数据包的IP地址和端口号查找到私有网络中对应的主机和端口号并覆写数据包中的目的地址和端口。
通过NAT这一中间层,我们不仅可保护私有的网络,还能缓解IP地址的短缺问题。不过NAT技术并不是只有好处,它也带来了很多的问题,在NAT网络下的主机并不能建立起真正的端到端连接,也不能参与部分因特网协议,除此之外,NAT协议带来了以下备受争议的问题:
①NAT使用的端口号是用于进程寻址的,而不是用于主机寻址;
②NAT路由器作为第三层(网络层)的设备,它应当只处理达到网络层的分组;
③NAT违反了主机应当直接彼此对话的原则。
虽然NAT带来了很多的争议和问题,但是NAT已经成为整个互联网中广泛使用的技术,工程师也尝试通过各种NAT穿越技术来解决问题,例如:SOCKS,UPnP,ALG等。
软件和协议都会遵循当下或可预测的未来进行设计,但是我们很难预测未来的具体走势,当下的设计也会随着场景的变换变得逐渐不适用。所有的软件和协议都需要更新迭代,在更新的过程中我们就需要考虑兼容性,兼容性一般可以分成向前兼容(Forward compatibility)和向后兼容(Backward compatibility):
向前兼容:老版本系统可以接收并处理新版本系统产生的数据;
向后兼容:新版本系统可以接收并处理老版本系统产生的数据。
这2种不同的兼容性可以起到不同的作用,如果IPv6協议与IPv4是向前兼容的,那么用于处理IPv4协议的硬件设备可以不用更新就能处理IPv6的数据;如果IPv6协议与IPv4协议是向后兼容的,那么IPv6的硬件可以同时处理IPv4和IPv6的数据包,只要使用IPv6设备替换IPv4设备就可以使整个网络无缝升级。
如果IPv4和IPv6能够具有向前兼容性或者向后兼容性,那么IPv6协议的推进也可能也没有这么复杂了,但是IPv6协议在设计时没有考虑与更早版本协议的兼容性。虽然IPv4和IPv6都是IP协议,不过因为它们两者互不兼容,所以只能通过双协议栈、隧道技术或者NAT64实现协议的过渡。
IPv6协议想要摆脱历史的包袱,实现完全不兼容的设计是可以理解的,在过去几十年应用IP协议的过程中,我们遇到了很多的问题,虽然要背着历史的包袱继续前行也不是不可以,但是作为互联网的核心协议,虽然IP协议的设计者承认IPv6没有实现向前兼容是最大的错误,但是笔者认为通过不兼容的方式快速摆脱历史的包袱从长期来看也是好事。
IPv4的地址虽然是稀缺资源,不过与其他的稀缺资源一样,如何合理分配资源并提供使用率一直都是比较大的问题。InternetAssignedNumbersAuthority(IANA)和RegionalInternet Registries(RIR)是负责分配IP地址的组织,除了一些为专有网络预留的IP地址之外,剩余的地址一般都是通过子网以地址块的形式分配。
在互联网协议的早期开发阶段,子网是通过IP地址最左侧的8位划分子网,但是因为这种方式只允许划分256个网络,所以在1981年被分类网络架构迅速替代。分类网络架构中包含A,B,C三类网络。
A类地址只能分配给128个不同的网络,每个网络中可以包含1 600万主机,而C类地址可以分配給200万组织,网络中可以包含200多个主机。通过对IP地址的分类,能够更合理地分配IP地址块,不过虽然它对IP地址进行了分类,但是它对地址的划分还是比较粗糙。
IETF在1993年提出的无类别域间路由(Classless Inter Domain Routing,CIDR)替代了分类网络架构,CIDR基于可变长子网掩码(Variable-length Subnet Masking,VLSM),它的主要目的有2个:
缓解互联网中路由器中转发表的增长速度;
缓解IPv4地址耗尽的速度。
分类网络架构中对地址的划分还是有些过于理想,过小的地址块往往不够用,稍大的地址块却会造成较大的浪费。与分类网络架构只使用8、16和24固定长度的子网掩码将IP地址块划分成三类不同,CIDR会使用可变长度的子网掩码来划分地址块,如下所示的CIDR表示中,N表示前缀长度,它可以是从0到32的任意值:A.B.C.D/N。
A.B.C.D/8、A.B.C.D/16和A.B.C.D/24就可以分别表示分类网络架构中的A,B,C三类不同的地址块,同时也可以使用其他的数字更灵活的表示特定网络数和主机数的子网。
除了更细粒度的地址分配之外,回收不再使用的IP资源并投入再利用也是延长IPv4寿命的重要手段。从IP地址的分配中,我们能看到资源从充足到稀缺,人对于资源使用态度的转变,从最开始粗糙的分配方式到后来细粒度的管控,充足的资源总是会被滥用,只有当资源真正变得稀缺时,我们才开始精打细算。
IPv4协议从1981年发布到今天已经过去了将近40年,在过去的这段时间里,它作为互联网协议簇中的重要协议承担着分组转发和路由选择的重要责任,随着网络环境和终端设备变得越来越复杂,我们也需要更多的IP地址来满足今天的需求。
IPv6协议摆脱了很多历史的包袱轻装前行,虽然越来越多的网站和网络设备都开始支持IPv6,但是因为很多原因IPv6最终也很难完全取代IPv4协议,最后回顾一下本文内容:
NAT技术可以很大程度上缓解IPv4的地址短缺问题并且能够保护私有内部的网络,提供防火墙的功能;
IPv4与IPv6协议完全不兼容,需要引入双协议栈、隧道技术或者NAT64解决兼容性问题,而应用这些技术也需要额外的成本;
通过对资源的细粒度管控并回收不再使用的IP地址,可以延缓IP地址耗尽的时间。
工程师的想象力是无穷的,在过去的十几年间,我们尝试通过各种办法为IPv4协议续命延缓IP资源耗尽的时间,不过在可预见的未来,IPv4协议终将被IPv6替代,也会拥有几乎用不完的IP地址。