在过去的十年间,IPv6本来应该得到很大的发展,但事实上这种好事并没有降临,由此导致了一个结果,那就是大部分人都不了解IPv6的一些知识:它是什么?怎么使用?为什么它会存在?
IPv4做错了什么?
自从1981年发布了RFC791标准以来我们就一直在使用IPv4。在那个时候,电脑又大又贵还不多见,而IPv4号称能提供40亿条IP地址,在当时看来,这个数字好大好大。
不幸的是,这么多的IP地址并没有被充分利用起来,地址与地址之间存在间隙。
举个例子,一家公司可能有254(28-2)条地址,但只使用其中的25条,剩下的229条被空占着,以备将来之需,于是这些空闲着的地址不能服务于真正需要它们的用户,原因就是网络路由规则的限制。
最终的结果是在1981年看起来那个好大好大的数字,在2014年看起来变得好小好小。
互联网工程任务组(IETF)在90年代初指出了这个问题,并提供了两套解决方案:无类型域间选路(CIDR)、私有IP地址。
在CIDR出现之前,你只能选择三种网络地址长度:24位(共16,777,214个可用地址)、20位(共1,048,574个可用地址)、16位(共65,534个可用地址)。CIDR出现之后,你可以将一个网络再划分成多个子网。
举个例子,如果你需要5个IP地址,你的ISP会为你提供一个子网,里面的主机地址长度为3位,也就是说你最多能得到6个地址。——抛开子网的网络号,3位主机地址长度可以表示0~7共8个地址,但第0个和第7个有特殊用途,不能被用户使用,所以你最多能得到6个地址)。
这种方法让ISP能尽***效率分配IP地址。“私有地址”这套解决方案的效果是,你可以自己创建一个网络,里面的主机可以访问外网的主机,但外网的主机很难访问到你创建的那个网络上的主机,因为你的网络是私有的、别人不可见的。
你可以创建一个非常大的网络,因为你可以使用16,777,214个主机地址,并且你可以将这个网络分割成更小的子网,方便自己管理。
也许你现在正在使用私有地址。看看你自己的IP地址,如果这个地址在这些范围内10.0.0.0–10.255.255.255、172.16.0.0–172.31.255.255或192.168.0.0–192.168.255.255,就说明你在使用私有地址。
这两套方案有效地将“IP地址用尽”这个灾难延迟了好长时间,但这毕竟只是权宜之计,现在我们正面临最终的审判。
IPv4还有另外一个问题,那就是这个协议的消息头长度可变。
如果数据的路由通过软件来实现,这个问题还好说,但现在路由器功能都是由硬件提供的,处理变长消息头对硬件来说是一件困难的事情。一个大的路由器需要处理来自世界各地的大量数据包,这个时候路由器的负载是非常大的,所以很明显,我们需要固定消息头的长度。
在分配IP地址的同时,还有一个问题,因特网是美国人发明的(这个万恶的资本主义国家占用了大量IP地址),其他国家只得到了IP地址的碎片。我们需要重新定制一个架构,让连续的IP地址能在地理位置上集中分布,这样一来路由表可以做的更小(想想吧,网速肯定更快)。
还有一个问题,这个问题你听起来可能还不大相信,就是IPv4配置起来比较困难,而且还不好改变。你可能不会碰到这个问题,因为你的路由器为你做了这些事情,不用你去操心,但是你的ISP对此一直是很头疼的。
下一代因特网需要考虑上述的所有问题。
IPv6和它的优点
IETF在1995年12月公布了下一代IP地址标准,名字叫IPv6,为什么不是IPv5?→_→因为某个错误原因,“版本5”这个编号被其他项目用去了。IPv6的优点如下:
- 128位地址长度(共有3.402823669×10³⁸个地址)
- 其架构下的地址在逻辑上聚合
- 消息头长度固定
- 支持自动配置和修改你的网络
我们一项一项地分析这些特点:
地址
人们谈到IPv6时,***件注意到的事情就是它的地址好多好多。为什么要这么多?因为设计者考虑到地址不能被充分利用起来,我们必须提供足够多的地址,让用户去挥霍,从而达到一些特殊目的。
所以如果你想架设自己的IPv6网络,你的ISP可以给你分配拥有64位主机地址长度的网络(可以分配1.844674407×10¹⁹台主机),你想怎么玩就怎么玩。
聚合
有这么多的地址,这些地址可以被稀稀拉拉地分配给主机,从而更高效地路由数据包。算一笔帐啊,你的ISP拿到一个80位地址长度的网络空间,其中16位是ISP的子网地址,剩下64位分给你作为主机地址。这样一来,你的ISP可以分配65,534个子网。
然而,这些地址分配不是一成不变地,如果ISP想拥有更多的小子网,完全可以做到(当然土豪ISP可能会要求再来一个80位网络空间)。
***的48位地址是相互独立地,也就是说ISP与ISP之间虽然可能分到相同地80位网络空间,但是这两个空间是相互隔离的,好处就是一个网络空间里面的地址会聚合在一起。
固定的消息头长度
IPv4消息头长度可变,但IPv6消息头长度被固定为40字节。IPv4会由于额外的参数导致消息头变长,IPv6中如果有额外参数,这些信息会被放到一个紧挨着消息头的地方,不会被路由器处理,当消息到达目的地时,这些额外参数会被软件提取出来。
IPv6消息头有一个部分叫“flow”,是一个20位伪随机数,用于简化路由器对数据包的路由过程。如果一个数据包存在“flow”,路由器就可以根据这个值作为索引查找路由表,不必慢吞吞地遍历整张路由表来查询路由路径。这个优点使IPv6更容易被路由。
自动配置
IPv6中,当主机开机时,会检查本地网络,看看有没有其他主机使用了自己的IP地址。如果地址没有被使用,就接着查询本地的IPv6路由器,找到后就向它请求一个IPv6地址。然后这台主机就可以连上互联网了——它有自己的IP地址,和自己的默认路由器。
如果这台默认路由器宕机,主机就会接着找其他路由器,作为备用路由器。这个功能在IPv4协议里实现起来非常困难。同样地,假如路由器想改变自己的地址,自己改掉就好了。主机会自动搜索路由器,并自动更新路由器地址。路由器会同时保存新老地址,直到所有主机都把自己地路由器地址更新成新地址。
IPv6自动配置还不是一个完整地解决方案。想要有效地使用互联网,一台主机还需要另外的东西:域名服务器、时间同步服务器、或者还需要一台文件服务器。于是dhcp6出现了,提供与dhcp一样的服务,唯一的区别是dhcp6的机器可以在可路由的状态下启动,一个dhcp进程可以为大量网络提供服务。
唯一的大问题
如果IPv6真的比IPv4好那么多,为什么它还没有被广泛使用起来?Google在2014年5月份估计IPv6的市场占有率为4%。一个最基本的原因是“先有鸡还是先有蛋”。
服务商想让自己的服务器为尽可能多的客户提供服务,这就意味着他们必须部署一个IPv4地址。
当然,他们可以同时使用IPv4和IPv6两套地址,但很少有客户会用到IPv6,并且你还需要对你的软件做一些小修改来适应IPv6。
另外比较头疼的一点是,很多家庭的路由器压根不支持IPv6。
还有就是ISP也不愿意支持IPv6。
我问过我的ISP这个问题,得到的回答是:只有客户明确指出要部署这个时,他们才会用IPv6。然后我问了现在有多少人有这个需求,答案是:包括我在内,共有1个。
与这种现实状况呈明显对比的是,所有主流操作系统Windows、OS 、Linux都默认支持IPv6好多年了。这些操作系统甚至提供软件让IPv6的数据包披上IPv4的皮,来骗过那些会丢弃IPv6数据包的主机,从而达到传输数据的目的。
总结
IPv4已经为我们服务了好长时间,但是它的缺陷会在不远的将来遭遇不可克服的困难。IPv6通过改变地址分配规则、简化数据包路由过程、简化***加入网络时的配置过程等策略,可以***解决这个问题。
问题是,大众在接受和使用IPv6的过程中进展缓慢,因为改变代价太大了。
好消息是所有操作系统都支持IPv6,所以当你有一天想做出改变,你的电脑只需要改变一点点东西,就能转到全新的架构体系中去。