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

2024-06-11 22:44

本文主要是介绍计算机网络:网络层 - IPv4地址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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


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

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

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

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

在这里插入图片描述

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

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


分类编址

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

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

在这里插入图片描述

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

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

在这里插入图片描述
地址的分类规则如下:

  • 首先根据第一位比特位:第一位为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位主机号,如下:

在这里插入图片描述

对于网络号部分,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类地址为例:

在这里插入图片描述

对于网络号: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地址被划分为了网络号子网号主机号三部分:

在这里插入图片描述

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

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

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

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

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

假设我们要对166.16.0.0B类网络进行划分,我们可以分配 2 9 = 512 2^{9} = 512 29=512 个地址给这个单位,也就是说对于原先的16位主机号,只保留9位,剩下7位拿去做子网号:

在这里插入图片描述

此时整个166.16.0.0网络就被分为了 2 7 = 128 2^{7} = 128 27=128 个子网络,也就是子网号从00000001111111

在这里插入图片描述

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

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

在这里插入图片描述

与之前相同的,主机号全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地址主机号,如下:

在这里插入图片描述

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

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

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

在这里插入图片描述

将地址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,这种子网掩码称为默认子网掩码

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

在这里插入图片描述


无分类编址 CIDR

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

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

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

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

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

在这里插入图片描述

其与分类编址中的网络号 + 主机号的模式很像,但是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的所有地址聚合成的一个地址块,也可以表示一个网络。

如下图:

在这里插入图片描述

要注意,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,则表示路由器中的默认路由

构造超网

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

比如以下案例:

在这里插入图片描述

以上的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地址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1052463

相关文章

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

webapp地址

F:\LSP\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

计算机网络基础概念 交换机、路由器、网关、TBOX

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、VLAN是什么?二 、交换机三、路由器四、网关五、TBOXTelematics BOX,简称车载T-BOX,车联网系统包含四部分,主机、车载T-BOX、手机APP及后台系统。主机主要用于车内的影音娱乐,以及车辆信息显示;车载T-BOX主要用于和后台系统/手机APP通信,实现手机APP的车辆信息显示与控

【干货分享】基于SSM的体育场管理系统的开题报告(附源码下载地址)

中秋送好礼 中秋佳节将至,祝福大家中秋快乐,阖家幸福。本期免费分享毕业设计作品:《基于SSM的体育场管理系统》。 基于SSM的体育场管理系统的开题报告 一、课题背景与意义 随着全民健身理念的深入人心,体育场已成为广大师生和社区居民进行体育锻炼的重要场所。然而,传统的体育场管理方式存在诸多问题,如资源分配不均、预约流程繁琐、数据统计不准确等,严重影响了体育场的使用效率和用户体验。

CCF推荐C类会议和期刊总结(计算机网络领域)

CCF推荐C类会议和期刊总结(计算机网络领域) 在计算机网络领域,中国计算机学会(CCF)推荐的C类会议和期刊为研究者提供了广泛的学术交流平台。以下是对所有C类会议和期刊的总结,包括全称、出版社、dblp文献网址以及所属领域。 目录 CCF推荐C类会议和期刊总结(计算机网络领域) C类期刊 1. Ad Hoc Networks 2. CC 3. TNSM 4. IET Com

Exchange 服务器地址列表的配置方法与注意事项

Exchange Server 是微软推出的一款企业级邮件服务器软件,广泛应用于企业内部邮件系统的搭建与管理。配置 Exchange 服务器地址列表是其中一个关键环节。本文将详细介绍 Exchange 服务器地址列表的配置方法与注意事项,帮助系统管理员顺利完成这一任务。 内容目录 1. 引言 2. 准备工作 3. 配置地址列表 3.1 创建地址列表 3.2 使用 Exchange

匹配电子邮件地址的正则表达式

这个正则表达式 QRegularExpression regex(R"((\w+)(\.|_)?(\w+)@(\w+)(\.(\w+))+))"); 用于匹配电子邮件地址的格式。下面是对这个正则表达式的逐步解析和解释: 1. QRegularExpression 构造函数 QRegularExpression regex(R"((\w+)(\.|_)?(\w*)@(\w+)(\.(\w+))+

[Linux]:环境变量与进程地址空间

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 环境变量 1.1 概念 **环境变量(environment variables)**一般是指在操作系统中用来指定操作系统运行环境的一些参数,具有全局属性,可以被子继承继承下去。 如:我们在编写C/C++代码的时,在链接的时候,我们并不知

C# 如何同时Ping多个IP地址

在C#中,如果需要同时ping多个IP地址,可以采用多线程或异步编程的方式来实现,以便可以同时进行多个ping操作。以下是两种常用的方法: 方法一:使用多线程(Task 或 Thread) 使用Task是更现代和推荐的方式,因为它内置了更好的线程管理和异常处理机制。以下是一个使用Task的示例,展示如何同时ping多个IP地址: using System; using System.Co