https://www.codercto.com/a/29509.html
https://m.sohu.com/a/294792813_776701/?pvid=000115_3w_a
知乎解答:
http://www.zhihu.com/question/56294065
- 小猪 回答
我写点自己粗浅的理解吧。
掩码是给自己用的。 掩码和IP地址与运算得到网络地址。 比如(请自行脑补二进制的方式来理解):
IP地址:192.168.1.2
子网掩码:255.255.255.0
那它们与运算后得到的网络地址是:192.168.1.0
我的理解是网卡接受到一个数据包,到了第三层,取出数据包中的IP地址,与本机的掩码进行与运算得到网络地址,如果网络地址与本机的网络地址不一致则认为是不同子网,就丢弃那个数据包,如果一致则认为在同一个网络中,数据包合法,继续往上传(第四层) 。所以192.168.1.2/24和192.168.1.3/16在本机看来,对方都是跟自己在同一个网络中(貌似就是所谓的超网的概念),就像@缪伟宁 在答案中补充的例子一样。
另外我再补充四个例子(拓扑跟@缪伟宁 回答补充的例子一样)。
例子一:
主机A的IP地址:192.168.1.2/24,网关:空,运算得到的网络地址:192.168.1.0
主机B的IP地址:192.168.2.2/16,网关:空,运算得到的网络地址:192.168.0.0
此时主机A和主机B ping不通
分析:
主机A ping主机B的时候,目标地址:192.168.2.2 和本机掩码:255.255.255.0运算得到的网络地址:192.168.2.0,跟本机的网络地址:192.168.1.0 不一致,所以主机A认为目标地址和本机不在同一个网络中,所以数据包发到网关去,但是网关为空,die~
主机B ping主机A的时候,目标地址:192.168.1.2 和本机掩码:255.255.0.0运算得到的网络地址:192.168.0.0,跟本机的网络地址:192.168.0.0 一致,所以认为在同一个网络中。数据包发送出去之后主机A的网卡虽然收到了,但是在OSI第三层的时候,主机A用自己的掩码跟数据包的源地址与运算之后得到的网络地址是:192.168.2.0,显然跟本机的网络地址:192.168.1.0不一致,所以丢弃,die~
例子二:
主机A的IP地址:192.168.1.2/24,网关:192.168.2.2,运算得到的网络地址:192.168.1.0
主机B的IP地址:192.168.2.2/16,网关:空,运算得到的网络地址:192.168.0.0
此时主机A和主机B 能ping通
分析:主机A ping主机B的时候,目标地址:192.168.2.2 和本机掩码:255.255.255.0运算得到的网络地址:192.168.2.0,跟本机的网络地址:192.168.1.0 不一致,所以主机A认为目标地址和本机不在同一个网络中,所以数据包发到网关去,即:192.168.2.2 . 主机B收到了主机A发来的数据包,把主机A的IP地址跟本机的掩码计算得到的网络地址与本机的网络地址一致,OK,收下,并发送响应的ICMP包,所以ping通了。
主机B ping主机A的时候,目标地址:192.168.1.2 和本机掩码:255.255.0.0运算得到的网络地址:192.168.0.0,跟本机的网络地址:192.168.0.0 一致,所以认为在同一个网络中。数据包发送出去之后主机A看到是网关发来的数据包,所以义不容辞的收下并发送了响应的ICMP包,所以ping通了。
例子三:
主机A的IP地址:192.168.1.2/24,网关:空,运算得到的网络地址:192.168.1.0
主机B的IP地址:192.168.2.2/16,网关:192.168.1.2,运算得到的网络地址:192.168.0.0
此时主机A和主机B ping不通
分析:
主机A ping主机B,情况跟第一个例子一样,就不复制过来了。
主机B ping主机A,情况其实跟第一个例子也一样,走不走网关在单纯接交换机的情况下是差不多的,也是主机A网卡虽然收到了,但是丢弃了。
例子四:
主机A的IP地址:10.0.0.2/8,网关:空,运算得到的网络地址:10.0.0.0
主机B的IP地址:192.168.2.2/16,网关:10.0.0.2,运算得到的网络地址:192.168.0.0
此时主机A和主机B ping不通
分析:
主机A ping主机B,情况跟第一个例子一样,只是地址变了。不复制了。
主机B ping主机A,数据包走网关,发到主机A去,主机A收到了,但是根据数据包的IP地址和本机的掩码得出的网络地址是:192.0.0.0,跟自己的:10.0.0.0 不一样,丢弃,die~
以上例子均在思科模拟器上做过测试,如有错漏,欢迎指出。
-
缪伟宁回答
A将A的掩码和B的IP进行计算得出B的网络号,A拿自己的网络号和这个计算出来的网络号比较,一样的话,A就认为B在同一网段,否则就不是同一网段。
所以,A为什么要知道B的子网掩码?
====================================
补充来自评论区的一个例子:同一局域网内,192.168.1.2/24和192.168.1.3/16 之间是可以通讯的。