虽然IPv6最初是为了解决IPv4有限的地址空间问题,然而随着IPv6的设计最终出台,其巨大的地址空间反而成了次要的特征,实际上,如果真的要解决地址空间大小问题,大可不必将地址空间扩大达128位之多,48位就已经足够好了,全世界这么多的设备,对于以太网来讲,每个设备的每个接口都有一个48位的MAC地址,现如今都没有MAC地址用尽的情况,如果考虑到非以太网设备,比如移动设备,家用电器之类,最多64位的地址空间足矣!
尽管如此,IPv6还是使用了128位的地址空间,这不是多设计者疯了,个中原因还真的很有趣。做应用软件的注意了,这些原因和原则可能会使你们不服气,然而IT界的任何概念都是软件/硬件/社会工程学三者合力的结果,不是纯算法可以推就的。
1.IPv4地址分配的区域不平衡
IPv4最初使用了分类地址分配法,也就是A,B,C类地址,三类地址的空间大小差别很大,虽然没有规定必须是美国机构才能获得A类地址,但是事实上A类地址几乎都在美利坚,这很不公平,很气愤?是的,然而这这种分配法却无意间做了一件好事,因为它使得大量的IPv4地址可以基于地理区域汇聚在美国,用一个简单的例子可以说明这种无心插柳柳成荫的做法,如下图所示:
可见,不均衡的地域分配方式反而有效的减少了路由表的条目,然而随着互联网越来越多的扩展到其他地区,这种分类分配法就不适用了,因为分类法的路由寻址仅仅区分地址类别而不能很好的支持路由汇聚,互联网节点的增多使得路由器不堪重负,于是CIDR出现了,可是CIDR之前,大量的地址已经预先分配好了,因此CIDR只是缓解了问题,而没有解决问题,这个问题就是:1.地址空间有限且已经分布不均;2.路由表负担过重。
2.IPv6设计时考虑了地理区域可扩展性
IPv6设计时必须深刻吸取IPv4的教训,因此不再将地址空间分配不平均的类别,考虑到IPv4的分类法被设计时仅仅考虑到了ISP政策因素,IPv6将这种政策因素留给了具体的分配者,不再在地址本身加以约束。
2.1.IPv6必须使用一种公平的方式平坦分布所有的地址。
2.2.IPv6仅仅分配到机构站点级别,各个站点内部的网络拓扑可以自由生长。
满足以上的需求的最明显的设计就是CIDR的相反的思想,为了满足公平性,考虑IPv4的分类做法,将IPv6地址全部归为一类,即固定的前缀位数即可,为了支持分级,IPv6设计了两级分配,在每一个第一级固定前缀下,又有第二级固定长度前缀用于各大ISP内部的子网划分,为了能保持各个站点的主机或者任何设备可以自由生长,必须为哪怕一个很小的站点保留一个足够大的拓扑生长空间,这块空间不受地址分配机构的干涉。
因此IPv6地址的分配机制仅仅是分配到各机构,而不是分配到各设备,因为机构的数量受到政治,地理,文化等因素的限制,始终在一个可以预知的范围内,而设备的数量却不是可以预知的,分配地址到各设备的工作就留给自动配置或者人为配置了。
IPv6保留了45位空间供一级站点机构使用,使用16位空间供二级站点机构使用,这在地球上是足够了。记住,IPv6的设计目的并不是希望地球表面每平米有4*10^18个IPv6地址,绝对不是这样。IPv6在可预见的数量级内将地址块均匀的进行了分布,45位的全球拓扑绝对已经足够。
为了保证有足够的空间可供各站点机构内的节点增长,必须使这块空间足够大,鉴于节点数量由MAC地址数量表征,将其定为64位已经足够大了,EUI-64编址可以将所有的物理节点地址映射到这64位的地址空间中。
3.路由器加速问题
从IPv4的成长可以发现一个问题,随着全球带宽的逐年增加,路由器的负担加重的比率更大,即便是CIDR也不能彻底解决庞大的路由器表项问题,毕竟很多地址在互联网初期就已经分给某些地理区域了(记住,布线的难易对IP地址的分布意义重大)。各种路由器加速等额外的功能反而成了各大路由器厂商的招牌和卖点。IPv6彻底解决了这个问题。
IPv6采用固定大小的前缀空间,统一的基于地理位置的分配策略,巨大的全球拓扑使得美国没必要再抓着地址不放,所有这些的结果就是路由器可以很好的进行路由表项的聚合,使路由表项数量大大减少,这无疑会加快路由器的转发速度。
4.自动配置问题
一定要使得互联网的叶子节点支持自动配置,并且尽量采用统一的方式,基于IPv6本身,而不是额外的诸如IPv4的ARP那样的技术。这种枝干手工配置叶子自动配置的策略无疑是为了使互联网这个大树茂密而不歪斜,也不会因为歪斜而倾倒。因此IPv6专门为支持自动配置以及链路层通信单独劈开一块地址空间,这就是链路本地地址空间,实际上,链路本地地址的巧妙之处就是将链路层提高了一个层次,将链路接口的MAC地址提高到了IP层,从而可以使用统一的IP的方式进行通信,以便所有的报文都承载在IP报文中。可以看到,各个以太网卡的链路本地地址几乎就是FE80加上MAC地址到EUI-64的映射。
可以将这些地址叫做链路地址,离开了本链路,地址将失效。不管怎样,为了支持EUI-64映射,起码要有64位的地址空间。
5.IPv6的浪费
综上,IPv6并没有完全有效利用所有的128位的地址空间,而是将其进行了分割,真正有效分配的只有前64位不到的空间,毕竟还需要使用一些标志位来区分地址的限域(链路本地?全球?站点?),后面的64位几乎完全映射了所有二层设备的设备接口标示,也就是说MAC地址,正如EUI的名称所示Easy User Interface,这种IPv6全球拓扑+IPv6站点拓扑+EUI-64映射的地址组织方式十分有益于下面特性的实现:
a.地址自动配置,这是EUI的功劳
b.路由汇聚,这是固定大小前缀的功劳
因此,不要站在IPv4的意义上去理解IPv6,不要将地址空间的位仅仅看作0和1这种可以做标记的记号,它们还能做出很多别的事。IPv4地址除了地址空间以及子网划分之外,其余的特性很少,IPv6却能在地址本身完成如此之多的功能点,不能不说是网络层的一次变革。