当前位置: 首页 > news >正文

ipv4的地址位数_网络基础之IP地址和子网掩码

1c6d5f438cd7c56b1fdd7a9355e5fb80.png

今天来看下IP地址和子网掩码。

子网掩码是每个网络工程师必须要掌握的基础知识,只有掌握它,才能够真正理解TCP/IP协议的设置。下边我们一起来复习复习。

1bdca83d3e4fc0f2ece670a8ece735ad.png

一、IP地址

IP是英文Internet Protocol的缩写,意思是“网络之间互连的协议”,也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。正是因为有了IP协议,因特网才得以迅速发展成为世界上最大的、开放的计算机通信网络。因此,IP协议也可以叫做“因特网协议”。

互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。IP地址在设计时就考虑到地址分配的层次特点,将每个IP地址都分割成网络号和主机号两部分,以便于IP地址的寻址操作。

IP地址是32位的二进制数值,用于在TCP/IP通讯协议中标记每台计算机的地址。通常我们使用点式十进制来表示,如192.168.1.5等等。

每个IP地址又可分为两部分。即网络号部分和主机号部分:网络号表示其所属的网络段编号,主机号则表示该网段中该主机的地址编号。按照网络规模的大小,IP地址可以分为A、B、C、D、E五类,其中A、B、C类是三种主要的类型地址,D类专供多目传送用的多目地址,E类用于扩展备用地址。A、B、C三类IP地址有效范围如下表:

类别 网络号 /占位数 主机号 /占位数 用途

A 1~126 / 8 0~255 0~255 1~254 / 24 国家级

B 128~191 0~255 / 16 0~255 1~254 / 16 跨过组织

C 192~223 0~255 0~255 / 24 1~254 / 8 企业组织

89fdb0b80dc2316cc98b6b40e31fed1e.png

随着互连网应用的不断扩大,原先的IPv4的弊端也逐渐暴露出来,即网络号占位太多,而主机号位太少,所以其能提供的主机地址也越来越稀缺,目前除了使用NAT在企业内部利用保留地址自行分配以外,通常都对一个高类别的IP地址进行再划分,以形成多个子网,提供给不同规模的用户群使用。

二、什么是子网掩码

子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。

子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。

子网掩码是标志两个IP地址是否同属于一个子网的,也是32位二进制地址,其每一个为1代表该位是网络位,为0代表主机位。它和IP地址一样也是使用点式十进制来表示的。如果两个IP地址在子网掩码的按位与的计算下所得结果相同,即表明它们共属于同一子网中。

在计算子网掩码时,我们要注意IP地址中的保留地址,即“ 0”地址和广播地址,它们是指主机地址或网络地址全为“ 0”或“ 1”时的IP地址,它们代表着本网络地址和广播地址,一般是不能被计算在内的。

三、常用的子网掩码

40af7441a6994d23f572e336ecd91014.png

子网掩码有数百种,这里只介绍最常用的两种子网掩码,它们分别是“255.255.255.0”和“255.255.0.0”。

1. 子网掩码是“255.255.255.0”的网络:

最后面一个数字可以在0~255范围内任意变化,因此可以提供256个IP地址。但是实际可用的IP地址数量是256-2,即254个,因为主机号不能全是“0”或全是“1”。

2. 子网掩码是“255.255.0.0”的网络:

后面两个数字可以在0~255范围内任意变化,可以提供65536个IP地址。但是实际可用的IP地址数量减2,即65534个。

IP地址的子网掩码设置不是任意的。如果将子网掩码设置过大,也就是说子网范围扩大,那么,根据子网寻径规则,很可能发往和本地机不在同一子网内的目的机的数据,会因为错误的判断而认为目的机是在同一子网内。

四、子网掩码的算法

对于无须再划分成子网的IP地址来说,其子网掩码非常简单,即按照其定义即可写出:如某B类IP地址为 10.14.3.0,无须再分割子网,则该IP地址的子网掩码为255.255.0.0。如果它是一个C类地址,则其子网掩码为 255.255.255.0。其它类推,不再详述。下面我们关键要介绍的是一个IP地址,还需要将其高位主机位再作为划分出的子网网络号,剩下的是每个子网的主机号,这时该如何进行每个子网的掩码计算。

一、利用子网数来计算

在求子网掩码之前必须先搞清楚要划分的子网数目,以及每个子网内的所需主机数目。

1)将子网数目转化为二进制来表示

2)取得该二进制的位数,为 N

3)取得该IP地址的类子网掩码,将其主机地址部分的的前N位置 1 即得出该IP地址划分子网的子网掩码。

如欲将B类IP地址168.195.0.0划分成27个子网:

1)27=11011

2)该二进制为五位数,N = 5

3)将B类地址的子网掩码255.255.0.0的主机地址前5位置 1,得到 255.255.248.0

即为划分成 27个子网的B类IP地址 168.195.0.0的子网掩码。

二、利用主机数来计算

1)将主机数目转化为二进制来表示

2)如果主机数小于或等于254(注意去掉保留的两个IP地址),则取得该主机的二进制位数,为 N,这里肯定 N<8。如果大于254,则 N>8,这就是说主机地址将占据不止8位。

3)使用255.255.255.255来将该类IP地址的主机地址位数全部置1,然后从后向前的将N位全部置为 0,即为子网掩码值。

如欲将B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台:

1) 700=1010111100

2)该二进制为十位数,N = 10

3)将该B类地址的子网掩码255.255.0.0的主机地址全部置 1,得到255.255.255.255

然后再从后向前将后 10位置0,即为:11111111.11111111.11111100.00000000

即255.255.252.0。这就是该欲划分成主机为700台的B类IP地址 168.195.0.0的子网掩码。

下面列出各类IP地址所能划分出的所有子网,其划分后的主机和子网占位数,以及主机和子网的(最大)数目,注意要去掉保留的IP地址(即划分后有主机位或子网位全为“0”或全为“1”的):

700c4f48f10575c5e3d69b77b2b3baed.png

2debe06c889bc91d15c4e9e9d6d0ba6d.png

五、举例

1、一个主机的IP地址是211.112.18.137,掩码是255.255.255.224,要求计算这个主机所在网络的网络地址和广播地址。

常规办法是:

把这个主机地址和子网掩码都换算成二进制数,两者进行逻辑与运算后即可得到网络地址。

另一种方法:

255.255.255.224的掩码所容纳的IP地址有256-224=32个(包括网络地址和广播地址),那么具有这种掩码的网络地址一定是32的倍数。而网络地址是子网IP地址的开始,广播地址是结束,可使用的主机地址在这个范围内,因此略小于137而又是32的倍数的只有128,所以得出网络地址是211.112.18.128。而广播地址就是下一个网络的网络地址减1。而下一个32的倍数是160,因此可以得到广播地址为211.112.18.159。

2、根据每个网络的主机数量进行子网地址的规划和计算子网掩码。

比如一个子网有10台主机,那么对于这个子网需要的IP地址是:

10+1+1+1=13

注意:加的第一个1是指这个网络连接时所需的网关地址,接着的两个1分别是指网络地址和广播地址。因为13小于16(16等于2的4次方),所以主机位为4位。而

256-16=240

所以该子网掩码为255.255.255.240。

如果一个子网有14台主机,不少人常犯的错误是:依然分配具有16个地址空间的子网,而忘记了给网关分配地址。这样就错误了,因为:

14+1+1+1=17

17大于16,所以我们只能分配具有32个地址(32等于2的5次方)空间的子网。这时子网掩码为:255.255.255.224

267181942e0af7e7898ac1cd5e0d6717.png

结语:优质内容贵在与同行分享,共同学习,共同进步,共同成长。感谢微信公众平台及大家的支持!

资料获取方式:在公众号主菜单栏左下角点击“资料获取”!

相关文章:

  • 城市运行一网统管_民主监督 | 城市运行“一网统管”,“啄木鸟”在行动
  • 能够编辑excel的python 软件有哪些_平面设计包括哪些软件,常用的设计软件都有哪些...
  • rs232串口防雷电路_【ZYNQ Ultrascale+ MPSOC FPGA教程】第十一章 RS232实验
  • 无偿献血机器人_广州首家有机器人的献血屋开业啦!快来体验吧!
  • go 标准错误输出_Linux入门-标准输出和错误输出
  • 找网络高手联系方式_怎么才能联系到网络高手(找网络高手联系方式)
  • 修改用户名_看过来,中华古诗词网络大赛注册及修改用户名通知!
  • 修改串口设备名ttymxc1_011. 有人串口服务器设置方法
  • python输出字符串列表_python学习之字符串、列表
  • python操作oracle多实例数据库_Python操作Oracle数据库的简单方法和封装类实例
  • 动态改变iview样式_重学前端基础:样式操作的方式,包括内部样式,行内样式...
  • 微星主板怎么改内存时序_让你的电脑一秒开机!科技就是生产力,几乎0自检的微星商务主板...
  • mysql 查看当前行锁_MySQL锁定状态查看相关命令
  • mysql导入的数据在哪_解决mysql导入数据量很大导致失败及查找my.ini 位置(my.ini)在哪...
  • mysql开启sql查询语句_MySQL开启记录执行过的SQL语句方法
  • Java多态
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • PHP变量
  • SpringBoot几种定时任务的实现方式
  • 创建一种深思熟虑的文化
  • 从零开始学习部署
  • 对JS继承的一点思考
  • 将 Measurements 和 Units 应用到物理学
  • 前端之Sass/Scss实战笔记
  • 如何选择开源的机器学习框架?
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 如何正确理解,内页权重高于首页?
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • #define
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (四)c52学习之旅-流水LED灯
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .Net Core 中间件验签
  • .NET gRPC 和RESTful简单对比
  • .NET 使用 XPath 来读写 XML 文件
  • .net6+aspose.words导出word并转pdf
  • .net生成的类,跨工程调用显示注释
  • /boot 内存空间不够
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @JsonFormat与@DateTimeFormat注解的使用
  • [2019.3.20]BZOJ4573 [Zjoi2016]大森林
  • [Android Studio] 开发Java 程序
  • [C#]无法获取源 https://api.nuge t.org/v3-index存储签名信息解决方法
  • [C\C++]读入优化【技巧】
  • [C++]模板与STL简介
  • [C++从入门到精通] 14.虚函数、纯虚函数和虚析构(virtual)
  • [DevEpxress]GridControl 显示Gif动画
  • [EFI]Lenovo ThinkPad X280电脑 Hackintosh 黑苹果引导文件
  • [error] 17755#0: *58522 readv() failed (104: Connection reset by peer) while reading upstream
  • [IE技巧] IE 中打开Office文件的设置
  • [iOS]Win8下iTunes无法连接iPhone版本的解决方法