从一道面试题说起
问题:两台服务器A和B的网络配置如下,B的子网掩码本应该是255.255.255.0,被不小心配成了255.255.255.224,它们还能正常通信吗?
用Wireshark就可以从具体的网络包发现问题,到底通信到了哪一层、阶段产生了问题,问题是什么。
在这个问题的场景下,书上给出的服务器B ping 服务器A时,服务器B的网络包范例:
1号包:
服务器B通过ARP广播查询默认网关192.168.26.2的MAC地址。
为什么ping的服务器A的IP,B却去查询网关的MAC地址呢?
因为B根据自己的子网掩码,计算出A属于不同的子网,跨子网通信需要默认网关的转发。所以需要知道默认网关的MAC地址。
2号包:
默认网关192.168.26.2向B回复了自己的MAc地址。
然而Wireshark上的Source和Destination显示的开头却是“Vmware”呢?因为MAC地址的前三个字节表示厂商,而“00:50:56”和“00:0c:29”都被分配给了Vmware公司。这是全球统一的标准,所以Wireshark干脆显示出厂商名了。
3号包:
B发出ping包,指定Destination IP是A,但是Destination MAC却是网关的。
这表明B希望网关把包转发给A。
至于网关有没有转发就无从得知了,除非在网关上也抓个包。
4号包:
B收到了A发出的ARP官博,这个广播查询的是B的MAC地址。这是因为在A看来,B属于相同子网,同子网的通信无需默认网关的参与,只要通过ARP获得对方的MAC地址就行了。
这个包也表明默认网关成功把B发出的ping请求转发给A了。
5号包:
B回复了A的ARP请求,把自己的MAC地址告诉A。
这说明B在执行ARPP回复时并不考虑子网。虽然ARP请求来自其它子网的IP,但也照样回复。