子网掩码详解

2023-11-14

一、 子网掩码的概念及作用  

子网掩码 (subnet mask) 又叫网络掩码、地址掩码、子网络遮罩,是一个应用于 TCP/IP 网络的 32 位二进制值。它可以屏蔽掉 IP 地址中的一部分,从而分离出 IP 地址中的网络部分与主机部分,基于子网掩码,管理员可以将网络进一步划分为若干子网。它必须结合 IP 地址一起使用。

二、 为什么需要使用子网掩码  

虽然我们说子网掩码可以分离出 IP 地址中的网络部分与主机部分,可大家还是会有疑问,比如为什么要区分网络地址与主机地址?区分以后又怎样呢?那么好,让我们再详细的讲一下吧!  

在使用 TCP/IP 协议的两台计算机之间进行通信时,我们通过将本机的子网掩码与接受方主机的 IP 地址进行 ' ' 运算,即可得到目标主机所在的网络号,又由于每台主机在配置 TCP/IP 协议时都设置了一个本机 IP 地址与子网掩码,所以可以知道本机所在的网络号。

通过比较这两个网络号,就可以知道接受方主机是否在本网络上。如果网络号相同,表明接受方在本网络上,那么可以通过相关的协议把数据包直接发送到目标主机;如果网络号不同,表明目标主机在远程网络上,那么数据包将会发送给本网络上的路由器,由路由器将数据包发送到其他网络,直至到达目的地。在这个过程中你可以看到,子网掩码是不可或缺的!

三、 如何用子网掩码得到网络 / 主机地址  

既然子网掩码这么重要,那么它是如何分离出 IP 地址中的网络地址和主机地址的呢?

过程如下:

1. IP 地址与子网掩码转换成二进制;

2. 将二进制形式的 IP 地址与子网掩码做 ' ' 运算,将答案化为十进制便得到网络地址;

3. 将二进制形式的子网掩码取 ' '

4. 将取 ' ' 后的子网掩码与 IP 地址做 ' ' 运算,将答案化为十进制便得到主机地址。

下面我们用一个例子给大家演示:

假设有一个 I P 地址: 192.168.0.1

子网掩码为: 255.255.255.0

化为二进制为: I P 地址 11000000.10101000.00000000.00000001

子网掩码 11111111.11111111.11111111.00000000

将两者做 ' ' 运算得: 11000000.10101000.00000000.00000000

将其化为十进制得: 192.168.0.0

这便是上面 IP 的网络地址,主机地址以此类推。

小技巧:由于观察到上面的子网掩码为 C 类地址的默认子网掩码(至于为什么,可看后面的子网掩码分类就明白了),便可直接看出网络地址为 IP 地址的前三部分,即前三个字节,主机地址为最后一部分。

解惑:

什么?你还是不懂?问我为什么要做 ' ' 运算而不是别的?其实你仔细观察一下上面的例子就应该能明白。

'1' 在做 ' ' 运算时,保存对应项结果, '0' 在做 ' ' 运算时,将对应项清零,利用 ' ' 的这个特性,当管理员设置子网掩码时,即将子网掩码上与网络地址所对应的位都设为 '1', 其他位都设为 '0', 那么当作 ' ' 时, IP 地址中的网络号将被保留到结果中,而主机号将被置 0 ,这样就解析出了网络号,解析主机号也一样,只需先把子网掩码取 ' ', 再做 ' '

四、 子网掩码的分类  

1 )缺省子网掩码:

即未划分子网,对应的网络号的位都置 1 ,主机号都置 0

A 类网络缺省子网掩码: 255.0.0.0

B 类网络缺省子网掩码: 255.255.0.0

C 类网络缺省子网掩码: 255.255.255.0

2 )自定义子网掩码:

将一个网络划分为几个子网,需要每一段使用不同的网络号或子网号,实际上我们可以认为是将主机号分为两个部分:子网号、子网主机号。 形式如下:

未做子网划分的 IP 地址:网络号+主机号

做子网划分后的 IP 地址:网络号+子网号+子网主机号

也就是说 IP 地址在划分子网后,以前的主机号位置的一部分给了子网号,余下的是子网主机号。

五、子网编址技术

前面几点介绍了子网掩码的一些知识,下面我们来看看子网划分,不要认为子网划分与子网掩码没有关系哟,子网划分也是靠子网掩码来实现的。

子网划分说白了是这样一个事情:因为在划分了子网后, IP 地址的网络号是不变的,因此在局域网外部看来,这里仍然只存在一个网络,即网络号所代表的那个网络;但在网络内部却是另外一个景象,因为我们每个子网的子网号是不同的,当用化分子网后的 IP 地址与子网掩码(注意,这里指的子网掩码已经不是缺省子网掩码了,而是自定义子网掩码,是管理员在经过计算后得出的)做 ' ' 运算时,每个子网将得到不同的子网地址,从而实现了对网络的划分(得到了不同的地址,当然就能区别出各个子网了,有趣吧)。

子网编址技术 ,即子网划分将会有助于以下问题的解决:

1 )巨大的网络地址管理耗费:如果你是一个 A 类网络的管理员,你一定会为管理数量庞大的主机而头痛的;

2 )路由器中的选路表的急剧膨胀:当路由器与其他路由器交换选路表时,互联网的负载是很高的,所需的计算量也很高;

3 IP 地址空间有限并终将枯竭:这是一个至关重要的问题,高速发展的 internet, 使原来的编址方法不能适应,而一些 IP 地址却不能被充分的利用,造成了浪费。

因此,在配置局域网或其他网络时,根据需要划分子网是很重要的,有时也是必要的。现在,子网编址技术已经被绝大多数局域网所使用。

六、 如何划分子网及确定子网掩码

在动手划分之前,一定要考虑网络目前的需求和将来的需求计划。

划分子网主要从以下方面考虑 :

1 、网络中物理段的数量(即要划分的子网数量)

2 、每个物理段的主机的数量

确定子网掩码的步骤:

第一步:确定物理网段的数量,并将其转换为二进制数,并确定位数 n 。如:你需要 6 个子网, 6 的二进制值为 110 ,共 3 , n=3

第二步:按照你 IP 地址的类型写出其缺省子网掩码。如 C 类,则缺省子网掩码为 11111111.11111111.11111111.00000000

第三步:将子网掩码中与主机号的前 n 位对应的位置置 1 ,其余位置置 0 。若 n=3 且为

C 类地址:则得到子网掩码为 11111111.11111111.11111111.11100000 化为十进制得到 255.255.255.224

B 类地址:则得到子网掩码为 11111111.11111111.11100000.00000000 化为十进制得到 255.255.224.0

A 类地址:则得到子网掩码为 11111111.11100000.00000000.00000000 化为十进制得到 255.224.0.0

另:由于网络被划分为 6 个子网,占用了主机号的前 3 位,若是 C 类地址,则主机号只能用 5 位来表示主机号,因此每个子网内的主机数量=( 2^5 )- 2 30 6 个子网总共所能标识的主机数将小于 254 ,这点请大家注意!(至于为什么减 2 ,可看后面说明)

解惑:

1、 你可能有这样的疑问,比如在上面的例子里, 6 的二进制值为 110 ,那么为什么要将子网掩码中与主机号的前 n 位对应的位置都置 1 ,而不是用 6 的二进制 110 去替代前 n 位呢?

呵呵,这个问题提的很好,答案是这样的:我们计算子网掩码的目的是什么?就是希望它在做 ' ' 的时候能够解析出网络号,也就是说它与网络号所对应的位置都应该是 1 (当然包括与子网号所对应的位置),那么很显然,你写上 110 是不对的,如果你这么写,那么它的意义是主机号的前两位作为子网号,那么这样将最多划分 2 个子网(不明白没关系,下面有计算子网数量的方法),与我们当初所要划分的 6 个子网显然是不一致的。这样解释你能明白马?

2、 细心的人可能会发现,划分 4 个子网, 5 个子网和 6 个子网的子网掩码是一样的,同为 255.255.255.224 ,是不是错了呢?三个子网掩码应该不同呀?呵呵,是这样的,因为 4 5 6 的二进制值都是 3 为,因此在子网掩码中这三位都置 1 ,划分是没有问题的,只是你的理解上有一点小小的问题,划分为 4 个子网,其实可以理解为划分为 6 个子网,但你只使用了其中的 4 个。比如你想划分 8 个子网,与划分 14 个子网所得到的子网掩码是一样的,都占用了 4 位作为子网号。

七、相关问题  

1 )如何判断是否做了子网划分?

如果它使用了缺省子网掩码,那么表示没有作子网划分;反之,则一定作了子网划分。

2 )如何计算子网地址?

IP 地址与子网掩码的二进制形式做 ' ' ,得到的结果即为子网地址。

3 )如何计算主机地址?

先将子网掩码的二进制取 ' ' ,再与 IP 地址做 ' '

4 )如何计算子网数量?

这个问题大家会常常提到,还是从子网掩码入手,主要有两个步骤:

1. 观察子网掩码的二进制形式,确定作为子网号的位数 n

2. 子网数量为 2^n 2 。(为什么减 2 ,继续往下看)

举个例子来说,比如有这样一个子网掩码: 255.255.255.224 其二进制为:

11111111.11111111.11111111.11100000

可见 n=3,2 3 次方为 8 ,说明子网地址可能有

如下 8 种情况:

000      001      010       011      100     101      110      111

但其中代表网络自身的 000 ;代表广播地址的 111 是被保留的,所以要减 2

5 )如何计算总主机数量,子网内主机数量?

总主机数量=子网数量×子网内主机数量

再用一个例子给大家说明,比如子网掩码为 255.255.255.224

上面的讨论知道它最多可以划分 6 个子网,那么每个子网内最多有多少个主机呢?其实上面我已经给大家算过了,由于网络被划分为 6 个子网,占用了主机号的前 3 位,且是 C 类地址,则主机号只能用 5 位来表示主机号,因此子网内的主机数量=( 2 5 次方)- 2 30.

因此通过这个子网掩码我们可以算出这个网络最多可以标识 6*30=180 个主机(可见,在化分子网后,整个网络所能标识的主机数量将减少)。

6 )计算自定义子网 IP 地址范围

通过一个自定义子网掩码,我们可以得到这个网络所有可能的 IP 地址范围。

具体步骤:

1. 写出二进制子网地址;

2. 将子网地址化为十进制;

3. 计算子网所能容纳主机数;

4. 得出 IP 范围(起始地址:子网地址+ 1 ;终止地址:子网地址+主机数)

假设一个子网掩码为: 255.255.255.224 ,可知其最多可以划分 6 个子网,子网内主机数为 30 ,那么所有可能的 IP 地址及计算流程如下:

子网--——子网地址(二进制)------子网地址-----实际 IP 范围

1 11001010.01110000.00001010.00100000 202.112.10.32 202.112.10.33~202.112.10.62

2 11001010.01110000.00001010.01000000 202.112.10.64 202.112.10.65~202.112.10.94

3 11001010.01110000.00001010.01100000 202.112.10.96 202.112.10.97~202.112.10.126

4 11001010.01110000.00001010.10000000 202.112.10.128 202.112.10.129~202.112.10.158

5 11001010.01110000.00001010.10100000 202.112.10.160 202.112.10.161~202.112.10.190

6 11001010.01110000.00001010.11000000 202.112.10.192 202.112.10.193~202.112.10.222

 

主要参考网站: http://technic.xkq.com/20090225/24799.html

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

子网掩码详解 的相关文章

  • 使用 mono/nunit-console/4 在 Mac OS X 控制台上运行测试

    我安装了 Max OS X 10 11 1 上面装有 Xamarin 我编写了简单的测试类 只是为了测试在 Mac OS X 和 Ubuntu 上运行 Nunit 测试 该类实际上有一个返回字符串的方法 using System names
  • 何时使用 =default 使析构函数默认?

    尽管对构造函数使用 default 对我来说很清楚 即强制编译器在其他构造函数存在时创建默认构造函数 但我仍然无法理解这两种类型的析构函数之间的区别 那些使用 default 的 那些没有显式定义并由编译器自动生成的 我唯一想到的是 gro
  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • EF Core 通过完全替换断开集合导航属性的更新

    使用 EF Core 5 0 我有一个 SPA 页面 可以加载Group实体及其集合Employee来自 API 的实体 var groupToUpdate await context Groups Include g gt g Emplo
  • VS 程序在调试模式下崩溃,但在发布模式下不崩溃?

    我正在 VS 2012 中运行以下程序来尝试 Thrust 函数查找 include cuda runtime h include device launch parameters h include
  • ASP.NET Web API 客户端 ProgressMessageHandler Post 任务卡在 WinForm 应用程序中

    我在用着HttpClient and ProgressMessageHandler来自MS ASP NET Web API 客户端库 http nuget org packages Microsoft AspNet WebApi Clien
  • 与 Qt 项目的静态链接

    我有一个在 Visual Studio 2010 Professional 中构建的 Qt 项目 但是 当我运行它 在调试或发布模式下 时 它会要求一些 Qt dll 如果我提供 dll 并将它们放入 System32 中 它就可以工作 但
  • 指向特征矩阵的指针数组

    我在代码中使用 Eigen 的 MatrixXd 矩阵 在某个时刻我需要一个 3D 矩阵 由于 Eigen 没有三维矩阵类型 因为它仅针对线性代数进行了优化 因此我创建了一个 MatrixXd 类型的指针数组 Eigen MatrixXd
  • 找不到 assimp-vc140-mt.dll ASSIMP

    我已经从以下位置下载了 Assimp 项目http assimp sourceforge net main downloads html http assimp sourceforge net main downloads html Ass
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • 在 JSQMessagesViewController 中显示 LocationMediaItem

    我刚刚尝试实施LocationMediaItem in my Xamarin iOS应用程序使用JSQMessagesViewController 一切都很顺利 唯一的问题是UICollectionView应该显示位置的单元格永远停留在加载
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • AES 输出是否小于输入?

    我想加密一个字符串并将其嵌入到 URL 中 因此我想确保加密的输出不大于输入 AES 是可行的方法吗 不可能创建任何始终会创建比输入更小的输出的算法 但可以将任何输出反转回输入 如果您允许 不大于输入 那么基本上您只是在谈论同构算法alwa
  • 将标量添加到特征矩阵(向量)

    我刚刚开始使用 Eigen 库 无法理解如何向所有矩阵成员添加标量值 假设我有一个矩阵 Eigen Matrix3Xf mtx Eigen Matrix3Xf Ones 3 4 mtx mtx 1 main cxx 104 13 error
  • 如何在c的case语句中使用省略号?

    CASE expr no commas ELLIPSIS expr no commas 我在c的语法规则中看到了这样的规则 但是当我尝试重现它时 int test float i switch i case 1 3 printf hi 它失
  • 我可以让 ungetc 取消阻止阻塞的 fgetc 调用吗?

    我想在收到 SIGUSR1 后使用 ungetc 将 A 字符重新填充到标准输入中 想象一下我有充分的理由这样做 调用 foo 时 stdin 中的阻塞读取不会被收到信号时的 ungetc 调用中断 虽然我没想到它会按原样工作 但我想知道是
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 如何在 DropDownList 中保留空格 - ASP.net MVC Razor 视图

    我在视图中通过以下方式绑定我的模型 问题是我的项目文本是格式化文本 单词之间有空格 如下所示 123 First 234 00 123 AnotherItem 234 00 123 Second 234 00 我想保留此项目文本中的空格 即
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • OpenGL--光源

    OpenGL至少支持8个光源 要查询OpenGL实现支持的光源数 可调用glGetIntegerv 要启用或者禁用光源 分别使用glEnable GL LIGHTi 和glDisable GL LIGHTi 其中i的可能取值为0到GL MA
  • mysql查询所有分类前三的数据

    设计思路 当mysql查询有很多分类时 可能只需要每种分类的前三或者前十的数据 不需要返回所有的结果 所以我们可以给不同种类的数据添加序号 然后通过序号来筛选结果 例 建一张工人工作质量表 用年份和质量来分类 CREATE TABLE wo
  • kali如何使用中文语言包的方法

    kali linux2020 06版如何使用中文语言包 原来kali还需要使用独立的汉化包 现在中文语言包是集成在系统中的 但安装上去默认的还是英文 对于我这种英文欠佳的不太友好 于是 打开终端 输入 sudo dpkg reconfigu
  • angular2 对于DOM元素的获取与操作

    为了能够支持跨平台 angular通过抽象层封装了不同平台的差异 正确操作DOM的方式 用ElementRef和Renderer2 这篇文章将讲述如何使用Renderer2来操作DOM元素 我们可以使用Renderer2对元素的class和
  • 基于改进多目标粒子群算法的配电网储能选址定容——附Matlab代码

    目录 摘要 主要内容 程序思路 储能选址定容优化模型 1 节点电压波动 2 负荷波动 3 储能系统容量 改进的多目标粒子群算法 1 自适应权重 2 交叉变异 3 种群全局最优解的选取 算例分析及结果 本文Matlab代码分享 摘要 以系统节
  • 人工智能:分类算法——朴素贝叶斯、决策树的简单理解与代码实现,SVM、人工神经网络的简单理解

    下文使用代码 链接 pan baidu com s 1sR2bt Iu89M3h 8XMPjEuQ 提取ey3q 分类算法朴素贝叶斯 决策树 SVM 人工神经网络 汽车分类实战 一 实验目的 二 实验的硬件 软件平台 三 实验算法原理 一
  • Linux查看应用的CPU、内存使用情况

    目录 一 jps命令 二 ps命令 三 top命令 四 free命令 五 df命令 查看应用的CPU 内存使用情况 使用jps ps top free df命令查看 一 jps命令 可以列出本机所有java应用程序的进程pid jps op
  • c++11 chrono全面解析(高精度时钟,可达纳秒级别)

    1 精度 时钟节拍 时间精度 template
  • 进程池

    进程池 进程池的使用场景 当我们需要并行的处理大规模任务的时候 需要使用到多进程 多线程技术 比如说服务器处理大量客户端的任务 我在大一的时候写过一个C S mysql架构的聊天室 大概是这样处理的 每当有客户端发出连接请求时 服务器acc
  • 如何获取美团的热门商品和服务

    导语 美团是中国最大的生活服务平台之一 提供了各种各样的商品和服务 如美食 酒店 旅游 电影 娱乐等 如果你想了解美团的热门商品和服务 你可以使用爬虫技术来获取它们 本文将介绍如何使用Python和BeautifulSoup库来编写一个简单
  • 【React】Hooks入门教程(二、React最常用的四种钩子)

    这个 API 是 React 的未来 有必要深入理解 本文谈谈我的理解 简单介绍它的用法 帮助大家快速上手 阅读本文需要有 React 基础 如果你还没学会 React 可以先看一下它的教程 更新 我后来又写了一篇 轻松学会 React 钩
  • 计算机网络——7层OSI网络模型

    文章目录 OSI模型 1 应用层 2 表示层 3 会话层 4 传输层 5 网络层 6 网络链路层 7 物理层 TCP IP分层模型 1 第一层 网络接口层 和物理层 2 第二层 网间 络 层 3 第三层 传输层 4 第四层 应用层 TCP
  • xxj-job容器部署

    一 admin端命令 docker run e PARAMS spring datasource url jdbc mysql 127 0 0 1 3306 xxl job useUnicode true characterEncoding
  • ReentrantLock学习总结

    ReentrantLock锁和synchronized锁相比具有以下特点 可被中断 即可以设置 可中断锁 当t1线程获取不到锁对象处于Blocked状态时 可由另一个线程调用t1的interrupt方法将其中断 此时t1会抛出被打断异常 可
  • 使用dat.gui更改three.js中的物体变量

    一 dat gui介绍 gui是一种JavaScript库 用于创建可视化控件和调试工具 它是dat gui的简称 dat gui是一个用于在Web应用程序中创建可定制GUI的JavaScript库 它可以轻松创建滑块 复选框 颜色选择器等
  • 正点原子IMXU开发板Qt开发环境搭建及测试

    Qt交叉编译器的安装 第一步 安装Qt开发使用的交叉编译器 位于 开发光盘A 基础资料 5 开发工具 交叉编译器 第二步 使用FileZilla Client将交叉编译器传输到Ubuntu中 第三步 在Ubuntu中给传输过去的交叉编译器可
  • mysql判断时间是否在当前时间内_判断当前时间是否在某时间段内

    public static booleantimeQuantum String stTime String edTime Calendar cal Calendar getInstance 获得一个日历 SimpleDateFormat s
  • [学习笔记]Linux + Nginx环境下部署 Web 站点

    部署后端程序 请阅读 学习笔记 Linux环境下部署 Net5 程序 林晓lx的博客 打包项目 以Vue项目为例 首先打包站点 前往项目的根目录并键入 yarn build 等待打包结束 成功后将在根目录下生成dist文件夹 用Zip压缩d
  • 信息学奥赛一本通C++语言——1139:整理药名

    题目描述 医生在书写药品名的时候经常不注意大小写 格式比较混乱 现要求你写一个程序将医生书写混乱的药品名整理成统一规范的格式 即药品名的第一个字符如果是字母要大写 其他字母小写 如将ASPIRIN aspirin整理成Aspirin 输入
  • 子网掩码详解

    一 子网掩码的概念及作用 子网掩码 subnet mask 又叫网络掩码 地址掩码 子网络遮罩 是一个应用于 TCP IP 网络的 32 位二进制值 它可以屏蔽掉 IP 地址中的一部分 从而分离出 IP 地址中的网络部分与主机部分 基于子网