IP地址及编码方式
我们一开始必须要了解清楚,IP地址就是给因特网的每一个主机(或路由器)的每一个接口分配一个在全世界范围内唯一的32位标识符。有了这个唯一的标识符,我们才可能在因特网上进行方便的寻址。我们一般都是将32位的IP地址中的每8位,用等效的十位数进行替换,方便我们阅读。举个例子:
32位:10000000 00001011 00000011 00011111
我们一般用点分十进制表示:128.11.3.31
IP地址的编址方式经过了3个阶段:
- 分类编址。这是最基本的编址方式。
- 划分子网。对分类编址的改进
- 无分类编址。这是目前正在使用的编址方式。
接下来我们一一看看这三种编址方式:
分类编址
分类编址的地址,是由两个固定长度的字段组成。一个字段是网络号(net-id)
,它是标志主机所连网络。另一个字段是主机号(host-id)
,它标志的是该主机,并且主机号必须在网络号的网络范围内是唯一的。这样子,一个IP地址在整个因特网范围内便是唯一的。
分类编址:IP地址定义为:{<网络号>, <主机号>}
这样子的编址方式有以下几种好处:
- 分配IP地址的机构仅仅需要分配网络号即可,主机号自行分配。
- 路由器仅仅根据主机的网络号进行分组转发,这样子路由表里的内容会大大减少,提升了路由寻址的效率。
但是有一个问题就是,32位的IP地址,我们需要多少位的网络号和多少位的主机号呢?分类编址的方案,设计了几种方案,我们看看最常用的三种单播地址。
- A类地址:网络号占1个字节,且网络号第一位是0,相应主机号占3个字节。
- B类地址:网络号占2个字节,且网络号前两位是10,相应主机号占2个字节。
- C类地址:网络号占3个字节,且网络号前三位是110,相应主机号占1个字节。
- D、E这两种地址咱不讨论
通过这样分类编址,当我们得到一个IP地址时,我们可以通过前几位就判断地址类别并计算出网络号和主机号。
划分子网
分类编址看起来很美好,但是实际上它考虑并不周全。在实际应用中,中小型规模的网络开始爆发,这样导致了一个问题十分明显。1个C类地址空间占一个字节也就是能容纳256个主机,其中还有两个是用于特殊目的。对于一个组织来说,254台主机,真的太不够用了。所以只能申请B类地址,也就是占2个字节,65536台主机。这样的结果导致大量的IP地址被浪费,很快就会面临分配完的危险。
为了解决这个问题,提出了分类子网的解决方案。也就是说,我们让几个中小规模的组织使用同一个A或B类地址的网络号,然后再通过子网号(subnet-id)
来区分是否在同一条链路上。子网号是不定长的,对应的主机号就减少子网号所占的位数。
划分子网:IP地址定义为:{<网络号>, <子网号>, <主机号>}
划分子网的编址方式,通过将A、B类地址空间划分给多个组织使用,大大减少了对A、B类地址空间的浪费。
无分类编址
划分子网在一度程度上,大大缓解了空间浪费问题。但是C类地址因为空间太小,得不到充分利用,也是非常大的浪费。后来IETF就提出了无分类编址(CIDR)
方法来解决IP紧张的问题。
CIDR消除了传统的A、B、C类地址以及划分子网的概念。IP地址分成两个部分,前部分是不定长的网络前缀(network-prefix)
,代替分类编址中的“网络号”来指明网络,后面仍旧是主机号,指明主机号。
无分类编址:IP地址定义为:{<网络前缀>, <主机号>}
是不是感觉又回到了分类编址的两级结构,不过它们非常重要的区别就是网络前缀是不定长的。这样一个IP地址并不能确定网络前缀和主机,所以需要配合一个32位的地址掩码(address mask)
。地址掩码是由一串1和跟着后面的0组成的,而且1的长度就是网络前缀的长度。还可以通过斜线记法(slash notation)
,来表示网络前缀1的长度,例如/20
代表地址掩码有20个1。
- A类地址的默认地址掩码是
255.0.0.0
- B类地址的默认地址掩码是
255.255.0.0
- C类地址的默认地址掩码是
255.255.255.0
。
IP地址与地址掩码的计算
接下来,就是看一下IP地址如何配合地址掩码来实现唯一的标识。只要把地址掩码和IP地址进行逐位的“与”运算,就可以得到它的网络地址(主机号全为0)。我们直接举个例子看看通过IP地址如何得到网络地址的。
已知:
IP地址:141.14.72.24(141.14.01001000.24)
地址掩码:255.255.192.0(255.255.11000000.0)
或者用斜线记法:141.14.72.24/18
思路:
将IP地址与网络掩码都转化成二进制后进行“与”运算,这里有个技巧就是,全为1和全为0都是不需要转化运算的。所以在这个题目里,我们仅仅需要将第三个字节进行转化后运算,得到主机号为0的网络号。
计算得:
网络地址:141.14.64.0(141.14.01000000.0)
技巧提示在例子中也讲了,但这里要强调一点就是,同一个IP地址与不同的地址掩码是可以得到相同的网络号的。虽然网络号一样,但是不同的地址掩码所代表的主机空间也是不一样的。所以主机在进行网络配置的时候,不仅需要配置主机的IP地址,还需要配置所在网络的地址掩码。
CIDR地址块
网络前缀不仅仅只是用来表示某个网络的网络地址,它还可以表示连续的IP地址块,所以它不再沿用“网络号”这个说法。CIDR把网络前缀都相同的连续IP地址组成“CIDR地址块”。我们只要知道了CIDR地址块的任意一个地址,就可以知道地址块的最小和最大地址,以及地址数。举个例子:
已知:
IP地址:128.14.35.7/20
思路:
我们从这里可以得到前20位是网络前缀,所以后12位便是主机号。所以我们让主机号都为0,则是最小地址。主机号都为1,就是最大地址。而地址数就是2的12次方。
计算:
最小地址:128.13.32.0
最大地址:128.13.47.255
地址数:4096个
我们使用CIDR可以更有效的分配IPv4的地址空间,可以根据需求分配适当大小的CIDR地址块,拥有之前几种方法所不具备的灵活性。