阅读本文需要具备的前提知识:
(1)知道子网掩码的作用,能通过子网掩码判断网络号;
(2)会十进制与二进制的互相转化;
问题:两台服务器A和B的网络配置如下(见图1),B的子网掩码本应该是255.255.255.0,被不小心配成了255.255.255.224。它们还能正常通信吗?
图1
本来我们看它们如何通信,看是否在一个子网即可判断,即:
(1)如果在相同子网,A和B的子网掩码都是255.255.255.0,那么属于一个网络内,可以直接通信。
(2)如果不是一个子网,那么通过网关进行转发。
但是这个题就奇怪在,A的子网掩码最后一位是0,转换为二进制是00000000。而B的子网掩码最后一位是224,转化为二进制是11000000。前三位是一致的,都是255.255.255。只需要看最后一位,通过对比二进制我们发现:B的子网掩码多了2个1,说明占用了两位作为子网号,那么相当于B的网络是属于A的子网。
即B所在的网络属于A所在的网络,A所在的网络包含B所在的子网。
是包含与被包含关系。
作者用wireshark在B服务器上发送ping请求给A,然后抓包分析得出:
B发送消息给A,B通过分析子网掩码得出,自己是位于小网络,要传送消息给A,是不同的网络,必须通过网关,然后网关再把消息给A。
但是A收到消息发送给B,发现B所在网络是A所在网络里的小网络,这个被认为是同一网络,所以不用经过网关的转发, 直接发送给B即可。
以下是用wireshark抓包的分析图:
包1
.3(B)广播问,网关(.2)的MAC地址是多少?
包2
网关回复给B:我的MAC是xxxx:88
包3
然后B发送消息给A,但是要求网关转发
包4
A收到消息发送给B,询问B的MAC地址是多少
包5
A收到回复,B的MAC地址是xxxx:7b
包6
A成功发送消息给B 了
包7、8、9、10
然后重复这个过程,(.3)B向(.129)A请求消息。然后A回复。
因为已经记录了MAC地址,所以不用经过ARP协议,直接ICMP协议即可。
B发送给A是要经过网关,而A发送给B直接发即可。