IP发展史
IP发展历史
- 分类的IP地址,这个最基本的编址方式,在1981年通过
- 子网划分,对最基本的编址方式的改进,在1985年RFC950通过
- 无分类编址,这是比较新的编址方式,在1993年提出后很快就得到推广
目前在Windows,Linux,MacOS中都使用了无分类编址方式,但是在配置方式上可能仍然使用老旧的配置方式
分类IP
分类IP就是将IP地址划分为若干个类,每一类地址都由两部分组成,其中第一个字段是网络号(net-id),表示主机连接到的网络,一个网络号(net-id)整个因特网上必须是唯一的;第二个字段是主机号(host-id)一个主机号在它前面的网络号范围内必须是唯一的,由此可见,一个IP地址在整个因特网范围内是唯一的。
IP地址 ::= {<网络号>,<主机号>}
分类IP编址将IP地址分为A类,B类,C类,D类,E类五个类,其中A,B,C类都是单播地址,也是最常用的
A类地址
一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”,理论上来说A类的地址范围为地址范围从0.0.0.0 到127.0.0.0A类地址的网络号的第一个bit已经固定为0,但可指派的网络号为2^7-2,减的原因是:
- 网络号为127(即01111111)作为本地环回地址(loopback)
- 网络号全0(即00000000)的IP地址是个保留地址,意思是“本网络”
因此A类地址的实际范围为1.0.0.0 到126.0.0.0,A类地址的主机号占用3个字节,因此一个A类网中最大的主机是2^24-2,之所以减2是因为全零的主机号表示该IP的网络地址,而全1表示该网络的所有主机,A类地址空间有2^31,占有整个IP地址空间的50%;
B类地址
一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。B类地址的网络数不用减2,但是一般B类网络地址128.0.0.0是不指派的,B类的最小地址为128.1.0.0,B类的网络数为2^14-1,B类网络上的最大主机数是2^14-2,减去2的愿意是去除全0或者全1的情况,整个B类地址有2^30,很容易知道整个B类地址占用了IP地址空间的25%
C类地址
一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类地址的192.0.0.0也是不指派的,可指派的C类地址最小为192.0.1.0,整个C类地址可指派的网络总数是2^21,主机数为2^8-2,整个C类空间有2^29,占整个IP地址空间的12.5%
D类地址
D类IP地址第一个字节以“1110”开始,它是一个专 门 保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
E类地址
以“1110”开始,为将来使用保留。全“1”的IP地址(“255.255.255.255”)是当前子网的广播地址。
在IP地址3种主要类型里,各保留了3个区域作为私有地址,也就是比较常用的ip地址。其地址范围如下:
- A类地址:10.0.0.0~10.255.255.255 也就是 10.0.0.0/8
- B类地址:172.16.0.0~172.31.255.255 也就是 172.16.0.0/12
- C类地址:192.168.0.0~192.168.255.255 也就是 192.168.0.0/16
子网划分
分类IP地址利用率低,如一个20个人的公司申请了一个A类地址,导致IP地址浪费,为了解决这样的问题提了子网划分
子网划分的思想是从主机号中借用若干位作为子网号subnet-id,于是两级的IP地址就变成三级的IP地址:网络号,子网号,主机号
IP地址 ::= {<网络号>,<子网号>,<主机号>}
凡是从其他网络发过来的IP数据,仍然是根据IP数据的目的网络号找到连接在本网络的路由器,但此路由器收到IP数据报后,再按目的的网络号和子网号交付IP数据,如下图:
子网掩码有一串1和一串0组成,子网掩码中的1对应IP地址中原来的net-id和subnet-id,而子网掩码的0对应与现在的host-id,使用子网掩码的好处是,只要把子网掩码和IP地址进行逻辑与运算就可以得到网络地址
现在的因特网规定,所有的网络都必须使用子网掩码,同时在路由表中也必须有子网掩码这一项,如果一个网络不划分子网,那么该网络的子网掩码就使用默认子网掩码,默认子网掩码中的1的位置和网络号net-id对应,那么我们很容易知道
- A类地址的默认子网掩码是255.0.0.0
- B类地址的默认子网掩码是255.255.0.0
- C类地址的默认子网掩码是255.255.255.0
注意:如果在Linux中配置一个网口的IP,如果不制定子网掩码则就会使用默认的子网掩码
无分类编址
无分类编址(CIDR)是在使用子网掩码的基础上的进一步提高IP地址资源的利用率,它的正式名字为无分类域间路由选择(CIDR),在1993年形成了RFC1517~1519,1520,现在CIDR已经是因特网的标准协议。
CIDR消除了A类,B类,C类地址以及划分子网的概念,而是将32位的IP地址划分为两个部分,前面是网络前缀(network-prefix)用于指明网络,后面的则是用于指明主机,CIDR又使IP地址从三级编址回到了两级编址
CIDR的地址写法为:192.168.66.0/24,即在IP地址后面加上斜线 “/”然后协商网络前缀所占的位数
CIDR把网络前缀都相同的连续IP地址组成一个CIDR地址块,我们只要知道CIDR地址块中的任何一个地址就可以知道这个地址块的起始地址和最大地址,例如192.168.1.1/24是一个CIDR地址,我们知道CIDR地址块的范围是192.168.1.0~192.168.1.255
为了更方便的继续路由选择,CDIR使用32位的地址掩码(address mask),地址掩码是一串1和一串0组成,而1的个数就是网络前缀的长度,虽然CIDR不适用子网了,但是由于目前仍有一些网络使用子网划分和子网掩码,因此CIDR使用的地址掩码也可继续称为子网掩码,斜线记法中,斜线后面的数字就是地址掩码中1的个数
在windows和很多操作系统的配置中,虽然配置项仍未子网掩码但其本质上已经是地址掩码了,
CIDR路由
在查找路由时可能存在多个匹配结果,那么是应当如何从这些匹配结果中选择一条路由呢,答案是CIDR使用最长前缀匹配,因为网络前缀越长其表示的地址就越具体,举个例子就是
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.66.0 * 255.255.255.0 U 0 0 0 br-lan
192.168.66.1 * 255.255.255.255 U 0 0 0 eth1
如上面两个路由表,当目的IP为192.168.66.1时和以上两个路由表都匹配,但是和第二个更加具体,因此就选择了第二条路由
总结
虽然如此,但是在实际使用中我们仍然能看到关于子网掩码以及IP地址分类等相关的配置信息,这是历史问题,很多也已经成为了工程师的习惯,一代代的传下来。