为何直连的路由器Ping不通对方?
20.1.1.0 255.255.255.0 -----> 20.1.1.1 (R2)10.1.1.0 255.255.255.0 -----> 10.1.1.1 (R1)
当在R1上Ping 20.1.1.1时,在敲完回车键之后,R1开始了逻辑运算:R1查路由表发现,与目的IP=20.1.1.1匹配度最高的就是这条路由:20.1.1.0 255.255.255.0 -----> 20.1.1.1 (R2)于是读出下一跳 20.1.1.1,意味着需要将Ping报文发给20.1.1.1。问题来了,如何到达20.1.1.1呢?继续查路由表,发现到达20.1.1.1最优的路由依然是:20.1.1.0 255.255.255.0 -----> 20.1.1.1 (R2)R1有点崩溃,因为陷入了一个死循环。路由器的设计师为了避免死循环的窘境,Code提前做了一个决定,遇到类似情况,直接将IP报文扔给对方就好了。R1正准备将报文从接口E0/0/0扔出去,扔给R2时,发现接口E0/0/0是一个Ethernet链路类型。Ethernet链路类型必须知道20.1.1.1的MAC地址,将报文二层封装好,才能扔给R2,对吗?于是R1从接口E0/0/0发出一个ARP广播,如上文抓包所示。R2收到了之后,发现ARP请求方的IP= 10.1.1.1,而自己的IP = 20.1.1.1,不在一个网段。R2被路由器设计师洗脑了,凡是接到不是一个网段主机的ARP请求时,可以不理睬(忽略)。由于R1一直收不到R2的ARP回应,Ping报文一直无法产生,所以Ping不通很正常。如果R1与R2之间的链路类型,不是以太网类型,而是串口类型,R1、R2上的路由如下:20.1.1.0 255.255.255.0 S0/0/010.1.1.0 255.255.255.0 S0/0/0这当然是可以的,因为R1、R2的S0/0/0接口压根没有MAC地址。R1将串行链路的封装头添加在Ping报文之前,就可以将报文从S0/0/0扔给R2。R2收到Ping报文,将串行链路的封装头添加在Ping回复报文之前,就可以将报文从S0/0/0扔给R1。对于初学者来说,不建议做类似的实验。伟人说过:没有学会走之前,不要学习跑。学习是一个循序渐进的过程。等基础扎实了,再做这些实验,应该对背后可能发生的问题都能做到心中有数。在实验二里,两个S0/0/0接口都不配置IP地址,把2个IP地址分别配置在R1、R2的loopback上,然后在两个S0/0/0接口下使用 IP Unnumbered loopback 命令,双方也是可以Ping通的。