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

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

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

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

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

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

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

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

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

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

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

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

其次,是否直连路由的判断是用pc自己的子网掩码去和目的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个可用地址。

如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就是第三段用了3位作为网络位,所以第三段第四段的网络位和主机位有下面的取值,最小值和最多值见下图:

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

000   00000   0000 0000  192.168.0.0    000  11111   1111  1111  192.168.31.255

001   00000   0000 0000  192.168.32.0   001  11111   1111  1111  192.168.63.255

010   00000   0000 0000  192.168.64.0   010  11111   1111  1111  192.168.95.255

011   00000   0000 0000  192.168.96.0   011  11111   1111  1111  192.168.127.255

100   00000   0000 0000  192.168.128.0  100  11111   1111  1111  192.168.159.255

101   00000   0000 0000  192.168.160.0  101  11111   1111  1111  192.168.191.255

110   00000   0000 0000  192.168.192.0  110  11111   1111  1111  192.168.223.255

111   00000   0000 0000  192.168.224.0  111  11111   1111  1111  192.168.255.255

所以,掩码为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段的都是同一网段。不用发送到网关。