今天无聊做了一下单臂路由的实验。发现一个有趣现象,在配置完全正确的情况下,两台主机无法通信,经过分析发现了原因。
实验拓扑如下:
我首先将PC1和PC2的IP设置完成,因为要设置在不同的vlan所以IP地址在不同的网段。
然后测试PC系统对ARP协议的实现,直接由PC1 ping PC2。因为PC在没有网关的情况下,对与不在同一网段的IP会直接ARP目的地址。连通性正常,能够ping通。
当完成全部配置后PC1 ping PC2却死活都不能成功。我当时也郁闷,怎么会出现这种情况。
经过仔细抓包和分析PC1 ping 向PC2的时候。原本的二层包头里的目的MAC地址应该是路由器的FO/O的MAC地址,但是由于之前我让PC1与PC2直接通信过,所以PC1里有PC2的MAC地址。当再次通信时,PC1的帧里二层 dst-mac为PC2的MAC。但是交换机这时已经划分了vlan,MAC又不是路由器的F0/0。所以无法通信。可以clear mac-address-tale来清除MAC地址表,就可以正常通信了。
至于为什么PC1在有了网关后,与不同网段的主机通信不ARP网关,应该是软件实现上的问题。