关于《检查你是否高手》帖子中讲述到的网络间通讯问题我再详细解释一下,希望帮到各位!
主机间的通讯分为,相同网段间的通讯和不同网段间的通讯。如何识别?首先有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主机就认为两主机不属于相同网段。这种情况下就必须配置路由器或者网关了。

注意:之前帖子出现的问题在这里进行解释!!!!

两主机互联的情况大致可以分为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缓存,之前我就是忽略了这一步)。
(1)为什么A先PING B会不通呢?
ApingB B丢弃.png

昨天 18:25 上传
下载附件 (13.78 KB)
 


如上图,B在收到A发送的ARP请求报文后,对ARP请求报文进行丢弃处理。丢弃处理也意味着B不会回应A的ARP请求。所以A和B的ARP缓存都不会有对方的MAC地址。所以通讯无法进行。B为什么进行丢弃处理呢,对于此说法网上也是争论不休,比较符合现实的解释是因为当B收到A的ARP请求报文时候,会对两台主机A和B是否属于同一网段进行判断。如果两台主机不是同一网段,则ARP报文会被丢弃。
(2)为什么B先PING A就能通呢?
PCA上的PDU信息.png

昨天 18:33 上传
下载附件 (27.07 KB)
 

ARP报文来自B主机.png

昨天 18:33 上传
下载附件 (12 KB)
 


分析过程:B PING A,首先会检查A和B是否属于同一个网段,检查发现不属于同一个网段。B主机检查是否有设置网关,发现已经设置网关。B检查ARP缓存,查看是否有网关的MAC地址,结果发现没有。B向网关发送ARP请求报文,这里网关其实就是主机A。当A收到B发送来的ARP报文(上图中输入层部分的信息),检查自己和B是否属于同一个网段,结果发现网段相同,则ARP报文被顺利接收。A从ARP报文中提取B的MAC地址,并放入ARP缓存中,然后A对B发送过来的ARP报文进行应答(上图中输出层部分的信息)。B收到A发送回来的ARP应答报文,抽取A的MAC地址信息并存入自己ARP缓存之中。则现在双方都有对方的MAC地址了。自然能PING通了。
(3)为什么B PING完A,A再回来PING B就能通呢?
相信聪明的你已经发现了,当B PING A的时候,A、B双方就已经拥有对方的MAC地址了。自然能PING通了。
如果要重新进行实验,就如上文提到的,两台主机都使用ARP -d来清理ARP缓存。


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


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



最后最后,大家要用机器的角度来思考问题。机器获取信息只能依靠数据,例如主机不能获取到对方的子网掩码,所以对于主机来说,它并不能获取到192.168.0.0和192.0.0.0属于不同网络间通讯,而只能以自己的掩码来计算网络号。
哈哈,这个问题其实很有趣,大家若有问题,欢迎讨论,互相指教!!!!