设想这样一个场景,我们有两台电脑,PC A和PC B,它们位于同一个VLAN中,但ip地址分属不同网段。PC A的IP地址是10.1.1.1/8,而PC B的IP地址是11.1.1.1/8。这时候,如果我们尝试从PC A ping PC B,会出现什么情况?
首先,如果两者之间没有设置网关,那么PC A会发现对方不在同一网段,它会试图寻找网关,但因为没有设置,所以会收到“目标主机不可达”的错误信息。此时,数据包并没有发送出去,因为PC B的网卡并没有收到任何信息。
但如果我们把PC A的网关设置为PC B的IP地址,情况就会不同。在尝试ping时,PC A会先发送一个ARP广播,询问11.1.1.1的MAC地址。因为两台电脑处于同一个VLAN,这个ARP请求能够被PC B接收到,并且PC B会回应自己的MAC地址。这样,PC A就知道了如何将数据包发送到PC B,从而成功ping通。
更有趣的是,如果我们将PC A的网关设置为自己,它依然可以ping通PC B。这是因为PC A仍然会发送ARP请求去寻找PC B的MAC地址,这个请求会被PC B接收并回应。
如果我们进一步探索,尝试ping一些不存在的IP地址,我们会发现,无论这些地址是在同一网段、网关的网段,还是完全不同的网段,如果没有对应的设备,这些ping请求都会超时。这是因为ARP请求是直接针对ping命令指定的IP地址的,而不是网关。
但这里有一个例外。如果我们将PC A的网关设置为PC B的IP地址,但PC B的网关设置为一个不存在的地址,这时候ping PC B仍然会失败。这是因为PC A首先会尝试解析网关的MAC地址,这个请求会被PC B响应,但由于PC B的网关设置错误,它无法完成数据的转发,导致ping操作超时。
这些实验揭示了一个重要的网络通信原理:当设备需要与非本网段的设备通信时,它会首先尝试查找网关的MAC地址。如果无法获取网关的MAC地址,设备就不会响应ping请求。因此,虽然在某些特殊情况下,如网关与主机IP相同,通信可能意外成功,但在正常情况下,正确的网关设置对于跨网段通信至关重要。
通过这些细致的实验和分析,我们可以更深入地理解网络通信背后的机制,从而更好地设计和维护我们的网络环境。
同VLAN不同网段能否Ping通?
现在有两台电脑,他们同处于一个VLAN,
pcA IP地址:10.1.1.1/8
pcB ip地址:11.1.1.1/8
01无网关,A ping B
报出的DestiNATion host unreachable
显然,A机器发现对方与自己不是同一网段,试图寻找网关,但网关不存在,所以报主机不可达,B上的Sniffer未抓到任何包,观察网卡也是只发不收,显然数据没有出去。
02网关设成对方IP,A ping B
能正常ping通,为什么能通?
从A计算机Sniffer上抓到的包可以看出,A在ping对方过程中,A首先进行了ARP广播,它广播询问11.1.1.1的MAC是什么。
显然这个ARP广播是可以被B收到的(因为他们同处一个VLAN),而11.1.1.1正好就是B的IP地址,理所当然B要回应这个ARP请求。下图是A上的抓包情况,A首先进行了ARP广播,然后收到了B的应答。
这样A就有了B的MAC,而B在接到A的ARP广播时候就学到A的MAC,所以双方可以ping通。
03网关设成自己,A ping B
一样是可以ping的通的,A上抓包如下:
抓到的结果与第2种情况一样,A依然是先广播询问11.1.1.1的MAC,这个ARP广播被B接到后,B有义务应答,于是双方知道对方MAC,所以能PING通。
与第2种情况不同的是,这里可以明确知道ARP中的11.1.1.1指的是ping中所指定的IP地址而不是网关(此时A网关是10.1.1.1了)。
那么第2种情况中的11.1.1.1也指的是ping中所指定的IP?我们再来看下面。
ping三个不存在的IP地址
深入了解网络通信原理
网关设成自己,ping3个不存在的IP:
一个是和自己在同一网段的;
一个是和网关在同一网段的;
一个是和谁都不在同一网段的。
01ping和自己同一网段的IP
ping返回超时,在B上抓包结果如下:
可以看出A发出了询问10.1.1.2的ARP广播而不是询问网关(10.1.1.1)的广播,由于这个IP不存在,所以没有机器做出回应。
02ping和网关同一网段的IP
超时。B上接到的是A发出的关于11.1.1.2的ARP广播,由于不存在11.1.1.2这个地址,所以没有机器回应。
03ping和谁都不在一个网段的IP
超时。B上接到是A发出的关于100.1.1.1的ARP广播,由于不存在100.1.1.1这个地址,所以没有机器回应。
从上面的3个实验来看,当网关设置成自己的时候,不管ping的地址是什么,计算机发出的ARP广播都是直接询问ping中所指定IP对应的MAC,没有询问网关的MAC,这符合上文的描述。
其实计算机在广播询问ping命令指定的IP之前还是会先问网关的MAC的,只是这里由于网关是自己所以这一步就被跳过了。
那到底是不是这样的?我们再验证下。
AI计算机网关设置中B的IP
B的网关设置中不存在的IP地址
A计算机网关设成B的IP地址,但B的网关设置成一个不存在的IP(且与A/B都不在同一网络),ping三种情况。
01ping与网关同一网段IP
在A上抓包,可以看到A首先发出了关于网关11.1.1.1的ARP广播请求(对应B接到这个广播请求),B对这个11.1.1.1进行了ARP应答,但这个IP是不存在的所以ping结果超时。
02ping与谁都不在同一网段
超时。结果类似5.2结果,A发出了关于网关11.1.1.1的请求,B做了应答。但ping是超时的。
03ping计算机B的地址
结果超时,为什么这个也不通呢?按说按照上面的测试,AB计算机都能获得对方MAC,以太网下,有MAC应该就有通信的可能,可这个时候却不通。
查看Sniffer抓到的包可以发现:
A发出了关于11.1.1.1的ARP广播请求,B对11.1.1.1做出应答,但是下面接到了多个B发来的关于100.1.1.1的ARP广播请求,且100.1.1.1的请求没有得到B的应答,看来B是一直在试图查询B的网关(100.1.1.1)所对应的MAC,在网关的MAC没有获得应答之前,B不会对ping产生回应。
从上面的所有实验看出,计算机在与非本网段的地址通信时,计算机首先查找网关的MAC,如果网关MAC得不到回应,是不会对ping作出响应的;
因此,实例中1和2的情况是属于特殊情况,正好利用了网关与主机IP相同,骗过了计算机。如果AB的网关都设置的与AB ip毫不相干的话,相互肯定不通。