作 者:汪涛
1、到底是“私网地址穿透”还是“IPv4地址不足”?
IPv4地址不足是当前一个热点的问题。业界解决IPv4地址不足主要有两条路径:
一是非兼容方式的升位,这就是采用全新的IP地址协议,如IPv6;另外一条路径是采用兼容方式的路径,NAT技术就是这种方式的典型代表,并且已经在市场上获得了大规模的实际应用。
NAT技术事实上对极大缓解IPv4地址不足起到重要作用,并且其地址扩展能力和潜力是非常巨大的。从纯理论上说,私网相当于新增了一层IPv4地址区,从而等效的IP地址位长将从32位增加到64位。如果容许多层私网地址区存在,如两级私网,则相当于又增加一个32位的地址长度,等效IP地址长度变为96位。当然,在实际的网络中,由于并不能简单地在新增的地址区中使用所有IPv4的地址(RFC1918规定的私网地址总数为17891328个),因此采用私网方式带来的地址扩展远远不是简单地如纯理论计算得这么多。但即使如此,如果能够将这种模式有效改进的话,其地址扩展能力也是极为可观的,并不比IPv6方式差。
IPv4地址空间的确是最终会不够的,因为平均地球上每个人均的IPv4地址正好不足一个(IPv4地址空间为232=4294967296,以地址人口60亿计算,平均每人IPv4地址数量为0.716个)。据CNNIC统计数据,截止2006年底中国IPv4数量9400多万个,网民数量为1.23亿,人均IPv4地址为0.7个。同期日本8600万网民拥有1.46亿个IP地址,人均地址1.7个。美国人均IPv4地址是10个。这就是说,一般情况下,IPv4地址数量与用户数量之比为0.7-2个之间是可以承担现有互联网业务的。
有些观点认为IPv4地址在2010年前就会耗尽,因此认为IPv6应尽快普及。但如果IPv6真的很快普及的话,意味着IPv4地址最后就将没有用了。如果IPv4地址以后没用了的话,美国手里多出的20亿IPv4地址从理性的角度说就应该释放出来。而如果美国手里的20亿多出的IPv4地址释放出来的话,IPv4地址在未来15年甚至更长得多的时期内又都足够用了,IPv6就不应该很快普及。因为互联网用户与电信网类似,其增长并不是无限制的,当达到一定程度后就会趋缓,对IP地址的新增消耗量就会不断下降,甚至停止。
即使美国手里的20亿IPv4地址不释放出来(因为这要取决于美国是否愿意释放,就算是没有用了美国也可以不释放),如果对私网地址进行改进并充分利用的话,公网IPv4地址需求量就会呈几个数量级地极大减少,IPv6就永远也用不上了。因此,这是一个逻辑上自相矛盾的局面,并使IPv4地址不足的问题远不象简单推算得那么简单。
由于市场上现实地已经存在大量NAT网络,私网穿透问题阻碍了相当多业务的有效开展。因此,事实上私网穿透问题才是真正现实和迫切需要解决的真实问题。并且如果解决了私网穿透,IPv4地址不足的问题也就同时不了了之,从而一了百了;
而如果向IPv6地址演进,由于它是一个全新的地址系统,并不关心现有IP地址的改进,因此在长期过渡过程中它并不能有效解决IPv4私网穿透问题。反过来,如果它解决了IPv4私网穿透问题,IPv6自己也就没有发展下去的足够理由了。而如果不能解决私网地址穿透,IPv6最基本的全网端到端的通透性就在长期的过渡期内无法真正体现,IPv6就不是真正的IPv6!这又是一个自相矛盾的局面。所以,IPv4地址不足即使不是一个假问题,至少也是从市场角度含混不清的问题,对IPv6的市场需求更是一个含混不清的问题。而只有IPv4私网地址穿透问题才是清晰明了真实存在的。
SuIP技术从一般的号码升位兼容理论出发,提出了“n×IPv4(n为正整数)”的兼容升位方式,并在此理论基础上开发出了SuIP协议,它可以从根本上解决私网穿透问题,从而也就一了百了地解决了所有问题。
2、编号兼容升位的一般规律
号码的位长决定号码的空间,因此当号码空间不足时就需要升位。在升位过程中有与原号码兼容和不兼容两种方式。号码空间问题绝不是IP地址唯一遇到的,而是编号领域非常普遍的问题。号码的升位中有三个要素会与升位的兼容性有关,分别是:号码位长、编号规则和号码分配。
升位后的号码是否兼容原号码,主要取决于编号规则和号码分配,而主要不是号码长度。只要编号规则和号码分配不变,升位后的号码就与原号码100%兼容,或者接近100%兼容。如果编号规则和号码分配发生变化,即使号码长度一样,也会与原号码不兼容。
例如,我们现在广泛使用的电话号码就经常发生升位,但由于升位后编号规则和号码分配都没有发生变化,因此升位后的号码与原号码的兼容性是非常高的。这个升位过程主要是修改一下交换机的数据配置就可以了,绝对不会出现要将网上所有交换机和终端全部换光才能升位的事情。
中国18位长度的第二代身份证号码升位过程,虽然与原15位的第一代证号码编号规则不完全相同,但尽可能保持了原号码编号规则及号码分配,因此兼容性也非常高。第二代身份证前6位的地区号码完全没有变化,中间时间号码第一代证是6位长度,年份是两位;二代证只是年份增长到4位,月份和日期是不变的。时间之后的3位序列号也没有改变,后面增加了1位校验码。
从上面分析可以看出,只要编号规则和号码分配不发生变化,或者虽然有变化,但尽可能延续原有的号码规则和分配,则升位过程也非常平滑和兼容。
一般号码兼容的升位方式采用两种途径:
一是通过插入方式扩展某些字段来升位。例如电话号码升位一般是区号不发生变化,仅仅在用户号码前增加1位或2位数字,或者是有些地区号码发生改变,但国家代码和用户号码不变;
二是增加新字段,其它字段保持不变。中国第二代身份证升位过程即采用了插入(年份插入)的方法,也采用了增加新字段(增加了1位的校验位)的方法。
3、IPv4编号的兼容升位途径
对于IPv4地址来说,如果采用以上常规的两种方法是非常困难的。由于IPv4地址在位长格式上有非常严格的定义,因此只要在IPv4地址中间插入一定的字节,基本上就等于另外一个IP协议了。如果在IPv4地址上增加新的字段,也基本等于另外一个IP协议。但是,这并不意味着IPv4地址以“不改变编号规则和号码分配前提下增加位长”的目标不可能实现。
我们发现:如果将IPv4地址整数倍地扩展,那么就完全可以实现在完全不改变编号规则和号码分配前提下实现IP地址的扩展。例如两个IPv4拼起来,或者3个、4个IPv4地址拼起来,这样就会形成新的号码中内部的所有片段部分都是IPv4的编号规则和号码分配,从而可以实现与IPv4最大程度的兼容,甚至100%兼容。我们把这种方式称为“n×IPv4(n为正整数)”的升位方式。
事实上,2001年,有两个学者P.Francis和R.Gummadi就曾提出过IPNL技术,这事实上就是2×IPv4的方式,但由于其设计依然较复杂,并没有获得大规模实用。
4、NAT技术与n×IPv4的关系
当采用多个IPv4地址拼起来以后,实质上就会形成多个IPv4地址层次,SuIP技术把这叫作“层区”。其实,我们现在已经大规模商用化的NAT就已经是一种分了层区的IPv4地址。例如我们现在经常在电脑上看到的192.168.1.23这样的地址就是私网地址,它是RFC1918规定的地址。但是,这种私网地址在端到端的通透性上是有缺陷的。现在很多网络通讯软件工程师花极大力气做的“私网穿透”软件就是为了解决这个问题,私网穿透是现在网络编程中非常著名的一个问题。但现有私网穿透的解决方案都有很大局限,不能保证所有业务都可以穿透;并且TCP的私网打洞技术还很不成熟,打洞的成功率不能达到或接近100%。