c++检测ip是否匹配子网掩码_网络工程师从入门到精通通俗易懂系列 | ARP和IP这篇文章讲的相当详细了,这么基础的知识往往也是最容易遗忘的!...

e8f6b9102935c9b59f61c383b7e51842.png

网络层

负责将报文从源送到目的

包括TCP建立连接,也需要依靠网络层,来将这个连接请求,传递到对方。

为设备提供逻辑地址,也就是IP地址

主流是IPV4地址

IPV4地址,为32位二进制数,长度4个字节,1字节等于8比特(位)

ICMP

主要用于检测网络的连通性

也是面向连接

对方收到我的请求后,需要发送回复

ping 114.114.114.114

Tracert

主要用于检测,或者说跟踪,源到目的站点所经过的路径

使用IP头部中的TTL字段

TTL字段,每经过一台三层设备,减1

windows 10 发出的TTL为 64

tracert 114.114.114.114

原理

基于UDP 或者 ICMP

首先发送一个TTL为1的UDP探测报文,源IP是本地,目的IP比如是114.114.114.114

当第一个三层设备收到后,查找去往目的站点的路由,

但此时,TTL已经为0超时了,所以它会回应超时报文,

这个时候,它的IP地址会显示出来

依次类推,直到去到目的站点

ARP

使用IP去解析该IP对应的MAC

比如ping 192.168.1.2

假设现在电脑没有192.168.1.2的ARP表项,此时就完成不了二层封装

为什么,因为二层头部是源MAC,目的MAC

这时候就需要发送ARP报文去询问192.168.1.2的MAC地址

当192.168.1.2收到这个询问,首先会记录询问者的IP+MAC对应关系

生成ARP表项,然后回复自身的MAC给询问者。

代理ARP

主要解决目标IP不在同一个网段的情况下,回复本接口MAC,进行数据转发

192.168.1.2------------1.1 Route 2.1-------------2.2

首先1.2没有配置网关地址,也没有配置路由,并没有2.2的ARP表项

这个时候1.2发送ARP请求,当Route收到ARP报文后,发现目的MAC

是广播地址,继续往拆三层,

发现目的IP不是自己,但是由于接口开了代理ARP,这个时候,首先它会去查

路由表,发现去往2.2这个地址,有路由条目,并且是直连。于是将1.1这个接口

的MAC告诉给1.2

反向ARP

依靠MAC地址来获取IP

允许局域网的设备从网关服务器上的ARP表项或缓存来请求IP地址

有点类似与DHCP,但与DHCP有一些差别

RARP是封装以太网帧中,DHCP报文封装在UDP协议中

但大体上的过程差不多,

IP地址 逻辑地址

用来确定一个网络中一个节点,或者一个设备

两台主机通信,必须要有IP地址

32位二进制数

为了便于记忆,转换成10进制数,如

192.168.1.1

并且用点号分割

也称为点分十进制数

进制转换

二进制转10进制

10进制转二进制

第一种:余数定理

用168来除以2,等于为84,那么84显然可以被2整除,所以余数为0

再除以2,等于42,也可以整除,余数为0

在除以2,等于21,不可以被整除,那余数为1,21-1=20吧

那就20除以2,等于10,可以被整除,余数为0

再除以2,等于5,不能被整除,余数为1,5-1等于4

那就4除以2,等于2,可以被整除,余数为0

那么最后2除以2,等于1,

注意,写的时候要反过来写,是10101000

第二种就是冥跟位的对应关系:

de051a21667fed67c4b936afa097ef64.png

首先,你要明白2的次方是多少,这很重要

其实,就是二进制中的位,加上他所对应的冥

从左往右,分别是 128 64 32 16 8 4 2 1 ,这都是固定不变的

比如刚刚的168

而进制数是:10101000

那么,换成 十进制数就是 128+32+8

IP地址总共分为5个类别,

首先IP地址,它是由4个八位组构成,也就是每一组,由8位2进制数构成,那4组那就是32位

换算成10进制数,最小的可能性是0.0.0.0,最大的是255.255.255.255

A类的左起第1位必须是0,其他随意变换,范围是1-126

也就是说,最大跟最小的可能性,0.0.0.0-127.255.255.255

但是,0是保留的不能用,而127这段作为我们的环回地址,也就是测试地址。

子网掩码

用于确定IP地址的网络位,跟主机位

IP地址+子网掩码,必须同时出现

默认A类:255.0.0.0

默认B类:255.255.0.0

默认C类:255.255.255.0

255.0.0.0 简便表示 /8

255.255.0.0 简便表示 /16

255.255.255.0 简便表示 /24

例如:

192.168.1.0/24

表示他的掩码是255.255.255.0

习惯就好!!

192.168.1.0/24

网络部分:192.168.1

主机部分:.0

公有地址

全球地址,互联网可路由,合法地址

私有地址

本地使用,例如家用路由 192.168.1.0/24

你家也用,别人家也可以用

但是这种地址,不能出现在公网,因为公网没有路由

出去必须换马甲,例如NAT技术

子网掩码

对应网络部分的,必须为1

对应主机部分的,必须为0

1表示完全匹配,0表示任意

例如:

200.1.1.0

255.255.255.0

我们仅仅只看默认掩码

因为这是个C类地址

那么网络部分是:200.1.1.

主机部分是:0

255,把他换算成二进制数

255=128+64+32+16+8+4+4+2+1

实际上就是11111111

是不是网络部分全为1,而主机部分全为0

地址类型

网络地址:主机地址为0,即最小保留地址

主机地址:可用的主机IP地址

广播地址:主机地址为1,即最大保留地址

例如:

100.1.1.0

255.255.255.0

首先:这个掩码所能确定的主机IP地址为0-255

那么

网络地址就是: 100.1.1.0(0),即最小保留地址

主机地址则是:100.1.1.(1-254),可以分配给主机的可用IP地址

广播地址则是:100.1.1.255 (255)即最大保留地址

划分子网

提供灵活的编址,优化网络

减少网络流量。路由器增加广播域,广播域越多,每个广播域就越小,而每个网段的网络流量也越少。

优化网络性能 。

简化管理,找出并隔离网络问题更容易。

将多个小网络连接起来可提高系统的效率

VLSM

将一个大的网络,分成小的子网

当IP地址进行子网划分后,被分成三个部分,网络位,子网位,主机位

72c07ad55e14c3843f7fd16102abc929.png

例如

222.1.1.0

255.255.255.0

这是一个C类子网的默认掩码

但经过VLSM划分之后,可能会是这样

222.1.1.0

255.255.255.128

这里会涉及到一个借位的概念

而这个借位,实际上就是把网络位扩大,主机位缩小

例如222.1.1.0/24

地址:11011110.00000001.00000001.00000000

子网掩码:11111111.11111111.11111111.00000000

而222.1.1.0/27

地址:11011110.00000001.00000001 xxx00000

子网掩码:11111111.11111111.11111111 11100000

向主机位借了三位,借的三位,叫子网位

与子网掩码的对应关系

借位:0 1 2 3 4 5 6 7 8

掩码:0 128 192 224 240 248 252 254 255

当一个网络地址经过VLSM划分之后,就没有固定的类别了

也就是说不属于ABC类,它叫做无类。

子网数:2^N次方,N为借用的位数(子网位)

主机数:2*M-2,M为主机部分剩下的位数(主机位),减去2,因为网络地址跟广播地址不能用

222.1.1.0/24 255.255.255.0

子网位: =0

多少个子网:=2^0=1,为什么,因为没有借位

主机位:=8,因为还剩下8位

每个子网主机:=2^8=256,为什么,因为最后一个八位组全为0

子网可用IP数:2^8=256-2,减去2,因为网络地址跟广播地址不能用

实际上就是

网络地址: 0

最小主机地址: 1

最大主机地址: 254

广播地址: 255

222.1.1.0/27 255.255.255.224

子网位: =3

多少个子网:=2^3=8

主机位:=5

每个子网主机:=2^5=32

子网可用IP数:2^5=32-2,减去2,因为网络地址跟广播地址不能用

实际上就是

网络地址: 0 32 64 96 128 160 192 224

最小主机地址: 1 33

最大主机地址 : 30 62

广播地址: 31 63

其他依次类推

10.1.1.0 255.255.255.192

子网位: =18

多少个子网:=2^18=自己算

主机位:=6

每个子网主机:=2^6=64

子网可用IP数:2^6=64-2,减去2,因为网络地址跟广播地址不能用

172.16.1.0 255.255.255.240

子网位: =12

多少个子网:=2^12=.........

主机位:=4

每个子网主机:=2^4=16

子网可用IP数:2^4=16-2,减去2,因为网络地址跟广播地址不能用

172.16.1.0 255.255.192.0

子网位: =2

多少个子网:=2^2=4

主机位:=14

每个子网主机:=2^14=.............

子网可用IP数:自己算,减去2,因为网络地址跟广播地址不能用

实际上就是

网络地址: 172.16.0.0 172.16.64.0 ........................................

最小主机地址: 0.1 64.1

最大主机地址 : 63.254 127.254

广播地址: 63.255 127.255

简便算法1

192.168.1.0

255.255.255.192 26位

多少个子网:=当前掩码26-默认掩码24=2 2^2=4

每个子网主机:=最大掩码32-当前掩码26=6 2^6=64

子网可用IP数:64-2

简便算法2

192.168.1.0

255.255.255.224 27位

多少个子网:=当前掩码27-默认掩码24=3 2^3=8

每个子网主机:=256-224=32

为什么是256,因为0-255是256个数

子网可用IP数:32-2

什么是有效子网:

192.168.1.0

255.255.255.192 26位

子网位: =2

多少个子网:=2^2=4,(有效子网要减去2)

主机位:=6

每个子网主机:=2^6=64

子网可用IP数:2^6=64-2,减去2,因为网络地址跟广播地址不能用

子网 , 有效的主机 , 广播地址 

192.168.1.0 , 192.168.1.1 到 192.168.1.62 , 192.168.1.63

192.168.1.64 , 192.168.1.65 到 192.168.1.126 , 192.168.1.127

192.168.1.128 , 192.168.1.129 到 192.168.1.190 , 192.168.1.191

192.168.1.192 , 192.168.1.193 到 192.168.1.254 , 192.168.1.255

其中192.168.1.0这个子网,实际上是192.168.1.0/24的主类网络号

而 192.168.1.255,实际上是192.168.1.0/24的主类网络的广播地址

所以,有效子网要减去第一个子网跟最后一个子网,也称为全0子网和全1子网,

在一些老的设备上是不支持的,所以不能用,当然,现在的设备都不存在这个问题,都能用

只是这个概念,大家一定要搞清楚

CIDR汇总

VLSM是把主机位变成网络位,把线往右边移,将大的网络划分成小的子网

CIRD是把网络位变成主机位,把线往左移,把小的子网汇总成一个大的前缀,

例如

192.168.16.0/24

192.168.17.0/24

192.168.18.0/24

192.168.19.0/24

这是四个子网

1、静态路由配置繁琐

2、在路由器路由表中,是4个不同的路由条目,而路由表是加载在路由器内存当中

如果经过汇总

则是 192.168.16.0 255.255.252.0 这是22位

用一个大的前缀,包含多条路由条目

快速算法

256-4=252,为什么是4,因为四个子网

在两个8位组不变的情况下,255.255.252.0

1e75002903985807b00dd903243315b0.png

努力学习,勤奋工作,让青春更加光彩

54f4b99a9a6f8f21e4f6d92ec7c7642d.png

再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(1357) :模板配置

const template require(art-template); //绝对路径 模板中显示的数据 const path require(path); const views path.join(__dirname, 07.art); const dateFormat require(dateFormat) template.defaults.imports.dateFormat dateFormat; const html template(views, {ti…

使用Office Word 2010/2013 发布文章到博客园

使用Office Word 2010/2013 发布文章到博客园 ☆:参考http://www.cnblogs.com/liuxianan/archive/2013/04/13/3018732.html; 软件准备:Office Word2010/2013 初次使用,必要的配置: Office Word2010:代开wor…

前端学习(1355) 子模板

const template require(art-template); //绝对路径 模板中显示的数据 const path require(path); const views path.join(__dirname, 04.art); const html template(views, {msg: 我是首页,name: geyao,age: 20 }); console.log(html); 04.art {{include./index.art}} {…

前端学习(1358) :渲染模板默认

const template require(art-template); //绝对路径 模板中显示的数据 const path require(path);const dateFormat require(dateFormat) template.defaults.imports.dateFormat dateFormat; template.defaults.root path.join(__dirname); template.defaults.extname .a…

UML九种图 之 包图和对象图

前言 对象图和包图依然是对系统的静态的描写叙述。UML九种图加上包图,事实上是十幅图。 包图 1.构成 2.包中的元素 类、接口、用例、构件、其他包等。(若包被撤销,当中的元素被撤销) 3.包之间的关系 泛化、细化、依赖(…

前端学习(1359) :学生档案信息管理1

\ service.js //引入http模块 const http require(http); //创建网站服务器 const app http.createServer(); // require(./connect.js) const Student require(./user.js) app.on(request, (req, res) > {res.end(ok); }); app.listen(3000); console.log(服务器启动成…

刚学unity3d,跟着仿作了flappy bird,记下一些琐碎的心得!

1、关于场景,即scene。 一个正常的游戏至少要有三个场景,即菜单(或者文件夹)场景、游戏关卡场景、游戏结束场景。它们一般统一放在project文件夹下scene文件夹(自己创建)中,方便管理。1.1场景切…

不学好css模型的怎么入山门?师傅与徒弟的真实独白

目录 前言 开篇 定义 ie盒 标准盒 真实占有宽度 结局 前言 很久很久以前,在一个小山庄里面住着一位少年。这位少年出生之时天有异向,七星连珠,乃神人也。三岁那年他跟着师傅上山学艺,面临这人生的第一道关卡。这位少年我们…

看完这篇还不知道css固定和自适应可以小和尚要摆地摊了

目录 前言 开篇 左右侧采用浮动 中间采用margin-left 和 margin-right 方法。 中篇 利用绝对定位中间同样采用margin-left margin-right方法 续篇 负的margin 终篇 三列布局中间固定,其他两列自适应 前言 接上一篇的小徒弟继续说吧 上一篇小徒弟进入山门…

classpass 配置mysql_jmeter压测学习18-JDBC配置连接mysql数据库

前言使用jmeter压测接口的时候,有时候需要批量造数据,需使用jmeter连数据库造对应的测试数据。或者测试结束后,对测试的数据还原,删掉一些垃圾数据,都会用到连接数据库执行sql的操作。JDBC 连接配置添加配置元件-JDBC …

为了梦想开始历练之清除浮动篇

目录 前言 开篇 中篇 原因 解决方式 1额外标签得方法 2触发BFC overflow 3伪元素 4双伪元素 结尾 前言 师傅(路人甲)小徒弟(路人乙),自从路人乙昨晚没有被叫去摆地摊之后。早上一起床 路人甲:徒儿,昨晚休…

这篇看完我得理解ES6中中常见语法

目录 前言 1let篇 1.1作用域 1.2变量提升 1.3相同作用域赋值 2const篇 3模板字符串篇 3.1传统 3.2模板字符串复制 4扩展运算符篇 4.1传统赋值 4.2扩展字符串复制 前言 ES6是前端面试中常考查得知识点&#xff0c;还请大家不断得去琢磨琢磨 let篇 <!DOCTYPE h…

django本地安装mysql_django使用mysql(本地环境下)_MySQL

事例使用的django版本是1.4.0(最近在使用sae&#xff0c;没办法&#xff0c;只好从1.7.1撤了回来)。不过原理大概都是相仿的吧。django支持多种数据库管理工具&#xff0c;如mysql, postgresql, sqlite, 和oracle。其中sqlite是内置在python中的&#xff0c;所以如果使用sqlite…

前端学习(1360) :学生档案信息管理2

service.js //引入http模块 const http require(http); //创建网站服务器 const app http.createServer(); //引入路由 const getRouter require(router);const router getRouter();router.get(/test, (req, res) > {res.end(test) }) router.get(/index, (req, res) &…

mac 上mysql_connect_Warning: mysql_connect(): No such file or directory 解决方案总结(操作系统: Mac)...

说明:1. 运行环境: Mac OS X 10.11.4 (Mac 已经自带 Apache, PHP)2. 相关文件夹:/etc/apache2/ ##Apache 配置文件夹/Library/WebServer/Documents/ ##Apache 默认站点/usr/local/mysql-5.7.11-osx10.9-x86_64 ##mysql安装路径/private/php.ini.default ##php…

Android - 基于Toolbar的Navigation Drawer(Material Design)

Material Design已经推出许久&#xff0c;有许多app都已经跟进了&#xff0c;这里也介绍下基于Toolbar的Navigation Drawer是如何实现的。 样式&#xff1a;实现过程&#xff1a;1. 在 activity_asdemo.xml 中加入 DrawerLayout  <android.support.v4.widget.DrawerLayout …

前端学习(1361):学生档案信息管理3

service.js //引入http模块 const http require(http); //创建网站服务器 const app http.createServer(); //引入路由 const getRouter require(router);const router getRouter();const template require(art-template);const path require(path);const serveStatic …

前端学习(1362):学生档案信息管理4

service.js //引入http模块 const http require(http); //创建网站服务器 const app http.createServer(); //引入路由 const getRouter require(router); const router getRouter(); const template require(art-template); const path require(path); const serveStat…

SharePoint 2013 图文开发系列之WebPart

SharePoint 2013 图文开发系列之WebPart 原文:SharePoint 2013 图文开发系列之WebPart这是我们介绍SharePoint开发入门的第一篇&#xff0c;在这一篇里&#xff0c;我们会介绍SharePoint开发的几个关键物理路径&#xff0c;一些开发技巧和最基础的WebPart开发。 开发工具 在Sha…

前端学习(1363):学生档案信息管理5

service.js //引入http模块 const http require(http); //创建网站服务器 const app http.createServer(); //引入路由 const getRouter require(router); const router getRouter(); const template require(art-template); const path require(path); const serveStat…