本文由CSDN-蚍蜉撼青松【主页:http://blog.csdn.net/howeverpf】原创,转载请注明出处!
首先特别感谢当年本科教授我网络技术的老师严斌宇@舒思,是他幽默风趣、形象生动的授课把我带入了瑰丽多彩的网络世界,让我有机会从事这个行业。严老师是我接触过的专业课老师中,教学做得最好的老师,没有之一!包括本文中要谈的这个问题,其实也是以前严老师上课的时候有分析过,所以在此特别感谢严老师!
另外,本文主要内容节选自我本人在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,就没问题了。原理解释如下:
(根据该楼主的描述,我们暂且理解为其网络环境中只有一台直连交换机,不存在路由器或其他的网络设备)
首先,对于一个使用标准的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。看到这,你肯定要大呼,这俩丫的网络号不是一样的么,那就是在同一个子网啊,为什么不通呢?别急着下结论,请耐心往下看~
其次,ping操作的实际内涵是什么?看下面的步骤:
(1)由本机构造一个ICMP请求包,发送给目的主机;
(2)目的主机处理后构造一个ICMP响应包,返回给本机;
(3)本机根据是否收到响应包,以及响应包的内容得到本次ping的结果,并交由显示器呈现给用户。
也就是说,一次成功的ping操作其实是一次完整的双向通信过程,并非只要本机能将请求发送出去就算好了的。数据包要能出得去,更要回得来。
最后还要说明的是一台主机要给另一台主机发送数据时的工作流程,以A向B发送数据为例,如下图:
图1-1 一台主机要给另一台主机发送数据时的工作流程
当PCA构造好ICMP请求包打算发送给PCB时,参照上面的流程图,其处理过程应当如下:
呈现给你的直观现象就是 PCA ping PCB 不通【我猜系统给出的响应应该是:目标主机不可达(中文系统)/Destination Host Unreachable(英文系统)】,原因在于数据包出不去。
当PCB构造好ICMP请求包打算发送给PCB时,参照上面的流程图,其处理过程应当如下:
PCA处理后构造完成ICMP响应包,打算回给PCB,其处理过程和前文PCA向PCB发送请求包一致,结果是PCA发送响应包失败。
呈现给你的直观现象就是 PCB ping PCA 不通【我猜系统给出的响应应该是:请求超时(中文系统)/Request timed out(英文系统)】,原因在于数据包回不来。
如果你不是有什么特殊需求的话,那么你应该为你同一子网内的所有主机配置相同的掩码。
详谈为何两台主机网络掩码不一致可能导致ping不通,布布扣,bubuko.com
原文:http://blog.csdn.net/howeverpf/article/details/19298017