IP地址的定义

IP 地址(IPv4)由 32 位 bit 储存,范围为 00 ~ 23212^{32}-1 ,即允许最多 43 亿台设备连入网络。为方便人为识别 IP 地址,我们采用 点分十进制 来表示 IP 地址,如下:
点分十进制

需要注意的是,IP 地址并非根据主机台数来配置,而是根据主机的网卡(NIC)来配置 。由于每一台主机一般都有多张网卡,而每张网卡又必须分配一个 IP 地址,所以 IPv4 的 IP 地址数目(约43亿)根本不够用,为了在 IPv4 的基础上容纳更多的主机, NAT技术应运而生。IPv6 也能很好的解决此问题,但由于网络规模巨大,全面替代 IPv4 还需要假以时日。

同时,为了方便网络管理和路由控制,IP 地址分为网络号和主机号 。网络号(网段)用来表示相邻的一片主机(如公司内的主机采用一个网络号),主机号则表示网络段中的某一台主机。IP 地址的主机标识不能在同一网段中重复出现。网络号和主机号如何方便网络管理和路由控制呢?举例来说,对于网络管理,广播利用网络号直接将数据报发送到具有同一网络号的所有主机中,而无需一台主机一台主机地发送;对于路由控制,进行路由时,路由器只看网络号而忽视主机号 。那么,究竟从第几位开始是网络号,第几位开始又是主机号呢?最初二者使用 IP 地址的分类进行区分,而现在基本使用 子网掩码(subnet mask) 区分。需要注意,在有些情况下依据部分功能、系统和协议的需求,前一种方法依然存在。

IP 地址的分类

IP 地址被分为 A,B,C,D,E五类。它根据 IP 地址中从第 1 位到第 4 位的比特序对网络号和主机号进行区分,如下图:

IP分类

A类地址 :首位以 0 开头,第 2 位到第 8 位是其网络标识,即 0.0.0.0 ~ 127.0.0.0 是 A 类的网络号,后面的 24 位为主机地址。因此 A 类地址的一个网段可容纳最多 16,777,214 个主机。
B类地址 :首位以 10 开头,第 2 位到第 16 位是其网络标识,即 128.0.0.1 ~ 191.255.0.0 是 B 类的网络号,后面的 16 位为主机地址。因此 A 类地址的一个网段可容纳最多 65,534 个主机。
C类地址 :首位以 110 开头,第 2 位到第 24 位是其网络标识,即 192.168.0.0 ~ 239.255.255.0 是 C 类的网络号,后面的 8 位为主机地址。因此 A 类地址的一个网段可容纳最多 254 个主机。
D类地址 :首位以 1110 开头,第 2 位到第 32 位是其网络标识,即 224.0.0.0 ~ 239.255.255.255 是 D 类的网络号。D 类地址没有主机号,常被用于多播。关于多播,参考此处

另外,A 类地址保留给政府,B 类给中等以上的公司,C 类分配给个人,D 类用于多播,E 类尚未使用。

注意,观察到主机数目都减去了 2,这是因为主机号全为 0 时表示整个子网,全为 1 时表示向子网所有设备发送报文,即广播;关于广播,参见此处0.0.0.0 地址对应于未知地址,指在本机的路由表里没有特定条目指明如何到达;一般用户主机为了获得一个可用的 IP 地址,就给 DHCP 服务器发送 IP 分组,并用这样的地址作为源地址。

我们发现,架构 A、B 类网络时,一个网段中将存在数万乃至数十万的主机,这类情况在实际架构时通常是不存在的。因此,IP 地址的分类显得浪费资源,我们需要一种更好的划分方式。

CIDR与VLSM

由于 IP 地址的分类造成的严重浪费,人们放弃了这种 IP 分配策略,开始采用任意长度分割 IP 的网络号和主机号。这种方式叫做 CIDR(无类型域间路由) 。通过使用 CIDR ,我们就可以将多个 C 类地址合并为一个网络地址范围,如下:

CIDR

在 CIDR 之前,如果很多个 C 类网络在一起,经过路由器的时候就被宣告成很多条子网掩码为 255.255.255.0 的路由条目(一个C类地址是 24 位网络号),其数目是巨大的,非常消耗路由器的资源。CIDR 的基本思想是取消 IP 地址的分类结构,将多个地址块聚合在一起生成一个更大的网络( 路由聚合 ),以减少路由表中的路由条目,从而降低路由的性能损耗 。而在 CIDR 之前,多个 C 类网络是无法被聚合在一起的。

在 CIDR 应用初期,网络内部(一段连续分配的IP地址,比如公司内部) 采用固定长度的子网掩码机制,也就是说,当子网掩码的长度被设置为 /24 以后,域内所有的子网掩码都必须使用同样的长度。然而,一个公司内有些部门可能有 100 台主机,另一些部门可能只有 25 台,两个部门的子网掩码却都相同(即分配的主机IP数目也相同),这就导致了 IP 地址的浪费。如果采用统一的标准,就难以架构一个高效的网络。为此人们提出了组织内部(即子网)要使用可变长度的、高效的 IP 地址分配方式。

于是,VLSM(Variable Length Subnet Mask) 应运而生。VLSM 通过对 IP 地址的主机号进行再划分,把其一部分划入网络号,就能划分各种类型大小的子网了 。 比如一个公司内部的子网掩码被设为 /24 (可容纳254个主机),那么对于只有 100 台主机的部门,我们可以把部分主机号归入网络号,将此部门的子网掩码设置为 /25 (可容纳127个主机),这样就有效提高了 IP 地址的利用率。

通过以上描述,我们可以发现,CIDR 更多是一个 ISP/Provider 级别的概念,常用于网络核心;而 VLSM 是地址块的接收者用来更有效地使用分配的地址块的一种机制,多用于网络边缘

CIDR 与 VLSM 的关系简单总结为:CIDR 和 VLSM 在某程度上可以看做是逆过程,CIDR 是把几个小网络汇聚成一个大网络来做表示,而 VLSM 则是把一个大网络继续细分为几个小网络进行 IP 地址分配。前者能让路由器的路由条目得到有效的减少,而后者可以充分利用 IP 进行地址分配而解决 IP 地址不被浪费的问题。

文章参考:思科CIDR与VSLM的区别,《计算机网络自顶向下》,《图解TCP/IP》,《网络是如何连接的》