【摘要】本文分析了IP地址的发展历程。IP地址经历了三个阶段:第一阶段就是分类的IP地址阶段;第二阶段就是划分子网的阶段;第三个阶段是无分类编址CIDR阶段。接着谈论了CIDR产生的原因以及CIDR在日常生活中的应用。
【关键词】网络;IP;分类;CIDR
一、计算机网络IP地址的发展历程
1.为什么要引入IP地址
一个IP地址是用来标识网络中的一个通信实体,比如一台主机,或者是路由器的某一个端口。而在基于IP协议网络中传输的数据包,也都必须使用IP地址来进行标识,如同我们写一封信,要标明收信人的通信地址和发信人的地址,而邮***工作人员则通过该地址来决定邮件的去向。同样的过程也发生在计算机网络里,每个被传输的数据包也要包括的一个源IP地址和一个目的IP地址,当该数据包在网络中进行传输时,这两个地址要保持不变,以确保网络设备总是能根据确定的IP地址,将数据包从源通信实体送往指定的目的通信实体。目前,IP地址使用32位二进制地址格式,为方便记忆,通常使用以点号划分的十进制来表示,如:172.16.107.120。
2.IP地址的三个阶段
我们知道IP地址发展到现在为止经历了三个阶段。第一阶段就是分类的IP地址,也就是我们常说的A类、B类、C类、D类、E类,我们目前一般只使用其中的前三个分类,在这个阶段IP地址的结构是IP地址={,}。第二阶段就是划分子网的阶段,在前一个阶段的基础上把主机号划分为了子网号和主机号两个部分,这个阶段IP地址的结构是IP地址={,,}。第三个阶段就是我们今天要谈到的无分类编址CIDR,在此阶段再没有了网络号和子网号的概念,而是使用的个全新的概念“网络前缀”,所有这时IP地址={,}。现在日常生活中使用的最多的就是无分类编址CIDR这种方式。
二、CIDR的产生原因
最初的因特网设计者没有预想到网络会有如此快速地发展,因此现在网络面临的问题都可以追溯到因特网发展的早期决策上,IP地址的分配更能体现这点。目前使用的IPv4地址使用32位的地址,即在IPv4的地址空间中有232(4,294,967,296,约为43亿)个地址可用。这样的地址空间在因特网早期看来几乎是无限的,于是便将IP地址根据申请而按类别分配给某个组织或公司,而很少考虑是否真的需要这么多个地址空间,没有考虑到IPv4地址空间最终会被用尽。因此,IPv4地址是按照网络的大小(所使用的IP地址数)来分类的,它的编址方案使用“类”的概念。A、B、C三类IP地址的定义很容易理解,也很容易划分,但是在实际网络规划中,它们并不利于有效地分配有限的地址空间。对于A、B类地址,很少有这么大规模的公司能够使用,而C类地址所容纳的主机数又相对太少。所以有类别的IP地址并不利于有效地分配有限的地址空间,不适用于网络规划。
在这种情况下,人们开始致力于下一代因特网协议——IPv6的研究。由于现在IPv6的协议并不完善和成熟,需要长期的试验验证,因此,IPv4到IPv6的完全过渡将是一个比较长的过程,在过渡期间我们仍然需要在IPv4上实现网络间的互连。而在90年代初期引入了变长子网掩码(VL***)和无类域间路由(CIDR)等机制,作为目前过渡时期提高IPv4地址空间使用效率的短期解决方案起到了很大的作用。
CIDR(无类型域间选路,Classless Inter-Domain Routing)主要是为了解决以下三个问题而诞生的。
(1)大小比较适中的B类IP地址的严重匮乏。
(2)因特网主干网上的路由表中的项目数急剧增长。
(3)Ipv4地址迟早被分配完,到时候在无IP地址可以分配。
三、CIDR的应用
我们常常用CIDR来描述一个地址块,那么我们到底怎么来描述呢?答案就是使用“斜线记法”(slash notation),它又称为CIDR记法,即在IP地址后面加上一个斜线“/”,然后写上网络前缀所占的比特数(这个数值对应于三级编址中子网掩码中比特 1 的个数)。比如:172.16.107.120/20。
下面我们来看一个具体的例子。假如说我们已经有了172.16.107.120/20这样的一个地址块,那么我们怎么才知道它的前缀是多少,以及具体可以表示的IP地址范围?因为斜线后面的 20 是网络前缀的比特数,我们知道现在所使用的Ipv4中的IP地址总共有32bit,那么我们就不难知道主机号是占12bit了。所以我们可以得出下表中的相关信息:
表中的第一行就是描述了我们现在有172.16.107.120/20这样一个地址块。表中的第二行给出了网络前缀,在这里我们用点分二进制来表示。把172.16.107.120转换为点分二进制是10101100.00010000.01101011.01111000,因为这个时候的网络前缀占20bit,所以在前面的点分二进制中的阴影部分就是我们的网络前缀。第三行中给出了子网掩码,这个看上去比较复杂其实是有规律的,只要找到了规律就会发现还可以可以很容易的得到子网掩码的。在IP地址后面的/20这个数值对应于三级编址中子网掩码中比特 1 的个数,说的简单点就是子网掩码前20bit全是1,后面的12bit用0补齐。表中的第四行给出了最小地址,这个最小地址其实就是用IP地址和子网掩码进行一次“与(逻辑乘)”操作。表中的第五行给出了最大地址,在二进制中最大的数字就是1,所以现在主机号占12bit,那么最大的主机号就是12个1,也是把最小地址中的后面12bit全部用1替换掉就可以得出最大地址了。我们发现在上表中除了网络前缀只可以用点分二进制表示外,其它的我们还是可以转换为我们习惯的点分十进制的,也就是如下表:
注:主机号全0和全1的IP地址一般是不使用的。
现在实际生活中用“斜线记法”描述IP地址块的时候,后面的数字都是使用8的整数倍,这样我们来计算网络前缀、子网掩码、最小地址、最大地址的时候会简单很多。最后要提醒大家的一点是在使用CIDR的时候我们一般是选择网络前缀尽可能长的那个地址块,原因就是网络前缀越长,IP地址块的范围越具体,路由的效率越高。
【参考文献】
[1]徐敬东.计算机网络.北京:清华大学出版社.2005
[2]雷震甲.网络工程师教程.北京:清华大学出版社.2004
(作者单位:重庆信息技术职业学院)
转载请注明出处学文网 » 浅析无分类编址CIDR