计算机网络:网络层 – IPv4地址

作者 : admin 本文共5584个字,预计阅读时间需要14分钟 发布时间: 2024-06-16 共1人阅读

计算机网络:网络层 – IPv4地址

    • 分类编址
    • 划分子网
      • 子网掩码
    • 无分类编址 CIDR
      • CIDR 地址块
      • 构造超网

在酒店中,每个房间都有门牌号码,服务员送餐时,就可以根据门牌号码来判断一份餐要送到那个房间。

在网络中也是如此,一份数据发送到网络中,也要通过一个标识符来判断这个数据要发送到哪一台主机,而这个标识符就叫做IP地址

本博客讲解的IP地址IPv4版本的IPv4地址,其由32个比特构成。

比如地址:00001010 11110000 00001111 10101010,这样的地址太难记忆了,我们往往会把每八位分为一组,并写为十进制形式:

计算机网络:网络层 – IPv4地址插图

最后再用.把每个数字分开,地址就变成了10.240.15.170,这种记法称为点分十进制

IPv4地址的编址方法经历了如下三个历史阶段:分类编址划分子网无分类编址


分类编址

在互联网发展早期采用的是分类的、两级结构的 IP 地址,由两个字段组成:

  • 第一个字段是网络号,标志主机(或路由器)所连接到的网络
  • 第二个字段是主机号,标志该主机(或路由器)本身

计算机网络:网络层 – IPv4地址插图(1)

拥有相同网络号的主机,视为处于同一个网络中。那么现在的问题就是,得到一个IP地址后,怎么判断哪一部分是主机号,那一部分是网络号呢?这是通过分类来实现的。

分类编址的IP地址分为A、B、C、D、 E 五类:

计算机网络:网络层 – IPv4地址插图(2)
地址的分类规则如下:

  • 首先根据第一位比特位:第一位为0的地址,就是A类地址;第一位为1的地址包含BCDE类地址。
  • 再看第二位:当前两位为10,就是B类地址;前两位为11的地址包含CDE类地址。
  • 再看第三位:当前三位为110,就是C类地址;前三位为111的地址包含DE类地址。
  • 最后看第四位:如果前四位为1110,则为D类地址;如果前四位为1111,则为E类地址。

每一种类型地址的网络号与主机号的位数,都是固定的

表格如下:

分类网络号主机号最高位
A类8位24位0
B类16位16位10
C类24位8位110

D类和E类地址比较特殊:

  • D类地址是多播地址,最高4位固定为1110
  • E 类地址是保留地址,最高4位固定为1111

只有ABC类地址可以分配给网络中的主机和路由器

接下来我们来详谈ABC三类地址:

A类地址:

A类地址中,包含8位网络号与24位主机号,如下:

计算机网络:网络层 – IPv4地址插图(3)

对于网络号部分,A类地址包含从0000000001111111的网络号,即[0, 127]

这些网络号被分为三部分:

  • 0:网络号为00000000的地址,被保留下来,不会给主机使用
  • [1, 126]:这一段网络号是可以指派个给主机正常使用的
  • 127:即网络号01111111,该网络号内部的所有地址,称为本地环回地址,不给主机使用

我简单说明一下本地环回地址,这是一个用于测试的地址,用于在同一台计算机上进行网络通信。比如说你写了一个程序,要通过网络在不同主机之间通信。如果你想要测试你的程序是否可以利用网络通信,此时就可以用本地环回地址

例如:当你开发一个网络应用程序,需要测试它是否能与服务器通信时,你可以使用本地环回地址来模拟这个过程。你可以在本地计算机上安装一个服务器,并使用本地环回地址 (127.0.0.1) 来连接到该服务器。这样,你就可以在不连接到实际网络的情况下测试你的应用程序。

现在聊完了网络号,再看看主机号:

对于可以指派的[1, 126]区间的网络号,以网络号为123为例,其主机号也分为三部分:

  • 123.0.0.0:即主机号为全0,这个主机号不会分配给主机使用,而是用于标识这整个网络
  • 123.255.255.255:即主机号为全1,这个主机号也不会分配给主机使用,而是用于在网络内部进行广播,称为广播地址
  • 其它:只要主机号不为全0全1,就可以给主机正常使用

对于A类地址而言,每个网络中可以分配的IP地址数为:

2

24

2

=

16777214

{\color{Red} 2^{24} – 2 = 16777214}

2242=16777214

也就是一千六百七十多万个,其中-2是要减去全0全1的两个地址。


B,C类地址:
相比于A类地址,BC类地址的结构非常简单,因为BC类地址中不用考虑本地环回地址,也没有被保留的地址。

B类地址为例:

计算机网络:网络层 – IPv4地址插图(4)

对于网络号:B类和C类地址的所有网络号都可以分配,没有特殊的网络号。

比如对于B类地址,其最小可分配的网络号为10000000 00000000,即128.0;而其最大可分配的网络号为10111111 11111111,即191.255

对于主机号:全0的主机号表示本网络,全1的主机号表示该网络的广播地址。

对于B类地址而言,每个网络中可以分配的IP地址数为:

2

16

2

=

65534

{\color{Red} 2^{16} – 2 = 65534}

2162=65534

对于C类地址而言,每个网络中可以分配的IP地址数为:

2

8

2

=

254

{\color{Red} 2^{8} – 2 = 254}

282=254

接下来我汇总一下所有特殊的IP地址:

网络号主机号是否可做源地址是否可做目的地址含义
00可以不可以代表本网络的本主机
0X可以不可以代表本网络的主机号为 X 的主机
全1全1不可以可以在本网络上广播
Y全1不可以可以在网络号为 Y 的网络上广播
Y全0不可以不可以表示网络号为 Y 的整个网络
127非全0,非全1的任何数可以可以本地环回地址

划分子网

接下来我们讲解IPv4地址的第二个发展阶段,划分子网

在分类网络中,我们会存在地址浪费的问题,假设某个单位有300个人,按照分类编址,请问要给这个单位划分哪一类的地址呢?

B类网络中,每个网络含有的IP地址数目为65534,而C类网络中,每个网络含有的IP地址数目为254。那么问题就来了:如果给这个单位C类网络,IP地址数目不够,如果给这个单位B类网络,就会浪费掉六万多个IP地址

为了解决这种资源浪费的问题,IP地址进行了划分子网

划分子网的思想就是:将一个大的网络,划分为更多个小的子网络。

此时IP地址被划分为了网络号子网号主机号三部分:

计算机网络:网络层 – IPv4地址插图(5)

从上图的网络号可以看出,这是一个B类地址,注意:子网划分是建立在分类编址之上的,所以网络号部分依然可以标识ABC类地址,也遵循之前的分类编址规则。

那么这个子网号是如何凭空出现的呢?这个子网号,其实是从主机号中分出来的。

那么这个子网号有啥作用呢?对于网络号和子网号都相同的主机,视为处于同一个网络中!

那么我们再来看看一开始的问题:一个单位有300人,现在要如何给这个单位分配网络?

刚才我们分析过,要分配一个B类地址给这个网络,但是B类地址中有65534个地址,对这个单位来说又太多了,所以我们可以将这个B类地址划分为更多个子网!

假设我们要对166.16.0.0B类网络进行划分,我们可以分配

2

9

=

512

2^{9} = 512

29=512 个地址给这个单位,也就是说对于原先的16位主机号,只保留9位,剩下7位拿去做子网号:

计算机网络:网络层 – IPv4地址插图(6)

此时整个166.16.0.0网络就被分为了

2

7

=

128

2^{7} = 128

27=128 个子网络,也就是子网号从00000001111111

计算机网络:网络层 – IPv4地址插图(7)

现在把其中一个子网分配给该单位,剩下的127个子网给别的地方用,这样就可以大幅减少IP地址的浪费了!

假设这个单位分配到的子网号为1010101,并不是所有的IP地址都可以分配。

计算机网络:网络层 – IPv4地址插图(8)

与之前相同的,主机号全0表示该网络,不可以分配,而主机号全1是广播地址,也不能分配,所以这个子网中可以分配的IP地址总数为:

2

9

2

=

510

2^{9} – 2= 510

292=510 个。

子网掩码

划分子网后,原来属于一个网络的IP地址有可能会被划分在不同的子网,那么如何判断一个IP地址的子网号是哪一部分呢?

这就需要用到子网掩码 (subnet mask),子网掩码也是32位,由一串连续的1和一串连续的0组成,比如11111111 11111111 11110000 00000000

那么子网掩码有什么用呢?子网掩码的1部分,对应IP地址中的网络号子网号,而子网掩码的0部分,对应IP地址主机号,如下:

计算机网络:网络层 – IPv4地址插图(9)

比如以上示例中,主机号145.13子网号3,它们对应的子网掩码都是1,而主机号为10,对应的子网掩码为0

将一个IP地址与它的子网掩码进行按位与运算,就可以得到该IP地址所处的网络

例如:已知 IP 地址是 128.14.35.7,子网掩码是 255.255.240.0,求网络地址

计算机网络:网络层 – IPv4地址插图(10)

将地址128.14.35.7转为二进制:

1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 1 1

再把子网掩码255.255.240.0转为二进制:

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0

将两者按位与:

1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
----------------------------------------------------------------
1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0

再把10000000000011100010转为点分十进制128.14.32.0,此时就得到了网络地址。

由于A类,B类,C类地址都有固定的主机号,所以它们的子网掩码都是有默认值的,比如A类地址的主机号有8位,那么子网掩码前面至少有81,那么子网掩码的默认值就是11111111 00000000 00000000 00000000,点分十进制位255.0.0.0,这种子网掩码称为默认子网掩码

各分类地址的默认子网掩码如下:

计算机网络:网络层 – IPv4地址插图(11)


无分类编址 CIDR

IPv4地址 编址方法的第三个历史阶段,是无分类编址IPv4地址

尽管之前介绍的划分子网的 IPv4地址在一定程度上缓解了因特网在发展中遇到的困难,但是因特网的 IP 地址仍在加速消耗整个 IPV4 地址空间,面临全部耗尽的威胁。为此,因特网工程任务组又提出了采用无分类编址的方法来解决 IPv4地址 紧张的问题。

1993 年英特网工程任务组发布了无分类域间路由选择的相关 RFC 文档。无分类域间路由选择的英文缩写词为CIDR消除了传统 A 类、 B 类和 C 类地址以及划分子网的概念,因此可以更加有效的分配 IPV4 的地址空间。

这里有一个很重要的信息,那就是无分类编址 CIDR已经推翻了之前的分类编址划分子网,是一套全新的IP地址体系,接下来的学习不要带入之前的概念,要看做是一个新的体系去学习。当然,CIDR也有很多和之前相似的地方,它继承了先前的IP地址设计的优点,并优化了部分缺点。

CIDR编址中,IP地址的格式如下:

计算机网络:网络层 – IPv4地址插图(12)

其与分类编址中的网络号 + 主机号的模式很像,但是CIDR中,网络前缀的长度是任意的,不受限制,而分类编址网络号的长度是固定的。

那么对于一个IP地址,要如何知道其有多少位网络前缀呢?

CIDR使用斜线记法或称为CIDR记法,即IP地址的末尾加上一个斜线'/',写上网络前缀所占的位数。例如128.14.35.7/20这个地址,就是指前20位为网络前缀,剩下的12位是主机号

如果想要求出CIDR编址下,IP地址所处的网络,其实就是把主机号的所有比特位变为0,保留网络前缀即可,当然你也可以用通过与子网掩码进行按位与的方法求网络地址,通过反斜线记法可以很轻松求出子网掩码

CIDR 地址块

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

比如128.14.32.0/20,这就是一个CIDR地址块,其表示前20网络前缀128.14.32的所有地址聚合成的一个地址块,也可以表示一个网络。

如下图:

计算机网络:网络层 – IPv4地址插图(13)

要注意,CIDR地址块中包含的地址数,一定是

2

n

2^{n}

2n 个。

接下来我带大家辨析一些网络地址:

  1. 128.14.35.7

该地址是一个IP地址,但是没有通过反斜线记法表示其网络前缀的位数,所以不知道其网络。

  1. 128.14.35.7/20

该地址是一个IP地址,并通过/20表示该地址的网络前缀20位。

  1. 128.14.32.0/20

其有两种可能,如果其表示IP地址,那么这就是一个主机号为全0IP地址

因为其主机号0,所以其也有可能表示CIDR地址块

接下来我们看一些特殊的CIDR地址块

网络前缀长度子网掩码含义
/32255.255.255.255一个IP地址,这个地址一般在路由器中来指定一台主机
/31255.255.255.254这种地址块中,只有两个地址,也就是最后一位主机号分别为10,这种地址用于进行点对点链路通信,此时主机号全1不再表示广播,因为点对点链路没有广播的概念
/00.0.0.0这是全球所有IP地址构成的一个地址块,如果主机号也为全0,即0.0.0.0/0,则表示路由器中的默认路由

构造超网

当多个网络有相同的前缀时,可以把这些网络构造为一个更大的网络,该过程叫做构造超网

比如以下案例:

计算机网络:网络层 – IPv4地址插图(14)

以上的16个网络中,它们都是/24的网络,也就是它们的网络前缀都是20位,但这些网络的前20位都相同,只有第[21, 24]位不同,所以我们可以把它变为一个统一的网络,前缀为:128.14.0000,也就是128.14.0.0/20这个网络。这就是构造超网

有人可以会认为,这个过程不就是把地址统一为CIDR地址块吗?不,两者有很大区别,CIDR地址块是把众多IP地址统一到一个地址块中;而构造超网是把众多网络统一到一个更大的网络中。

即:CIDR地址块统一的是IP地址,而构造超网统一的是网络

构造超网有以下要求:

  1. 所有网络的IP地址必须连续
  2. 网络的总数必须是

    2

    n

    2^{n}

    2n

  3. 所有网络中的最小地址和最大地址,必须构成超网的边界

所谓构成边界,就是说比如说上例中,我们把很多/24的网络构造成了一个/20的网络。那么第[21, 24]位中,最小值必须是0000,最大值必须是1111,这就是两个边界值。并且这两个值中间的所有值都必须连续存在,即第一条规则。


本站无任何商业行为
个人在线分享 » 计算机网络:网络层 – IPv4地址
E-->