关于IP的相关计算
不论是考研还是考各种计算机类的证,大家或多或少都会遇到网络部分的一种题型,大体的归类就是以下几种:
- 已知一个IP是192.XX.XX.XX,子网掩码是255.255.255.0,那么它的网络地址是多少?
- 已知某主机的ip地址是192.168.100.200,子网掩码为255.255.255.192,其网络内可用的ip地址个数为多少?
- 一个A类ip地址的子网掩码是255.255.240.0,共有几位被用来划分子网?且可以划分多少个子网?每个子网ip地址数量是多少?
- 已知IP地址为10.135.255.19,子网掩码为255.255.255.248,那么该网的广播地址为多少?
这里就详细记录一下这类问题的解决方案,看这些问题之前,先补充一下网络里面一些关于IP的知识。
IP地址的格式和分类
IP地址是一个网卡在网络世界的通讯地址,相当于我们现实生活中的门牌号,既然是门牌号就必须要保证唯一,就好比,你住13号楼2单元602,我的地址也是13号楼2单元602,那快递小哥就懵逼了,所以,有时候咱们电脑弹出网络地址冲突,上不去网的情况,多半就是Ip冲突。
在网际层中,利用 IP 地址将数据传输到目的地。为了能够使数据正确地发送到目标主机上,网络上的 IP 地址必须有一定的规则来识别主机的位置。就拿10.11.12.13来说,这是一个IP地址,这个地址被点分割为四个部分,每个部分8个bit,所以IP地址总共是32位。本来32位的IP设计就导致数量不多,设计者们又将它划分为了5种类型:
为了便于寻址,了解目标主机的位置,每个 IP 地址包括两个标识码(ID),即网络 ID 和主机 ID。同一个物理网络上的所有主机都使用同一个网络 ID,网络上的一个主机(包括网络上的工作站、服务器和路由器等)有一个主机 ID 与其对应。这个ID的确认就是使用上面提到的32位来进行划分,说白了就是32个二进制位,前几位为网络ID,后几位为主机ID。
- A 类:前 8 位表示网络 ID,网络 ID 的第一位以 0 开始的地址。后 24 位表示主机 ID;该地址分配给政府机关单位使用。
- B 类:前 16 位表示网络 ID,网络 ID 的第一位以 10 开始的地址。后 16 位表示主机 ID;该地址分配给中等规模的企业使用。
- C 类:前 24 位表示网络 ID,网络ID的第一位以 110 开始的地址。后 8 位表示主机 ID;该地址分配给任何需要的人使用。
- D 类:不分网络 ID 和主机 ID;地址以 1110 开始的地址。该地址用于多播。
- E 类:不分网络 ID 和主机 ID;地址以 11110 开始的地址。该地址用于实验。
下面这个表图,详细标明了ABC三类所能包含的主机数量
CIDR(无类域间路由)
经过上面的介绍,我们似乎发现了一个问题,能给我们使用的似乎只有C类地址,而C类地址的数量有限且不是很多,只有254个,这要是使用的话,一个网吧或者一个稍微大一点的单位就能把254个IP给分干净,而B类的地址又太多,这似乎很不平衡。于是,CIDR(Classless Inter-Domain Routing,CIDR)就诞生了,CIDR中文名字叫做无类域间路由,无类域间路由(Classless Inter-Domain Routing,CIDR)可以将路由集中起来,在路由表中更灵活地定义地址。它不区分 A 类、B 类、C 类地址,而是使用 CIDR 前缀的值指定地址中作为网络 ID 的位数。
CIDR 标记使用一个斜线 /
分隔符,后面跟一个十进制数值表示地址中网络部分所占的位数。例如,10.100.122.2/24 中的 24 表示地址中 24位用于网络 ID,后8位用于主机ID,伴随着CIDR的,随之产生了 广播地址 10.100.122.255 和 子网掩码 255.255.255.0
如何理解子网掩码
要想理解什么是子网掩码,就不能不了解IP地址的构成。互联网是由许多小型网络构成的,每个网络上都有许多主机,这样便构成了一个有层次的结构。IP地址在设计时就考虑到地址分配的层次特点,将每个IP地址都分割成网络号和主机号两部分,以便于IP地址的寻址操作。
IP地址的网络号和主机号各是多少位呢?如果不指定,就不知道哪些位是网络号、哪些是主机号,这就需要通过子网掩码来实现。什么是子网掩码子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分子网掩码的设定必须遵循一定的规则。与IP地址相同,子网掩码的长度也是32位,左边是网络位,用二进制数字“1”表示;右边是主机位,用二进制数字“0”表示。假设IP地址为“192.168.1.1”子网掩码为“255.255.255.0”。其中,“1”有24个,代表与此相对应的IP地址左边24位是网络号;“0”有8个,代表与此相对应的IP地址右边8位是主机号。这样,子网掩码就确定了一个IP地址的32位二进制数字中哪些是网络号、哪些是主机号。这对于采用TCP/IP协议的网络来说非常重要,只有通过子网掩码,才能表明一台主机所在的子网与其他子网的关系,使网络正常工作。
具体的计算
有了前面的补充,我们开始详细来看一下开篇说的几个问题。
已知一个IP是192.XX.XX.XX,子网掩码是255.XXX.XXX.0,那么它的网络地址是多少?
这一类型的思路就是,先将IP地址与子网掩码转化为二进制,然后进行 and 运算。
假设IP是192.168.2.1,子网掩码是255.255.255.0,
IP的二进制为:11000000.10101000.00000010.0000000
子网掩码的二进制:11111111.11111111.11111111.00000000
进行按位 “与(and)” 计算:
11000000.10101000.00000010.00000000
11111111.11111111.11111111.00000000
得:
11000000.10101000.00000010.00000000
8位为一单位转化为10进制:
网络地址就是:192.168.2.0
已知某主机的ip地址是192.168.100.200,子网掩码为255.255.255.192,其网络内可用的ip地址个数为多少?
这一类型思路就是,计算网络掩码中主机ID的位数,看看主机ID可以分出多少台机器
将子网掩码255.255.255.192转换为二进制:11111111.11111111.11111111.11000000
子网掩码共有26位,还有6位可用。
即2的6次方减去2(广播地址和网络地址不可用),等于62,即有62个ip地址可用。
一个A类ip地址的子网掩码是255.255.240.0,共有几位被用来划分子网?且可以划分多少个子网?每个子网ip地址数量是多少?
首先,固定类型的IP地址的子网掩码位数是确定的,根据给出的子网掩码位数与默认的子网掩码位数的差值,可以得出子网数,每个子网的网络号位数已经确认,那么,只需要用总位数(32)减去网络号的位数,可以得到每个子网的主机ID的位数,就能求出每个子网的IP地址数量
将子网掩码255.255.240.0转换为二进制:11111111.11111111.11110000.00000000
子网掩码共有20位,而一个A类的ip地址的子网掩码是8位,即有12位被用来划分子网。
所以子网数为:2的12次方=4096个子网。
因为ip地址为32位,网络号已为20位,则主机数12位。每个子网中的ip数量为2^12=4096,但是能够分配给计算机使用的只有4096-2=4094个,(减去一个网络地址与一个广播地址)。
已知IP地址为10.135.255.19,子网掩码为255.255.255.248,那么该网的广播地址为多少?
要得到广播,先得出网络地址,然后把网络地址的主机位全换成1,便就是广播地址。
将ip地址10.135.255.19转换为二进制:00001010.10001001.11111111.00010011
将子网掩码255.255.255.248转换成二进制:11111111.11111111.11111111.11111000
然后将两者相“与(and)"运算得出网络号:
00001010.10001001.11111111.00010011
11111111.11111111.11111111.11111000
得:00001010.10001001.11111111.00010000,转换成网络地址就是:10.135.255.16
从子网掩码 11111111.11111111.11111111.11111000 可以看出,这个子网掩码是29位。也就是主机数还有3位可用。
把网络地址 00001010.10001001.11111111.00010000 的后面三个零全换成1,得出广播地址为:10.135.255.23
关于IP的相关计算的更多相关文章
- IP地址分类及其相关计算问题
IP地址分类及其相关计算问题 公网IP和子网IP 公网IP: • A类:1.0.0.0 到 127.255.255.255 主要分配 给大量主机而局域网网络数量较少的大型网络 • B类:128.0.0 ...
- MATLAB线性回归方程与非线性回归方程的相关计算
每次比赛都需要查一下,这次直接总结到自己的博客中. 以这个为例子: 2.线性方程的相关计算 x=[1,2,3,4,5]';%参数矩阵 X=[ones(5,1),x];%产生一个5行一列的矩阵,后接x矩 ...
- 你应该知道的ip地址相关知识
IP地址是一个网卡在网络世界里的通讯地址,相当于我们家里的门牌号码.这样类比的话,很显然ip地址是唯一的.在windows系统中,我们可以使用 ipconfig 命令查看本机的ip地址相关信息: 图中 ...
- 大数据学习day23-----spark06--------1. Spark执行流程(知识补充:RDD的依赖关系)2. Repartition和coalesce算子的区别 3.触发多次actions时,速度不一样 4. RDD的深入理解(错误例子,RDD数据是如何获取的)5 购物的相关计算
1. Spark执行流程 知识补充:RDD的依赖关系 RDD的依赖关系分为两类:窄依赖(Narrow Dependency)和宽依赖(Shuffle Dependency) (1)窄依赖 窄依赖指的是 ...
- IP首部校验和计算
根据RFC1071文档的计算方法,编写代码实现IP首部校验和的计算 计算步骤: 1.首先将IP首部中校验和字段置0 2.将IP首部每16bit进行相加,如果有进位产生,则将进位加到最低位. 3.将计算 ...
- ubuntu下网络IP设置相关命令
一.使用命令设置ubuntu的ip地址 1.修改配置文件blacklist.conf禁用IPV6: sudo vi /etc/modprobe.d/blacklist.conf 2.在文档最后添加 b ...
- ip netns相关命令
1.增加虚拟网络命名空间 ip netns add net0 2.显示所有的虚拟网络命名空间 EULER:~ # ip netns list net0 也可通过查看/var/run/netns ...
- 由IP和掩码计算广播地址
public static IPAddress GetBroadcast(IPAddress ipAddress, IPAddress subnetMask) { var ip = ipAddress ...
- c++ ip地址相关
#include <stdio.h> #include <string.h> #include <arpa/inet.h> #include <sys/typ ...
随机推荐
- java的jdk8新特性optional怎么样使用
从 Java 8 引入的一个很有趣的特性是 Optional 类.Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException) -- 每个 Java 程序员都 ...
- CommandLineRunner 可能会导致你的应用宕机停止,我劝你耗子尾汁
hello,大家好,我是小黑,又和大家见面啦~~ 如果你去某度搜索关键词 CommandLineRunner 初始化资源 ,截止小黑同学写这篇推文之前,大概能收到 1,030,000 个结果. 网上大 ...
- 学习笔记:Prufer 编码
Prufer 编码可以将无根树与序列之间进行转化. 一个 \(n\) 个点.区分编号的无向图 和 Prufer 序列一定是一一对应的,下面会给出映射方式. 借此可以证明 Cayley 定理: \(n\ ...
- 使用git客户端免密码进行拉取等相关操作
前言 如果使用git客户端进行pull或push操作时,遇到有权限的项目总要输入用户名密码,真的是太麻烦了,因此需要稍作修改,然后就可以免密码操作啦! 方法: 进入C盘->用户->你的主机 ...
- DVWA各等级XSS
xss原理及基本介绍 XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器 ...
- Pytest 学习(二十五)- allure 命令行参数【转】
先看看 allure 命令的帮助文档 cmd 敲 allure -h allure 命令的语法格式 allure [options] [command] [command options] optio ...
- 精尽Spring MVC源码分析 - HandlerMapping 组件(三)之 AbstractHandlerMethodMapping
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- 使用plsql 连接oracle数据库
1. 首先,需要下载oracle数据库的客户端,因为plsql是32位的,所以推荐下载32位的oracle数据库客户端呢 2. 将客户端解压到没有中文目录的文件夹下. 3. 在plsql中指定orac ...
- 拒绝造轮子!如何移植并使用Linux内核的通用链表(附完整代码实现)
在实际的工作中,我们可能会经常使用链表结构来存储数据,特别是嵌入式开发,经常会使用linux内核最经典的双向链表 list_head.本篇文章详细介绍了Linux内核的通用链表是如何实现的,对于经常使 ...
- 面试 11-02.ES6
11-02.ES6 #Class和普通构造函数有何区别 我们经常会用ES6中的Class来代替JS中的构造函数做开发. Class 在语法上更加贴合面向对象的写法 Class 实现继承更加易读.易理解 ...