论文部分内容阅读
北京时间2014年8月12日下午4点钟开始,全世界的网络突然都变慢了一点点。不幸的是,接下来还可能又会慢下去。并且,这一回错的真的不是你,而是世界。错在哪呢?路由规则太多,溢出了。
不够用的地址
你很可能见过譬如192.168.1.1这样的数字串,这样的数字就是所谓的“IP地址”。这是你平常访问的那些网站的“真实地址”,例如,当你输入www.guokr.com(域名)时,网络会把它转换成真正的地址111.13.57.142,然后才能找到这个网站在哪里。如果这个转换系统(也就是所谓的“DNS”)出了问题,那网络就要出现问题。
常见的IP地址里的数字是有规定的:四个数字,每个可以从0到255,这被称为“IPv4”(互联网协议第四版)。那么一共就会有2^32次方个不同的地址,也就是将近43亿。而且这43亿地址还有不少是保留的,比如所有以9开头的原则上都是IBM的,12开头的都是AT&T的,17开头的是苹果的,18开头的则归麻省理工……有些厚道的组织,比如斯坦福,本来占据了所有36开头的,现在正把多余的地址拿出来回馈社会,但人并不都这么好心。
所以,那帮技术人员实在太目光短浅了?这还真不是,IPv4协议诞生于1981年,早在20世纪80年代末他们就预料到了这个不够用的问题,可是新一代协议IPv6——可以提供3.4×10^38个地址——直到1998年才出台。现在,IPv6已经走过整整十六个年头。互联网上使用IPv6的人数大概为4%(该数值基于访问google的人统计,真实数字应为更低,见图1)。
耍花招的后果
为了推迟IPv4挤爆的同时又不用去辛辛苦苦换新协议,各方在抓紧时间利用每一点残存的IP空间碎片。以前大手大脚一整块几万地址分给一个组织的好日子一去不复返,现在就连一小撮256个地址都要寸土必争。但是,这对路由器来说就辛苦了。路由器依靠一个名为“路由表”的东西来快速找到方向,每一个机构拿到一段IP之后都会希望在路由表里加一句规则来加快自己的访问速度。但是每一条规则都要占据同样大小的空间,所以网上的地址越碎,需要的路由表就越大。
路由表是个很重要的东西,所以路由器会专门留出一块高速存储器来存它。譬如某款路由器足够存一百万个条目,想来应该是足够了,而且眼看IPv6必将征服市场,我留一半(512k)给v4,另一半给v6,事实上大部分路由器生产商都想当然认为给v4留了512k足够用,这算是行业标准。不幸的是,对于互联网碎片化的程度,他们显然又低估了。
多年的增长已经让路由表突破了50万大关,而在2014年8月12日,美国通信公司Verizon又一口气往v4路由表里加了15000个条目,使总数抵达了约515000个,超过了上限(相比之下,v6还只有可怜的2万个条目)。這些多出来的信息必须存在更慢的普通存储器里,导致了速度变慢甚至局部网络不稳定。Verizon很快发现了这个问题并把多出来的条目削了回去,但是余波至少持续了数小时。这个事件就是所谓的“512k”事件,也许就是你那天觉得网络慢了的元凶。但这不是问题的结束,只是开始。路由表里的条目数字肯定要自然增长的,早晚会自己超过这个数字。而这些问题都出在路由器上,换路由器可是要花钱的。
诚然,我们可以继续拆东墙补西墙,来一次广泛的固件升级,把更多的快速存储器留给v4。而代价可想而知,就是进一步削减了留给v6的空间。要是早用v6取代v4,IP地址够用的话,现在就不会出现地址碎片化、路由表过大的问题了。
事实上,想想之前人们还以为内存640k就足够,两位数字存储年份就足够,32位储存秒数就足够,现在又一个想当然的上限被突破带来了麻烦,就是理所应当的事情了。
图1 2012年4月一次IPv4地址普查显示的使用情况,黑色代表没有数据,其他颜色代表使用率。由于调查方法问题,实际占用率肯定会比图中看起来更高。
不够用的地址
你很可能见过譬如192.168.1.1这样的数字串,这样的数字就是所谓的“IP地址”。这是你平常访问的那些网站的“真实地址”,例如,当你输入www.guokr.com(域名)时,网络会把它转换成真正的地址111.13.57.142,然后才能找到这个网站在哪里。如果这个转换系统(也就是所谓的“DNS”)出了问题,那网络就要出现问题。
常见的IP地址里的数字是有规定的:四个数字,每个可以从0到255,这被称为“IPv4”(互联网协议第四版)。那么一共就会有2^32次方个不同的地址,也就是将近43亿。而且这43亿地址还有不少是保留的,比如所有以9开头的原则上都是IBM的,12开头的都是AT&T的,17开头的是苹果的,18开头的则归麻省理工……有些厚道的组织,比如斯坦福,本来占据了所有36开头的,现在正把多余的地址拿出来回馈社会,但人并不都这么好心。
所以,那帮技术人员实在太目光短浅了?这还真不是,IPv4协议诞生于1981年,早在20世纪80年代末他们就预料到了这个不够用的问题,可是新一代协议IPv6——可以提供3.4×10^38个地址——直到1998年才出台。现在,IPv6已经走过整整十六个年头。互联网上使用IPv6的人数大概为4%(该数值基于访问google的人统计,真实数字应为更低,见图1)。
耍花招的后果
为了推迟IPv4挤爆的同时又不用去辛辛苦苦换新协议,各方在抓紧时间利用每一点残存的IP空间碎片。以前大手大脚一整块几万地址分给一个组织的好日子一去不复返,现在就连一小撮256个地址都要寸土必争。但是,这对路由器来说就辛苦了。路由器依靠一个名为“路由表”的东西来快速找到方向,每一个机构拿到一段IP之后都会希望在路由表里加一句规则来加快自己的访问速度。但是每一条规则都要占据同样大小的空间,所以网上的地址越碎,需要的路由表就越大。
路由表是个很重要的东西,所以路由器会专门留出一块高速存储器来存它。譬如某款路由器足够存一百万个条目,想来应该是足够了,而且眼看IPv6必将征服市场,我留一半(512k)给v4,另一半给v6,事实上大部分路由器生产商都想当然认为给v4留了512k足够用,这算是行业标准。不幸的是,对于互联网碎片化的程度,他们显然又低估了。
多年的增长已经让路由表突破了50万大关,而在2014年8月12日,美国通信公司Verizon又一口气往v4路由表里加了15000个条目,使总数抵达了约515000个,超过了上限(相比之下,v6还只有可怜的2万个条目)。這些多出来的信息必须存在更慢的普通存储器里,导致了速度变慢甚至局部网络不稳定。Verizon很快发现了这个问题并把多出来的条目削了回去,但是余波至少持续了数小时。这个事件就是所谓的“512k”事件,也许就是你那天觉得网络慢了的元凶。但这不是问题的结束,只是开始。路由表里的条目数字肯定要自然增长的,早晚会自己超过这个数字。而这些问题都出在路由器上,换路由器可是要花钱的。
诚然,我们可以继续拆东墙补西墙,来一次广泛的固件升级,把更多的快速存储器留给v4。而代价可想而知,就是进一步削减了留给v6的空间。要是早用v6取代v4,IP地址够用的话,现在就不会出现地址碎片化、路由表过大的问题了。
事实上,想想之前人们还以为内存640k就足够,两位数字存储年份就足够,32位储存秒数就足够,现在又一个想当然的上限被突破带来了麻烦,就是理所应当的事情了。
图1 2012年4月一次IPv4地址普查显示的使用情况,黑色代表没有数据,其他颜色代表使用率。由于调查方法问题,实际占用率肯定会比图中看起来更高。