号码的位长决定号码的空间,因此当号码空间不足时就需要升位。在升位过程中有与原号码兼容和不兼容两种方式。号码空间问题绝不是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%。