您当前的位置:首页 > 计算机 > 网络通信

子网划分-详解为何两台主机网络掩码不一致却能ping通

时间:02-12来源:作者:点击数:

网络地址不同,没有网关,为什么直接能ping通?

 

看到网上有人问网络地址不同的两台pc,没配置网关,为啥能ping通?

Pc1的ip192.168.12.1/255.255.248.0,pc2的ip192.168.14.1/255.255.252.0,彼此网络地址不同,而且没有设置网关,直连能ping通,问为什么?

如上图,pc1去pingpc2,能够ping通。而且ttl为128没有减少,说明是直连路由通的。

同样pc2去ping pc1同样能ping通,而且ttl同样128,是直连路由。

为什么网络地址不同但能够ping通?

首先我们必须明确,ip地址是用来标记一个硬件主机的,它用32位二进制表示,为了方便记忆,我们把32位分成四段,每段8位,为了记忆方便,我们用四个十进制数字加点来记忆。如192.168.10.25。

ip地址用来寻址硬件设备,寻址就需要分拣,就像邮局处理邮件,每个邮局有个邮政编码,代表整个国家的邮局的唯一编号。其实就是把整个国家划分为了若干服务单位,每个邮局单位,管理一定区域的社区和单位。

邮局处理辖区向外发送的信件,和上级局转发给本辖区的邮件。处理方式都是一样,有个算法,本地辖区的留下投送,非本地送到上级局处理。目的地址不明确的,退回。

ip地址分拣就得给分拣的算法,给ip指明送到哪里去处理。ip地址有2^32种可能性,分拣的算法不可能把这么多ip列举处理,这样就需要一个把某一类ip和硬件设备对应起来,如ip地址前两段是222.90的分配给西安电信的pppoe服务器设备,222.100分配给西安联通的pppoe服务器,这两个地址最大有2^(32-16)个ip地址。这前16位就是一个ip地址集合,它和一个某一个运营商的一套设备对应。这样节点的分拣算法就大幅减小,前两段有数字,后面两段是集合里的设备ip,用网络位和掩码来表示,网络位用连续的二进制1表示,设备为主机位,用连续的0表示。若222.90.0.0/16。

通信有网络,类似邮局的网络,有面向投递的基层邮局,处理上级投送过来的信件落地,有收本地发出邮件。有汇聚局,不面向具体客户,面向的基层邮局和上级市,省中心局。省中心局间有直接或者间接的中转业务。如陕西到周边省份有直接邮车发送,陕西到东北可能就发到北京,由北京中转发出。各地省公司再细化到市县,市县到乡镇。一封信发出就是先判断是否是本地落地,不是送到上级局去。是本地处理。上级判断是否本级下属,是送去下属,不是再送到外地。到目的地后再具体细化,最后找到具体收件人。

如何判断是直连路由本地处理,就像打电话,一个8625518的号码,属于一个交换机局,交换局有86250000-86259999下所有的号码,当一个86255118拨打86255100时,号码分析就是截取被叫的前四位,和8625这几个数字比较,相同就是本地号码,就在本地处理。截取的位数,就相当于掩码,就是网络地址,一个电话局,有本地号码打出,也有外地号码打入,判断方法是一样的,是本地的就落地处理。

ip通信同样,要发一个数据包,首先判断是否本地能出来,就是按直连路由表判断是否本地网段?不是送到网关去,即走默认路由。收到一个包,首先要判断是否是自身ip是否要做落地处理,不是自己的是否查询出口剩余路由,是否要转出?

所以,设备收到包,首先判断是否是直连路由,是要本地落地处理的,非直连路由就要送出到外部处理。

首先,要明白ping的过程,要根据目的ip地址确定是走直连路由还是其他(默认路由,网关的设置ip),就是要判断是否是同一网段(网络号是否相同)?是的话,查看mac地址缓存里是否有对应ip的mac地址,有的话,直接发包。没有的话,要发出arp请求来获取mac地址,得到响应后,组包发出。若不是直连路由,就检查是否网关配置,有的话,同样检查网关ip是否在同一网段,在,重复检查mac地址缓存表是否有网关的mac地址,有的话,直接组包,没有的话,发出arp请求,请求成功后,组包发出。没有网关设置,直接回显失败,没有获得对方mac地址,或者网关mac地址,回显失败。

对ping的响应,也是同样的过程,根据收到ping的request消息里的ip进行判断路由,进行和上面同样的过程。

其次,是否直连路由的判断是用pc自己的子网掩码去和目的ip相与,和自身网络地址相同,就是同一网段,不同就不是。

再者,掩码要借用主机位或者网络位,判断子网时要确定掩码在ip地址所在段,一个ip地址的网络号是ip地址和掩码相与得出的,掩码所在的那一段中的主机位若为m,代表主机的取值是2^m个,从0到2^m-1,主机位为全0是网络地址,主机位全1是广播地址。子网的个数是2^(8-m)个,取值从0到2^(8-m)-1,每一个值加上主机位为0的值就是网络地址的所在段值。这些子网都有各自的网络地址,每个子网可用的ip范围就是主机位非全0或者全1的ip,共2^m*后面几段的最多值-2个可用地址。

所以,划分子网就是要先确定子网地址在那一段变化,就是ip地址四段中,那一段既有网络地址位,还有主机位。该段的网络地址的可能值,就是网络地址变化。

然后确定主机位的可能性。

可用的ip地址范围是开始是网络地址+1,结束是广播地址-1。

子网划分就是先确定在ip地址的四段里,那一段包括既包括网络地址位和还有主机地址位,要把256个分成均等的几块,每块大小多少?

形象的比方就找出256张麻将牌,标上0到255,按从小到大排成一列,要把这一段分成几份,就是网络位m,分成2^m份,每份大小就是2^(8-m),每份的开头数字和结束数字就是对应网络地址和广播地址的第几段。如确定第二段既有网络位还有主机位,这个数字就是ip地址的第二段的网络地址,或广播地址。在第三段就是网络,广播地址第三段,第四段同样。子网地址就在那一段变化。

如192.168.205.201/19这个ip地址,掩码是255.255.224.0,我们以这个为例说明:

192.168.205.201 后两段用二进制来表示

192.168.1100 1101.1100 1001

255.255.1110 0000.0000 0000

192.168.1100 0000.0000 0000 网络地址是192.168.192.0

掩码是19,大于16小于24,所以ip第三段既有网络位还有主机位,就是第三段用了3位作为网络位,所以第三段第四段的网络位和主机位有下面的取值,最小值和最多值见下图:

第三段bin 第四段bin ip地址dec 第三段bin 第四段bin ip地址dec

00000000 0000 0000 192.168.0.0 00011111 1111 1111 192.168.31.255

00100000 0000 0000 192.168.32.0 00111111 1111 1111 192.168.63.255

01000000 0000 0000 192.168.64.0 01011111 1111 1111 192.168.95.255

01100000 0000 0000 192.168.96.0 01111111 1111 1111 192.168.127.255

10000000 0000 0000 192.168.128.0 10011111 1111 1111 192.168.159.255

10100000 0000 0000 192.168.160.0 10111111 1111 1111 192.168.191.255

11000000 0000 0000 192.168.192.0 110 11111 1111 1111192.168.223.255

11100000 0000 0000 192.168.224.0 11111111 1111 1111192.168.255.255

ip地址第三段网络位有3位, 第四段全是主机地址,所以子网数有2^3=8.

所以,掩码为19位的ip地址,有第三列的ip的最小值为子网号,第六列ip地址最大值作为广播地址。子网号的个数是2^3=8,可用主机数的为第三段主机位数5的平方乘以第四段的256,即2^5*256-2=2046个可用ip地址。192.168.205.201是在子网号192.168.192.0这个子网下。

Ping的过程分析:

pc1的ip 192.168.12.1/255.255.248.0,248就是二进制1111 1000就是掩码21位,这样的子网号就是192.168.8.0,ip有效范围就是192.168.8.1~192.168.15.254。

Pc2的ip是192.168.14.1/255.255.252.0,252就是二进制1111 1100就是掩码22位,这样子网号是192.168.12.0,ip的有效访问就是192.168.12.1~192.168.15.254。

ping命令执行时,要查路由表,直连路由优先,所以首先判断目的ip是否是和本身ip在同一网络地址下,用自身的子网掩码和目的ip去做与运算,判断结果是否与自身网络地址相同,192.168.14.1&&255.255.248.0=192.168.8.0,所以认为是同一网段,直接发出arp请求,pc2会响应目的ip是它自己的arp请求,同时记录pc1的mac地址和ip的对应关系。pc1会得到pc2的mac地址,ping的request消息会发出,pc2收到后,同样去查自身路由表,直连路由优先级高,会判断收到request消息请求的源ip和自身ip是否在同一网段, 192.168.14.1&&255.255.252.0=192.168.12.0,和自身网络地址相同,所以发出ping的应答reply消息,会回pc7的ping的request请求,mac地址缓存表里已经有pc1的mac,所以直接发包,而且ttl不会减1。

Pc2去ping pc1的过程正好和上面的相反,pc2去查自己的路由表,直连路由优先,发现pc1的ip和自己在同一网段192.168.12.0子网,就会发出arp查询,请求pc1 192.168.12.1的mac地址,得到后直接组包发出,pc1收到pc2的ping的request消息,查询路由表,发现同一网段,在192.168.8.0/21这个子网中,会响应ping的请求,发出reply消息。

结论:

之所以能ping通是因为两个子网的合法ip有交叉,彼此都在自己的子网中。判断是否在同一网段要根据自己的掩码与目的ip来与来计算,子网号就是一个网络地,每个网络地址下有对应的一个合法的ip段,在这个ip段的都是同一网段。不用发送到网关。

arp的查询的发出,一般是直连路由的目的ip才会发出arp查询消息,目的ip要么是同网段,要么是同网段的网关ip。回arp请求消息,一般只检查是否是本端口配置的有的ip地址,有的话,就回arp响应,告知自己的mac地址。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门