在计算机网络中有著名的 OSI 七层协议体系结构,概念清楚,理论完整,但是它既复杂又不实用。TCP/IP 体系结构则不同,得到的广泛的应用。最终结合 OSI 和 TCP/IP 的优点,采用了一种只有五层协议的体系结构,本文的讲述的 IP 都是基于五层协议模型中的 网络层 \

网络模型介绍

OSI 体系结构 TCP/IP 体系结构 五层体系结构
7 应用层 应用层 5 应用层
6 表示层
5 会话层
4 传输层 传输层 4 传输层
3 网络层 网络层 3 网络层
2 数据链路层 网络接口层 2 数据链路层
1 物理层 1 物理层

分类的 IP 地址

IP 地址的表示方法

IP 地址就是给英特网上的每个主机(路由器)的每个接口分配一个在全世界范围内是唯一的 32 位的标识符。其组成第一个字段是网络号,第二个字段是主机号。一个主机号在前面的网络号所指明的网络范围内必须是唯一的,所以一个 IP 地址在整个网络中都是唯一的。目前分为 A、B、C、D、E 五类 IP 地址。
IP

  • 在 A、B、C 三类地址中灰色的部分即为网络号,网络号的前三位是类别位,分别是 0,10,110。也就是说我们可以凭借这个类别位置来判断网络类别。
  • 32 位的总长度,由于 A、B、C 三类网络号的长度的不同,导致 A、B、C 类地址的主机号字段的字节数分别为 3、2、1(一个字节 8 位)。
  • D 类地址的网络号为 1110,用于多播(一对多通讯)。E 类地址的网络号为 1111,保留以后使用。

因此我们一般使用的就是 ABC 三类网络地址,IP 地址是 32 位的二进制代码,为了提高可读性,把 32 位的 IP 地址中的每 8 位用等效的十进制表示出来(点分十进制),于是我们日常生活中常见的 IP 地址就出现了。

例如:IP 地址,128.11.3.31,转化为二进制为 100000000 00001011 00000011 00011111 ,可以看出类别位为 10,可以判断为一个 B 类地址。

常用 IP 地址的指派范围

网络号指派范围

  • A 类地址网络号占用一个字节,但是由于有一位是类别位,只有 7 位可供使用,但是由于规定,网络字段全 0 是个保留字段表示本网络,而 127(01111111)是另外一个保留字段,作为本地软件的环回测试。 我们常见的 127.0.0.1 表示本机,原因也是出自这里。 所以 A 类地址可以指派的网络号个数为(27-2).
  • B 类网络地址网络号有两个字节,前两位为 10 已经固定,只剩下 14 位可用,由于这 14 位无论怎么取值都不会使得网络号为全 0 或者全 1,单实际上规定,规定 B 类最小网络地址为 128.1.0.0。因此 B 类地址可指派的网络号个数为(214-1).
  • C 类地址有 3 个字节的网络字段号,前三位固定 110,只有剩下 21 位可用,同样 C 类地址可指派的最小网络地址也是 192.0.1.0。因此 C 类地址可指派的网络号个数为(221-1).

主机号指派范围

  • 由于主机号有规定,全 0 的主机号代表 IP 地址是 “本主机” 所连接到的单个网络地址(例,一主机地址为 5.6.7.8,则该主机所在的网络地址为 5.0.0.0),而全 1 则表示 “所有的”,即表示该网络上的所有主机。
  • A 类地址的主机号是由三个字节,24 位组成,所以每一个 A 类网络中可分配的主机个数为(224-2).
  • B 类地址的主机号是由两个字节,16 位组成,所以每一个 B 类网络中可分配的主机个数为(216-2).
  • C 类地址的主机号是由一个字节,8 位组成,所以每一个 C 类网络中可分配的主机个数为(28-2).

总结 IP 指派范围

综上网络号和主机号的指派描述可知,IP 地址空间共有 232 个地址。
所有 A 类地址共有(27-2)∗∗(224-2)个,大约 231,占 50%;
所有 B 类地址共有(214-1)∗∗(216-2)个,大约 230, 占 25%;
所有 C 类地址共有(221-1)∗∗(28-2)个,大约 229, 占 12.5%;

网络类别 最大可分配网络数 首个可分配网络号 最后一个可分配网络号 每个网络中最大主机数
A 126(27-2) 1 126 16777214
B 16383(214-1) 128.1 191.255 65534
C 2097151(221-1) 192.0.1 223.255.255 254
  • 所以可以这样来表示一个 A 类 IP 地址 n.x.y.zn.x.y.z,若 1≤n≤1261≤n≤126,0≤x,y,z≤2550≤x,y,z≤255,其中 x,y,zx,y,z 不同时为 0 也不能同时为 255.
  • 所以可以这样来表示一个 B 类 IP 地址 n.m.x.yn.m.x.y,若 128≤n≤191128≤n≤191,0≤m≤2550≤m≤255,0≤x,y≤2550≤x,y≤255,其中 I. 当 n=128n=128 时,m≠0m≠0; II. x,yx,y 不同时为 0 也不能同时为 255;
  • 所以可以这样来表示一个 C 类 IP 地址 n.m.k.xn.m.k.x,若 192≤n≤223192≤n≤223,0≤m,k≤2550≤m,k≤255,1≤x≤2541≤x≤254,其中 当 n=192n=192 时,k≠0k≠0.

IP 地址和硬件地址

从层次角度来看,硬件地址是数据链路层和物理层使用的地址(常称作 MAC 地址),而 IP 地址是网络层和以上各层使用的地址,是一种逻辑地址。在网络层我们进行数据报文从 IP1 传输到 IP2,无论我们中间经过多少次转发,从网络层来看,源地址始终是 IP1,目的地址始终是 IP2。但是从数据链路层来看,显然就不是这样了,这些是物理地址,很有可能从源节点经过多次中间节点的物理地址的转变才能到达目的节点。

而 IP 地址和物理地址的之间的转化则需要依靠两个重要的协议 ARP(地址解析协议),RARP(逆地址解析协议)。IP 地址通过 ARP 转化成物理地址,物理地址可以通过 RARP 转化成相应的 IP 地址。

子网和超网

简单的来说就是如何来管理一个 IP 地址下的多台主机

子网

现在假设这样一个场景,一个数据报起目的地址是 145.13.3.10(在子网 145.13.3.0 中),已经到达路由器 R1(145.13.0.0),那么这个路由器怎么将它转发到 145.13.3.0 呢?
我们并不知道目的地址是否进行了子网的划分。
这就引出了子网掩码的概念了,子网掩码也是 32 位,由一串 1 和 0 组成,子网掩码中的 1 对应于 IP 地址中的网络号位置 + 子网网络号位置,子网掩码中的 0 对应与 IP 地址中现在的主机号位置。
我们只要将 IP 地址和子网掩码进行 “与” 运算,如果进行子网的划分,就立刻得出要找的子网的网络地址,如果没有进行子网划分(有默认的子网掩码),则直接能够得出该 IP 地址的网络地址出来。

  • A 类地址的默认子网掩码是 255.0.0.0
  • B 类地址的默认子网掩码是 255.255.0.0
  • C 类地址的默认子网掩码是 255.255.255.0

超网

无分类编址 CIDR,使用变长的子网掩码,可以进一步提高 IP 地址的资源利用率。有两个特点
第一,消除了传统的 ABC 类地址及划分子网的概念,CIRD 把 32 位的 IP 地址划分成为两个部分,网络前缀和剩下的部分,表示方法为,在 IP 地址后面加上 “/”,然后写上网络前缀所占位数。
第二,把网络前缀相同的 IP 地址组成一个 CIDR 地址块,例如,IP 地址 128.14.35.7/20 用二进制表示 100000000 00001110 00100011 00000111,所以我们很容易可以得出这块地址中最小地址为 128.14.32.0, 即 100000000 00001110 00100000 00000000,最大地址为 128.14.47.255,即 100000000 00001110 00101111 11111111.

为了更加方便进行路由选择,CIDR 使用 32 位的地址掩码,1 的个数就是网络前缀的长度,如上面所举例中的 / 20 的地址块的地址掩码是 11111111 11111111 11110000 00000000

因此可以看出,网络前缀越短,其地址块所包含的地址就越多,这样可以根据实际情况更加有效的分配 IPv4 的地址空间。而由很多个 CIDR 地址快构成的庞大的网络就就被称为 “超网”。