主机间的通讯分为,相同网段间的通讯和不同网段间的通讯。如何识别?首先有A和B两台主机。A主机:192.168.1.1 255.0.0.0 B主机:192.168.2.1 255.255.0.0 。
相同网段间通讯指:
1、本机IP地址与本机子网掩码进行与运算,得出网络号。
2、目标IP地址与本机子网掩码进行与运算得出网络号。
3、观察两个网络号是否相同。
4、对方主机同样进行1~3的计算
5、若双方都认为属于相同网段,则双方能通讯。
例如:192.168.1.1与255.0.0.0 得出网络号:192.0.0.0 ;192.168.2.1与255.0.0.0得出192.0.0.0;对于A主机来说,两个主机是相同网络间的通讯。

再来观察:B主机与自己的子网掩码与运算:192.168.2.1与255.255.0.0得出192.168.0.0;A主机的IP与B主机的子网掩码:192.168.1.1与255.255.0.0得出网络192.168.0.0;所以对于B主机来说两个主机也是属于相同网络间的通讯。

留意观察:A主机认为它们的网络是192.0.0.0,而B主机则认为它们的网络是192.168.0.0 这都算相同网络?没错,机器的思维就是这样。因为ARP数据报没有携带子网掩码的信息,只有源目IP地址。所以机器只能以对方的IP来和自己的子网掩码来与运算得出是否相同网络间通讯。
又因为通讯是双向的,所以两台主机都必须“各自”认为它们属于相同网段,那么数据才能往返。倘若把B主机的子网掩码改为255.255.255.0;那么B主机就认为自己的网段是192.168.2.0 而A主机的网段是192.168.1.0 ;那么B主机就认为两主机不属于相同网段。这种情况下就必须配置路由器或者网关了。

注意:之前帖子出现的问题在这里进行解释!!!!(本人水平有限,之前分析不到位,请见谅,在此感谢huqiliu发现了问题)

两主机互联的情况大致可以分为3种(之前我只说到了“相同网段”和“不同网段”);
仔细分析下有以下三种:
1、两边主机都认为相同网段间通讯
2、两边主机都认为不同网段间通讯
3、一边主机认为相同网段间通讯,而另一边认为不同网段间通讯。(新增加)

对于情况1:两台主机可以通讯是没有问题的了。

对于情况2:两台主机之间就必须要有路由器,路由器有两种用法,一是进行通常情况的网关作用,二是路由器配置成代理ARP服务器。

对于情况3:认为不同网段间通讯的主机必须设置对方的IP地址为网关,并且只有认为不同网段间通讯的一方PING另一边才能PING通!这是什么意思呢?例如A主机:192.168.1.1 255.0.0.0 B主机:192.168.2.1 255.255.255.0 。这时候A主机认为双方网络都是192.0.0.0网,B主机认为A是192.168.1.0网,B是192.168.2.0网。那么此时B就必须设置网关为192.168.1.1 然后B去PING A就能PING通。如果A先去PING B就PING不通。(PING前请先用 arp -d命令清楚ARP缓存,之前我就是忽略了这一步)。

原理:IP选路时,优先匹配主机IP地址,然后匹配网络号地址,最后才用默认路由转发。


此处转帖,表述更清晰 两主机互通信的原贴 http://blog.csdn.net/lichengiggs/article/details/669444



最后最后,大家要用机器的角度来思考问题。机器获取信息只能依靠数据,例如主机不能获取到对方的子网掩码,所以对于主机来说,它并不能获取到192.168.0.0和192.0.0.0属于不同网络间通讯,而只能以自己的掩码来计算网络号。