网络详解 - 网络层(2)IPv4介绍

在整个互联网就是一整个抽象的网络,而 IP 地址就是一个32位的标识符,标记着网络上一个个主机。IP 中包含前部分的网络号来标志这个 IP 是属于哪个网络的网络号,后部分用于来表示这个 IP 的主机号

IP 的历史

IP 的划分主要经历了4个阶段
1.IP 的分类
2.子网的划分
3.超网(CIDR)的构建
4.IPv6 的出现(暂不在该文章中讨论)

IP 的分类

所谓的分类,就是在常见网络中,将IP地址划分成若干个部分。常见的分类有5类。

网络详解 - 网络层(2)IPv4介绍

IP 分类 前缀(2 进制) 网络号位数 范围 用途
A类 0 8 1.0.0.0 - 126.255.255.255 政府机关使用
B类 10 16 128.0.0.0 — 191.255.255.254 大中型企业使用
C类 110 24 192.0.0.0 — 223.255.255.254 个人使用
D类 1110 224.0.0.0 — 239.255.255.254 多播
E类 1111 240.0.0.1 — 255.255.255.254 用于实验保留

子网的划分

子网指的是从分类网络中划分出来的一部分

子网的划分,将 IP 由2级网络拆分成3级网络,包括网络号、子网号、主机号,使得一个大型网络从逻辑上划分成一个个小网络,从而允许一个单一的站点允许拥有多个局域网。还减少了网络的开销,因为将 IP 的区域划分成了几个部分,分组数据只向某个部分进行转发,但是对外还是表现成一个网络。

子网掩码

那么问题来了,有一个数据包是123.4.5.6,已经到达了网关路由器,怎么才能将这个数据包转发给123.4.5.0 呢?单纯从数据报本身是看不出来的,必须要引入别的机制才能知道,这就有了子网掩码。

类别 0 1 2 3
IP地址 123 4 5 6
2级IP子网掩码 11111111 11111111 00000000 00000000
3级IP子网掩码 11111111 11111111 11111111 00000000

将2级掩码和IP进行与运算,就可以得到2级IP的网络号,同理可以得到3级IP的网络号,将这2个网络号进行比较后,就可以轻松的得出子网号。

相应的路由器的转发表也需要进行改动,需要保存三项字段,目标地址、子网掩码、下一跳地址,这样才能是数据报高效正确转发。

特殊的 IP

除了以上的IP以外还有一些特定的IP,来表达特定的值。

网络号 主机号 原地址 目标地址 用途
全0 全0 可用 不可用 用于表示本网络中的本主机(常用用于DHCP协议)
全0 host-id 不可用 可用 用于表示本网络中的host-id主机
net-id 全1 不可用 可用 用于net-id网络进行广播
全1 全1 不可用 可用 用于本网络进行广播(路由器均不转发)
127 非全0全1 可用 可用 用于主机进行回环测试
专用网络

由于全球的 IP 数量有限,不允许每台主机都拥有全球 IP,就划分出一部分特定的 IP 地址专门用来分配个内网。

  • 10.0.0.0 ~ 10.255.255.255(10.0.0.0/8)
  • 172.16.0.0.0 ~ 172.31.255.255(172.16.0.0.0/12)
  • 196.168.0.0 ~ 196.168.255.25(196.168.0.0/16)

构建超网CIDR

按照网络分类,只有划分成3类网络,比如我开了一家公司,只需要6个IP地址就可以了,但是我只能申请一个C类IP地址就有 2^8 个 IP,其中有58个是空闲没有用的。很多公司并不需要C类网络这么多IP地址,导致IP的空间利用率很低,而且 IP 资源也会很快被耗尽,这个时候就出现了 CIDR ,消除了A类B类C类以及子网划分的概念

CIDR将网络分成了2部分,前面部分是“网络前缀”,用来指明网络,后面则用来指明主机。因此CIDR将3级网络又改回了2级,采用的是斜线记法,即在 IP 后面添加上斜线“\”,在写上网络的位数。比如:123.4.5.6/24,就代表前24位是网络前缀,类似于一个C类 IP 地址。