在沟通生产网络部署的时候,应用开发人员在与网络管理员沟通中经常会遇到很多术语,如何不能很好理解相应的概念沟通起来就会非常费劲,经常遇到的问题如:
A、B、C类地址是什么?什么是子网掩码?什么是CIDR?往下看,本文将对这些术语的来龙去脉进行详细解释。
一、网络地址分类在internet中,无论想要访问一个终端或者被一个终端访问,都需要一个唯一的标志,也就是IP地址(Internet Protocol Address)。终端之间的互联使用路由器进行转发,路由器维护着一张路由表,路由表记录着IP地址的路由关系,收到请求后根据目的地址IP和路由表决策进行分发。
由于全世界的终端数量是非常恐怖的,如果每个终端都分配一个不规则的IP地址,那么路由表就记录全世界的IP地址,这是一个庞大的数字,路由表将会非常的大,造价和性能都是挑战,对于路由器来说是难以承受的。
于是为了方便寻址,就出现了网络号和主机号,也就是将IP地址分为网络地址+主机地址,网络地址用于标志一个网络,主机地址用于标志网络内部的终端,这样子一来路由器只需要维护一个网络地址的方向就可以找到拥有同个网络地址的所有IP对应的终端了。
当区分网络地址和主机地址以后,为了适应不同的网络需要,例如有些大型企业或者政府机构需要大型网络,有些小企业只需要一个小网络,如果固定了网络地址位数和主机地址位数,那么势必有些使用场景会有地址不够的情况,有些则会有浪费的情况,于是网络地址和主机地址的位数就变成了动态可变化的,这就人为进行了分类,于是就出现了ABCDE五类网络地址,分别适用于不同的使用场景。
如何来区分A、B、C类IP地址呢?我们知道IP是32位的二进制,常用点分十进制的写法,例如192.168.56.11,那么可以简单的通过这四段号码来进行区分:
A类地址:在IP地址的四段号码中,第一段号码表示网络地址,剩下的三段号码表示主机地址,即用二进制表示时由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。A类IP地址中网络地址的标识长度为7位,主机标识的长度为24位。由于只有7位的网络地址标识,A类网络地址数量较少,可以用于主机数达1600多万台的大型网络。 A 类占整个地址空间的 50%。 然而,只有 126 个组织可以分配 A 类网络地址。 有趣的是,每个组织都可以为 16,000,000 台主机提供地址。 超大型组织会分配整个 A 类地址块。 时至今日,仍有公司和政府组织拥有 A 类地址。 例如,通用电气公司拥有 3.0.0.0/8,苹果电脑公司拥有 17.0.0.0/8,美国 邮政总局拥有 56.0.0.0/8。B类地址:在IP地址的四段号码中,前两段号码为网络地址,剩下的两段号码表示主机地址。如果用二进制表示IP地址的话,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。B类IP地址中网络的标识长度为14位,主机标识的长度为16位,B类网络地址适用于中等规模规模的网络,每个网络所能容纳的计算机数为6万多台。 B 类占整个地址空间的 25%。 最多 16,384 个组织可以分配 B 类网络地址,每个网络可以支持 65,534 台主机。 只有那些特大型的公司/组织或政府部门有可能会使用到所有 65,000 个地址。 与 A 类网络类似,B 类地址空间浪费许多 IP 地址。一个C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。如果用二进制表示IP地址的话,C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“110”。C类IP地址中网络的标识长度为21位,主机标识的长度为8位,C类网络地址数量较多,适用于小规模的局域网络,每个网络最多只能包含254台计算机。 C 类占整个地址空间的 12.5%。 许多组织可以获得 C 类网络,但是限于它们能够连接的主机总数。 事实上,在许多情况下,C 类地址对于大多数中型企业来说通常太小。类别 | 最大网络数 | IP地址范围 | 有效IP地址范围 | 单个网段最大主机数 | 预留IP | 私有IP |
A | 126(2^7-2) | 1.0.0.0-127.255.255.255 | 1.0.0.1-127.255.255.254 | 16777214 | 1.0.0.0、127.255.255.255 | 10.0.0.0-10.255.255.255 |
B | 16384(2^14) | 128.0.0.0-191.255.255.255 | 128.0.0.1-191.255.255.254 | 65534 | 128.0.0.0、191.255.255.255 | 172.16.0.0-172.31.255.255 |
C | 2097152(2^21) | 192.0.0.0-223.255.255.255 | 192.0.0.1-223.255.255.254 | 254 | 192.0.0.0、223.255.255.255 | 192.168.0.0-192.168.255.255 |
可以发现1.0.0.0、128.0.0.0和192.0.0.0都不在有效可使用的地址范围内,这是因为这几个地址都是各网络分类的网络地址,指代了这个网络。
127.255.255.255、191.255.255.255和223.255.255.255同样不在有效IP地址范围内,因为他们属于该对应网络的广播地址。
按照规定主机位全为0的时候为其网络地址,全为1为该网络的广播地址,这个两地址是保留的不能分配给设备使用。
A类地址的网络数为2^7-2,减掉的2个一个是全0的情况,一般情况下从1开始,所以全0不计算在内,另外一个是127的网络,127一般用于本机回环,也不计算在可用范围内。
D类地址:D类地址比较特殊,主要用于多点广播(Multicast,也称为多播)之中作为多播组IP地址,所以也被称为广播地址,它的第1个字节的前四位固定为1110,IP地址范围为:224.0.0.0-239.255.255.255。E类地址:主要保留用于实验或者将来使用,它的第1个字节的前四位固定为1111,IP地址范围为:240.0.0.0-255.255.255.254。每一类地址都有一段私有IP,一般不用于公网而是被用于私有局域网,例如C类地址的192.168.0.0-192.168.255.255就是比较常见的局域网地址。
B类地址中169.254.0.0-169.255.255.255属于保留地址,如果终端配置了通过DHCP自动获取IP地址,但是又找不到DHCP服务器,那么就会从169.254.0.0-169.255.255.255临时获取一个地址。
二、子网掩码上面说到路由器通常要建立一个转发表来确定如何将请求转发到不同的主机,主机数越多,转发表也就越大,路由器的性能压力越大,所以针对每个IP进行映射的方案存在缺陷。另外,不管一个网络内部的主机数量多少,至少都需要分配一个C类的网络地址,网络内的地址浪费严重。那有没有什么解决方案呢?答案就是子网掩码。
通过设定子网掩码,指定一个IP地址哪些位标识的是网络地址,哪些位标识的是主机地址,网络地址相同的IP地址被认为是同一个网络,可以在无路由的情况下相互通信,通过这种方式认为地将一个比较大的网路划分了子网,减少了网络上的通信量,一些较大的企业内部也经常采用这种方式进行子网的划分,更加方便管理,子网掩码也叫做地址掩码。
子网掩码也是一个32位的2进制数,可以写成点分十进制的方式,其对应网络地址的所有位都位1,对应主机地址的所有地位都为0,将32位的子网掩码与IP地址进行二进制形式的按位逻辑与运算得到的就是网络地址,将子网掩码二进制按位取反然后与IP地址进行二进制的逻辑与(AND)运算得出的就是主机地址。按照这种方法,可以知道A类地址的子网掩码是255.0.0.0,B类地址的子网掩码是255.255.0.0,C类地址的子网掩码是255.255.255.0。
三、CIDR的出现子网掩码虽然解决了路由表的问题,但是网络内还是存在大量的IP浪费,并且在实际的应用中,很多的管理员已经讲子将掩码配置成了不定长的形式,实际上A、B、C、D、E的分类名存实亡了。
CIDR的出现非常好地解决了IP浪费和管理上的问题,其全称是Classless Inter-Domain Routing,即无类别域间路由,是基于可变长子网掩码VLSM来进行任意长度的前缀的分配的,它使得我们可以将一些不同类别的IP地址合并为一个“超网”地址,打破不同类别网络地址间的界限,这样子的话原网络分类在不同网络内的未被利用的IP就可以组成一个“超网”对外提供。
CIDR采用的是IP/x,x指的是前x位为网络前缀,例如192.168.0.1/24,前24位为网络地址,后8位为主机地址。令主机地址分别为全0和全1就可以得到一个CIDR地址块的最小地址和最大地址,令网络前缀全1,主机地址全0,就可以得到子网掩码。