admin管理员组

文章数量:1516870

这两天做实验发现这个问题:

192.168.1.1/24(网络号:192.168.1.0)和192.168.1.2/23(网络号:192.168.0.0)这两个ip网络号不同,但是能相互ping通;同样的,192.168.1.2/23和192.168.0.1/24网络号相同,反倒不通。原因到底是什么?

Q1: 192.168.1.1/24(网络号:192.168.1.0)和192.168.1.2/23(网络号:192.168.0.0)这两个ip网络号不同,但是能相互ping通?

唯心主义错误,总是“ 我以为。。 。”,要学会“ 计算机以为。。。

计算机 192.168.1.1 Ping 192.168.1.2 时。

在计算机 192.168.1.1 的眼里,首先判断被Ping的主机 192.168.1.2 是否和自己在相同的网段。

如果yes,只要ARP广播获取 192.168.1.2 的MAC地址,就可以通信了。

如果no,看看是否有gateway?

如果有,ARP广播获取 gateway 的MAC地址,将Ping包发给gateway,然后gateway再发给 192.168.1.1

如果没有gateway,意味着没有0.0.0.0/0这条神奇的路由,丢包,就Ping不通了。

这种问题写了不下10次以上了,总以为很简单,直到今天看了知乎热榜问题“

钱学森说「人就算再笨还能学不会微积分吗」,难道智力正常的人都能学会微积分吗?

有初等数学基础,微积分很好学,也能学会。可是如果 0.12 0.9 谁大谁小都能搞错,微积分还是不要学了,因为小学数学都没有学会。

希望这是最后一次写类似的答案,学会用计算机的视角学计算机。

如何判断被Ping的主机 192.168.1.2 和自己( 192.168.1.1 ) 是否在相同的网段呢?

很简单,用自己的 192.168.1.1 对应的网络掩码,是多少?

24

这个24其实代表的是24个2进制的1,写成:

11111111.11111111.11111111

在它右侧用8个二进制0补足,成32位。

11111111.11111111.11111111.00000000

将自己的IP = 192.168.1.1 ,也转换成二进制。

IP = 192.168.1.1 = 11000000.10101000.00000001.00000001

计算自己的Network ID :

将IP、掩码一一对齐,按bit位 操作,1 1 =1, 1 0 =0 , 0 0=0。

将计算得到的值放入 Network ID 对应的位。

IP =192.168.1.1

11000000.10101000.00000001.00000001

掩码= 255.255.255 =/24

11111111.11111111.11111111.00000000

Network ID

11000000.10101000.00000001.00000000

计算对方的Network ID :

IP =192.168.1.2

11000000.10101000.00000001.00000010

掩码= 255.255.255 =/24

11111111.11111111.11111111.00000000

Network ID

11000000.10101000.00000001.00000000

很显然2个 Network ID 完全相同,都是:

Network ID = 11000000.10101000.00000001.00000000 = 192.168.1.0

以上计算都是基于计算机192.168.1.1的视角!

以上计算都是基于计算机192.168.1.1的视角!

以上计算都是基于计算机192.168.1.1的视角!

重要的事情说三遍!

从192.168.1.1的视角看来,只知道自己的掩码=24,管你192.168.1.2/23掩码是23、24、32、或者随便什么,都不重要,因为压根不会用,也不知道。只用自己的掩码24来计算!

问题主一个问题,你知道要访问的8.8.8.8这个IP地址的掩码是多少吗?

你无法知道,管它是32、31、8,都不影响你访问它。因为你只用本地IP地址的掩码来判断8.8.8.8是否和自己一个网段。如果一个网段,直接通信。如果不是一个网段,使用gateway中继通信,就这么简单。

你不能让计算机192.168.1.1 用对方的192.168.1.2/ 23 的掩码 23 , 来计算192.168.1.2的 Network ID 这是错误的源头! 这是你的视角!!!却不是计算机192.168.1.1的视角!

Q2:同样的,192.168.1.2/23和192.168.0.1/24网络号相同,反倒不通。原因到底是什么?

如果题主看懂第一个答案,这个问题就变成多余的了。

计算机的192.168.0.1视角:

自己的 Network ID = 192.168.0.0

对方的 Network ID = 192.168.1.0

很显然,2个Network ID不相同,需要 gateway 才能通信。

没有配置 gateway ,就无法通信,丢包,就是题主所谓的Ping不通。

作者|车小胖谈网络|公众号

本文标签: 计算机的视角网络号