详谈为何两台主机网络掩码不一致可能导致ping不通

时间:2024-03-25 11:46:00

本文主要内容节选自我本人在CSDN论坛上的回复帖,原帖链接:http://bbs.csdn.net/topics/390511212

言归正传,论坛上曾经有人提问:

“在一个交换机下,PCA 的IP为 192.168.0.6  掩码 255.255.255.0    PCB的IP 为192.168.1.3 掩码为 255.255.0.0 。   

按我的理解,这两台电脑应该处于同一网段,但是互相却ping 不通,这个难以理解,难道我的理解有误?请各位高手指点。”

 该楼主的理解确实有点问题吧,一个可行的改法是把PCA的掩码改为 255.255.0.0,就没问题了。原理解释如下:
(根据该楼主的描述,我们暂且理解为其网络环境中只有一台直连交换机,不存在路由器或其他的网络设备)

一、需要补充的基础知识

1.1 网络掩码与网络号

       首先,对于一个使用标准的ABCDE分类编址方案的IP地址,其实可以看成: IP地址 = 网络号 + 主机号。其中网络号由本机IP地址与本机网络掩码做与运算获得,主机号由本机IP地址与本机网络掩码的反码做与运算获得。比如说楼主所举的例子中,对于PCA,网络号为 Net_IdA=192.168.0.0,主机号为 Host_IdA=0.0.0.6;对于PCB,网络号为 Net_IdB=192.168.0.0,主机号为 Host_IdB=0.0.1.3。看到这,你肯定要大呼,这俩丫的网络号不是一样的么,那就是在同一个子网啊,为什么不通呢?别急着下结论,请耐心往下看~

1.2 ping操作其实是一次完整的双向通信过程

       其次,ping操作的实际内涵是什么?看下面的步骤:

(1)由本机构造一个ICMP请求包,发送给目的主机;

(2)目的主机处理后构造一个ICMP响应包,返回给本机;

(3)本机根据是否收到响应包,以及响应包的内容得到本次ping的结果,并交由显示器呈现给用户。

       也就是说,一次成功的ping操作其实是一次完整的双向通信过程,并非只要本机能将请求发送出去就算好了的。数据包要能出得去,更要回得来。

1.3 数据发送的流程

       最后还要说明的是一台主机要给另一台主机发送数据时的工作流程,以A向B发送数据为例,如下图:

详谈为何两台主机网络掩码不一致可能导致ping不通

 图1-1 一台主机要给另一台主机发送数据时的工作流程

 

二、分析一下该楼主的实验过程

2.1 PCA ping PCB 

当PCA构造好ICMP请求包打算发送给PCB时,参照上面的流程图,其处理过程应当如下:

  1. PCA首先将PCB的IP地址192.168.1.3与自己的掩码255.255.255.0做与运算,得到它所认为的PCB的网络号:Net_IdB'=192.168.1.0【注意到 Net_IdB' 与 Net_IdB 并不一致】;
  2. 然后用这个 Net_IdB' 与自己的网络号 Net_IdA=192.168.0.0 作比较,发现不一样;
  3. PCA把构造好的ICMP请求包交付给网关,但网关不存在,于是请求发送失败。

       呈现给你的直观现象就是 PCA ping PCB 不通【我猜系统给出的响应应该是:目标主机不可达(中文系统)/Destination Host Unreachable(英文系统)】,原因在于请求出不去。

2.2 PCB ping PCA 

当PCB构造好ICMP请求包打算发送给PCB时,参照上面的流程图,其处理过程应当如下:

  1. PCB首先将PCA的IP地址192.168.0.6与自己的掩码255.255.0.0做与运算,得到它所认为的PCA的网络号:Net_IdA'=192.168.0.0【注意到 Net_IdA' 与 Net_IdA 是一致的】;
  2. 然后用这个 Net_IdA' 与自己的网络号 Net_IdB=192.168.0.0 作比较,发现一样;
  3. PCB把构造好的ICMP请求包直接交付给PCA 。

       PCA处理后构造完成ICMP响应包,打算回给PCB,其处理过程和前文PCA向PCB发送请求包一致,结果是PCA发送响应包失败。
       呈现给你的直观现象就是 PCB ping PCA 不通【我猜系统给出的响应应该是:请求超时(中文系统)/Request timed out(英文系统)】,原因在于响应回不来。

三、配置的时候应该注意什么


       如果你不是有什么特殊需求的话,那么你应该为你同一子网内的所有主机配置相同的掩码。


原文链接:http://blog.csdn.net/howeverpf/article/details/19298017