为何直连的路由器Ping不通对方?

一位同学做了个实验如下图:
为何直连的路由器Ping不通对方?
R1 上手动添加了一条静态路由,指向R2
20.1.1.0 255.255.255.0  —–> 20.1.1.1 (R2)
 
R2 上也手动添加了一条静态路由,指向R1
10.1.1.0 255.255.255.0  —–> 10.1.1.1 (R1)
 
R1 Ping不通R2之后,R1上抓包如下所示:
为何直连的路由器Ping不通对方?
为何R1 Ping不通R2?
当在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/0
10.1.1.0 255.255.255.0  S0/0/0
R1可否Ping通R2呢?
这当然是可以的,因为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通的。

来源:车小胖谈网络,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/127166

发表评论

登录后才能评论
侵权联系 投诉举报
返回顶部