【计算机网络系列】网络层②:详解网际协议IP中的IP地址

网际协议IP

网际协议IP(Internet Protocol)是TCP/IP体系中两个最主要的协议之一,也是最重要的互联网标准协议之一。

与协议IP配套使用的还有三个协议:

  • 地址解析协议ARP (Address Resolution Protocol)
  • 网际控制报文协议ICMP (Internet Control Message Protocol)
  • 网际组管理协议IGMP (Internet Group Management Protocol)

下图画出了这三个协议和网际协议IP的关系。在这一层中,ARP画在最下面,因为IP经常要使用这个协议。ICMP和IGMP画在这一层的上部,因为它们要使用协议IP。由于网际协议IP是用来使互连起来的许多计算机网络能够进行通信的,因此TCP/IP体系中的网络层常常被称为网际层(internet layer),或IP层。
image.png

IP地址

在TCP/IP体系中,IP地址是一个最基本的概念。一个连接在互联网上的设备,如果没有IP地址,就无法和网上的其他设备进行通信。

IP地址及其表示方法

整个的互联网就是一个单一的、抽象的网络。

IP地址就是给连接到互联网上的每一台主机(或路由器)的每一个接口,分配一个在全世界范围内是唯一32位标识符

IP地址的结构使我们可以在互联网上很方便地进行寻址。

IP地址现在由互联网名字和数字分配机构ICANN (Internet Corporation for Assigned Names and Numbers)进行分配。

主机路由器来说,IP地址都是32位的二进制代码

为了提高可读性,我们常常把32位的IP地址中的每隔8位插入一个空格。为了便于书写和记忆,常用其等效的十进制数字表示,并且在每段数字之间加上一个小数点。这就叫作点分十进制记法(dotted decimal notation)。

下图是一个IP地址表示方法的例子。
image.png
IP地址不但标志了这个主机(或路由器),而且还标志了此接口所连接的网络。因此,32位的IP地址采用两级结构,由两个字段组成。

  • 第一个字段是网络号,它标志主机(或路由器)所连接到的网络。一个网络号在整个互联网范围内必须是唯一的。
  • 第二个字段是主机号,它标志该主机(对路由器来说,就是标志该路由器)。一个主机号在所连接的网络(即前面的网络号所指明的网络)中必须是唯一的。

由此可见,一个IP地址在整个互联网范围内是唯一的。因此,IP地址可以记为:

IP地址 ::= {<网络号>, <主机号>}

IP地址指明了连接到某个网络上的一个主机(或路由器)

下图表示IP地址中的网络号和主机号的位置。具体的规定是:IP地址中的前 n n n位是主机所连接的网络号,而IP地址中后面的 32 − n 32-n 32n位是主机号
image.png
现在的问题是,当我们看到一个IP地址时,怎样知道它的网络号的位数 n n n是多少?

分类的IP地址

在互联网发展早期采用的是分类的IP地址,也就是在上图中的 n n n是固定的几个数之一。分类的方法如下图(a)所示。分类的方法非常简单。这里

  • A类( n = 8 n = 8 n=8)、B类 ( n = 16 n = 16 n=16)和C类( n = 24 n = 24 n=24)地址都是单播地址(一对一通信),是最常用的。
  • D类是多播地址(一对多通信)
  • E类是保留地址

image.png
A类地址的网络号字段占1个字节,只有7位可供使用(该字段的第一位已固定为0)。但要注意:

  • 第一,网络号为全0的IP地址有特殊的用途,它表示“本网络";
  • 第二,网络号为127(即01111111)保留作为本地软件环回测试(loopback test)本主机的进程之间的通信之用。若主机发送一个目的地址为环回地址(例如 127.0.0.1)的IP数据报,则本主机中的协议软件就处理数据报中的数据,而不会把数据报发送到任何网络。

因此A类地址可指派的网络号是126个(即 2 7 − 2 2^7-2 272)。

A类地址的主机号占3个字节。但全0和全1的主机号一般不指派。

  • 全0的主机号表示该IP地址是“本主机”所连接到的单个网络地址(例如,若主机的IP地址为5.6.7.8,则该主机所在的网络的网络号是5,而该网络的网络地址就是5.0.0.0)。
  • 全1表示“所有的”,因此全1的主机号字段表示该网络上的所有主机

因此每一个A类网络中的最大主机数是 2 24 − 2 2^{24}-2 2242,即16777214。

B类地址的网络号字段有2个字节。因此B类地址可指派的网络数为 2 14 2^{14} 214,即16384。B类地址的每一个网络上的最大主机数是 2 16 − 2 2^{16}- 2 2162,即65534。这里需要减2是因为要扣除全0和全1的主机号。

C类地址有3个字节的网络号字段。因此C类地址可指派的网络总数是 2 21 2^{21} 221,即2097152。每一个C类地址的最大主机数是 2 8 − 2 2^8-2 282,即254。

由于近年来已经广泛使用无分类IP地址进行路由选择,A类、B类和C类这种分类地址已成为历史。

无分类编址CIDR

这种编址方法的全名是无分类域间路由选择CIDR(Classless Inter-DomainRouting,CIDR的读音是“sider”),其要点有以下三个。

(1)网络前缀

CIDR把网络号改称为“网络前缀”(network-prefix)(或简称为“前缀”),用来指明网络,剩下的后面部分仍然是主机号,用来指明主机。CIDR的记法是:

IP地址 ::= {<网络前缀>, <主机号>}

下图说明了CIDR的网络前缀和主机号的位置。这里和前面分类的IP地址最大的区别就是网络前缀的位数 n n n不是固定的数,而是可以在0~32之间选取任意的值。
image.png
CIDR使用“斜线记法”(slash notation),或称为CIDR记法,即在IP地址后面加上斜线“/",斜线后面是网络前缀所占的位数。例如,CIDR表示的一个IP地址128.14.35.7/20,二进制IP地址的前20位是网络前缀(相当于原来的网络号),剩下后面12位是主机号。

(2)地址块

CIDR把网络前缀都相同的所有连续的IP地址组成一个“CIDR地址块”。

一个CIDR地址块包含的IP地址数目,取决于网络前缀的位数。

我们只要知道CIDR地址块中的任何一个地址,就可以知道这个地址块的起始地址(即最小地址)和最大地址,以及地址块中的地址数

例如,已知IP地址128.14.35.7/20是某CIDR地址块中的一个地址,现在把它写成二进制表示形式,其中的前20位是网络前缀(用粗体和下划线表示出),而前缀后面的12位是主机号:
128.14.35.7 / 20 = 10000000000011100010 ‾ 001100000111 128.14 .35 .7 / 20=\underline{\mathbf{1 0 0 0 0 0 0 0} 000011100010} 001100000111 128.14.35.7/20=10000000000011100010001100000111
可以很方便地得出这个地址所在的地址块中的最小地址和最大地址:

最小地址 128.14.32.0 10000000 00001110 00100000 00000000
最大地址 128.14.47.255 10000000 00001110 00101111 11111111

这个地址块的IP地址共有 2 12 2^{12} 212个,扣除主机号为全0和全1的地址后,可指派的地址数是 2 12 − 2 2^{12}- 2 2122个。

  • 我们常使用地址块中的最小地址和网络前缀的位数指明一个地址块
  • 也可以用二进制代码简要地表示此地址块: 10000000 00001110 0010*。这里的星号*代表了主机号字段的所有的0。星号前的二进制代码的个数,就是网络前缀的位数。
  • 在不需要指明网络地址时,也可把这样的地址块简称为“/20地址块”。

请注意:

  • 128.14.32.7是IP地址,但未指明网络前缀长度,因此不知道网络地址是什么。
  • 128.14.32.7/20也是IP地址,同时指明了网络前缀为20位,由此可导出网络地址。
  • 128.14.32.0/20是包含多个IP地址的地址块或网络前缀,同时也是这个地址块中主机号为全0的地址。请注意,上面地址块中4段十进制数字最后的0有时可以省略,即简写为128.14.32/20
  • 我们不能仅用128.14.32.0来指明一个网络地址,因为无法知道网络前缀是多少。

(3)地址掩码

CIDR使用斜线记法可以让我们知道网络前缀的数值。但是计算机看不见斜线记法,而是使用二进制来进行各种计算,所以就必须使用32位的地址掩码(address mask),这能够从IP地址迅速算出网络地址。

地址掩码由一连串1和接着的一连串0组成,而1的个数就是网络前缀的长度。地址掩码又称为子网掩码。在CIDR记法中,斜线后面的数字就是地址掩码中1的个数。例如,/20地址块的地址掩码是:11111111 11111111 11110000 00000000(20个连续的1和接着的12个连续的0)。这个掩码用CIDR记法表示就是255.255.240.0/20

对于早期使用的分类IP地址,其地址掩码是固定的,常常不用专门指出。例如:

  • A类网络,地址掩码为255.0.0.0255.0.0.0/8
  • B类网络,地址掩码为255.255.0.0255.255.0.0/16
  • C类网络,地址掩码为255.255.255.0255.255.255.0/24

把二进制的IP地址和地址掩码进行按位AND运算,即可得出网络地址。下图说明了AND运算(即逻辑乘法运算)的过程。其规则是:1 AND 1 = 11 AND 0 = 00 AND 0 = 0
image.png
请注意,从点分十进制的IP地址并不容易看出其网络地址。要使用二进制地址来运算。在本例中把二进制IP地址的前20位保留不变,剩下的12位全写为0,即可得出网络地址

从上面的运算结果可以知道,IP地址128.14.35.7/20所在的网络地址是128.14.32.0/20

CIDR地址中还有三个特殊地址块,即:

  • 前缀 n = 32 n = 32 n=32,即32位IP地址都是前缀,没有主机号。这其实就是一个IP地址。这个特殊地址用于主机路由
  • 前缀 n = 31 n = 31 n=31,这个地址块中只有两个IP地址,其主机号分别为0和1。这个地址块用于点对点链路
  • 前缀 n = 0 n=0 n=0,同时IP地址也是全0,即0.0.0.0/0。这用于默认路由

使用CIDR的一个好处就是可以更加有效地分配IP地址空间,可根据客户的需要分配适当大小的CIDR地址块。然而在使用分类地址时,向一个部门分配IP地址,就只能以/8/16/24为单位来分配。这显然是很不灵活的。

一个大的CIDR地址块中往往包含很多小地址块,所以在路由器的转发表中就利用较大的一个CIDR地址块来代替许多较小的地址块。这种方法称为路由聚合(route aggregation),它使得转发表中只用一个项目就可以表示原来传统分类地址的很多个路由项目,因而大大压缩了转发表所占的空间,减少了查找转发表所需的时间。

网络前缀越短的地址块所包含的地址数就越多。

IP地址的特点

IP地址具有以下一些重要特点。

  1. 每一个IP地址都由网络前缀主机号两部分组成。从这个意义上说,IP地址是一种分等级的地址结构。分两个等级的好处是:
    1. IP地址管理机构在分配IP地址时只分配网络前缀, 而剩下的主机号则由得到该网络前缀的单位自行分配。这样就方便了IP地址的管理;
    2. 路由器根据目的主机所连接的网络前缀来转发分组(而不考虑目的主机号),这样就可以使转发表中的项目数大幅度减少,从而减少转发表所占的存储空间,缩短查找转发表的时间。
  2. IP地址是标志一台主机(或路由器)和一条链路的接口。当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络前缀必须是不同的
  3. 一个网络(或子网)是指具有相同网络前缀的主机的集合,因此,用转发器或交换机连接起来的若干个局域网仍为一个网络,因为这些局域网都具有同样的网络前缀。具有不同网络前缀的局域网必须使用路由器进行互连。
  4. 在IP地址中,所有分配到网络前缀的网络都是平等的。所谓平等,是指互联网同等对待每一个IP地址。

IP地址与MAC地址

在局域网中,由于MAC地址已固化在网卡上的ROM中,因此常常将MAC地址称为硬件地址或物理地址。物理地址的反义词就是虚拟地址、软件地址或逻辑地址,IP地址就属于这类地址。

下图说明了MAC地址和IP地址的区别。从层次的角度看,

  • MAC地址是数据链路层使用的地址,
  • 而IP地址是网络层和以上各层使用的地址,是一种逻辑地址

称IP地址为逻辑地址是因为IP地址是用软件实现的。

image.png
在发送数据时,数据从高层下到低层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给数据链路层,就被封装成MAC帧。MAC帧在传送时使用的源地址目的地址都是MAC地址,这两个MAC地址都写在MAC帧的首部中。

连接在通信链路上的设备(主机或路由器)在收到MAC帧时,根据MAC帧首部中的MAC地址决定收下或丢弃。只有在剥去MAC帧的首部和尾部后把MAC层的数据上交给网络层后,网络层才能在IP数据报的首部中找到源IP地址目的IP地址

总之,

  • IP地址放在IP数据报的首部,而MAC地址则放在MAC帧的首部
  • 在网络层和网络层以上使用的是IP地址,而数据链路层及以下使用的是MAC地址

在上图中,当IP数据报插入到数据链路层的MAC帧以后,整个的IP数据报就成为MAC帧的数据,因而在数据链路层看不见数据报的IP地址。

下图画的是三个局域网用两个路由器 R 1 R_1 R1 R 2 R_2 R2互连起来。现在主机 H 1 H_1 H1要和主机 H 2 H_2 H2通信。这两台主机的IP地址分别是 IP 1 \text{IP}_1 IP1 IP 2 \text{IP}_2 IP2,而它们的MAC地址分别为 MAC 1 \text{MAC}_1 MAC1 MAC 2 \text{MAC}_2 MAC2。通信的路径是:

H_1 --> 经过R_1转发 --> 再经过R_2转发 --> H_2 

由于路由器 R 1 R_1 R1因同时连接到两个局域网上,因此它有两个MAC地址,即 MAC 3 \text{MAC}_3 MAC3 MAC 4 \text{MAC}_4 MAC4。同理,路由器 R 2 R_2 R2也有两个MAC地址 MAC 5 \text{MAC}_5 MAC5 MAC 6 \text{MAC}_6 MAC6

下图(b)特别强调了IP地址与MAC地址所使用的位置的不同。
image.png
image.png
这里需要强调几点:

  1. 在IP层抽象的互联网上只能看到IP数据报。虽然IP数据报要经过路由器 R 1 R_1 R1 R 2 R_2 R2的两次转发,但在它的首部中的源地址和目的地址始终分别是 IP 1 \text{IP}_1 IP1 IP 2 \text{IP}_2 IP2。数据报中间经过的两个路由器的IP地址并不出现在IP数据报的首部中。
  2. 虽然在IP数据报首部有源站IP地址,但路由器只根据目的站的IP地址进行转发
  3. 在局域网的链路层,只能看见MAC帧。IP数据报被封装在MAC帧中。MAC帧在不同网络上传送时,其MAC帧首部中的源地址和目的地址要发生变化,但MAC帧首部的变化,在上面的IP层上是看不见的。
  4. 尽管互连在一起的网络的MAC地址体系各不相同,但IP层抽象的互联网却屏蔽了下层这些很复杂的细节。只要我们在网络层上讨论问题,就能够使用统一的、抽象的IP地址研究主机和主机或路由器之间的通信

事实上,到这里还有两个重要问题没有解决:

  1. 主机或路由器怎样知道应当在MAC帧的首部填入什么样的MAC地址?
  2. 路由器中的转发表是怎样得出的?

我们慢慢来解答这两个问题。

猜你喜欢

转载自blog.csdn.net/qq_37085158/article/details/128393125