今天心血来潮,想起一个老生常谈的问题:Router1和Router2物理直连,分别配置不同网段ip3.3.3.3/24和4.4.4.4/24,能ping通吗?
凭直觉,大家都知道,不同网段肯定ping不通啊,有同学会提出添加静态路由,将对端作为自己的网关,很遗憾还是ping不通。
为什么ping不通,底层逻辑是什么,好像知道一堆道理,却不清楚最最根本的原因是什么,今天我们用Cisco Packet Tracer来模拟一下网络,并抓包看一下问题出在哪里。
我们知道,在以太网连接中,需要用MAC地址来确定网络节点的位置,而ARP协议就是用来确认MAC的。
1. 通过抓包,可以看到Router2收到了Router1的ARP报文,但是这个报文的类型是Gratuitous ARP,用来做地址冲突探测的,根据下面第6条解释,Router2最后丢弃了这个报文,并没有存储它。所以,这个ARP报文虽然带了3.3.3.3的IP和MAC,但是Router2并没有存储它。
2. 当我将Router2的IP改为3.3.3.4/24时,Router1发给了Router2一个Broadcast类型的ARP报文,Router2将这个ARP报文里的IP和MAC地址进行了处理。
所以问题在于,Router1不会给不同网段的Router2发送广播类型的ARP,导致Router2无法学到Router1的MAC地址。
那么,有没有办法能够ping通呢?有一个,那就是ip配置在串口的时候,串口直连跑PPP协议,并且把串口作为next hop,无需ARP流程,就可以ping通。
- interface Serial0/3/0
- ip address 1.1.1.1 255.255.255.0
- ip route 2.2.2.2 255.255.255.255 Serial0/3/0
- interface Serial0/3/0
- ip address 2.2.2.2 255.255.255.0
- ip route 1.1.1.1 255.255.255.255 Serial0/3/0