两台电脑之间能通信吗?
拓扑图如下,只有两台电脑,IP配置如图所示,两台电脑都只有IP地址和掩码,没有网关
1、启动两台电脑,并在其中一个接口打开抓包软件
2、用A电脑ping B电脑,查看抓包软件中抓取的数据,可以看到,A电脑直接提示目标主机不可达,且抓包软件里并没有抓到任何数据
3、用B电脑ping A电脑,可以看到B电脑向A电脑发送5个数据包,但都请求超时,B电脑ping A电脑也ping不通,WireShark抓取到七个数据包,两个ARP包,五个ICMP包,下面我们就来详细分析一下这种情况
4、问题详细分析
问题一:为什么A ping B时,WireShark没有抓取到任何数据包?
答:两个主机通信时,会先判断目的主机与自己在不在同一个网段,(1)如果在同一个网段,则查找自己的ARP缓存,如果有目标主机的MAC地址,则直接向目标主机发送数据,‚如果没有,则先发送ARP广播,获取目标主机的MAC地址,然后再向目标主机发送数据;(2)如果不在同一个网段,则先看自己有没有网关,如果有,则将数据发送给网关,如果没有配置网关,则将数据丢弃;A电脑(192.168.2.1/24)ping B电脑(192.168.3.1/23),因A电脑判断出B电脑与自己不在同一个网段,且A电脑没有配置网关,所以A电脑直接将数据丢弃,并提示目标主机不可达,所以我们的抓包软件也不会抓取到任何的数据包。
问题二:为什么B ping A时,提示请求超时,且从抓取到的数据包分析,提示我们目标主机(A电脑)无响应呢?
答:结合问题一的答案我们可知,B ping A时首先判断A电脑是否与自己在同一个网段,经判断,B电脑认为A与自己在同一个网段,所以B会向A发送数据,那么接下来,B要查看自己的ARP缓存表里面有没有A电脑的ARP缓存,因B与A是第一次通信,所以B没有A电脑的MAC地址,所有B发送ARP广播,来请求A的MAC地址,A收到B的ARP广播后,发现B是在请求自己的MAC地址,所以会对B做出回应,告诉B电脑自己的MAC地址,这就是我们在抓包软件中看到的前两个数据包是ARP包的原因;B电脑有了A电脑的MAC地址,接下来就会正式向A发送数据,当A收到B发来的ICMP请求后,会向B电脑回包,结合答案一,我们知道,因A电脑判断出B电脑与自己不在同一个网段,且A电脑没有配置网关,所以,A电脑会将数据包丢弃,这就是抓包软件提示“No response seen”的原因。
问题三:如何判断目标主机是否与自己在同一个网段?
答:用本主机的IP地址和子网掩码做“与”运算,会得到一个结果,然后用目标主机的IP地址和子网掩码做“与”运算,也会得到一个结果,对比这两个与运算的结果是否一致,来判断目标主机与本主机是否在同一网段。如:当A ping B时,A电脑(192.168.2.1/24)IP地址与子网掩码做与运算的结果是192.168.2.0,目标主机(B电脑)的IP地址192.168.3.1与A电脑子网掩码做与运算的结果是192.168.3.0,两个结果不一致,所以A电脑认为与B主机不在同一个网段;反之,当B ping A时,B电脑(192.168.3.1/23)IP地址与子网掩码做与运算的结果是192.168.3.0,目标主机(A电脑)的IP地址192.168.2.1与A电脑子网掩码做与运算的结果也是192.168.3.0,俩结果一致,所以B主机认为与A主机在同一个网段。
注意:做与运算时,IP地址和子网掩码都是以二进制形式进行运算,有关IP地址、子网掩码、ICMP、ARP的相关知识本篇不再做详细介绍