1 问题描述
最近,有同学私信,他遇到一个问题,想不明白,于是来私信了:
他遇到情况,网络环境,我简化了一下,如下:一、拓扑图:
二、描述
1、R1和R2 以太网直连,分别故意配成不同网段:37.1.1.1/24和38.1.1.1/242、R1和R2的OSPF 网络类型均修改为p2p3、R1何R2的G0/0/0均宣告到OSPF进程中。
R1的配置:
# interface GigabitEthernet0/0/0 ip address 37.1.1.1 255.255.255.0 ospf network-type p2p ospf timer hello 3 # return # ospf 1 area 0.0.0.0 network 37.1.1.1 0.0.0.0 #
R2的配置:
# interface GigabitEthernet0/0/0 ip address 38.1.1.1 255.255.255.0 ospf network-type p2p ospf timer hello 3 # ospf 1 area 0.0.0.0 network 38.1.1.1 0.0.0.0 #
三、现象:
a、查看OSPF邻居状态,为Full,建议邻接关系。
b、查看R1的路由表,也有对端的路由:
疑问:OSPF邻居正常,路由表也有路由,为啥ping不通呢?
2 分析
从上面,我们可以知道两端p2p,不同网段,建立邻居,OSPF在计算路由,拓扑,是没有问题的。通过LSDB也可以画出有向图:
(P2P 有向图)
都没问题,那该怎么分析呢?或者该用哪个理论知识来说明这个现象呢?
答案是抓包!于是,龙哥就抓了个包。
然后在R1开始ping对端 R2的38.1.1.1:
抓包发现,R1是有发了arp广播报文,但是R2一直没有响应,导致R1学习不到R2的MAC地址,也就无法封装二层,所以才无法ping通。
到这里,我又搭了一个环境,不修改接口OSPF的网络类型p2p:
除了网络类型,其他配置跟上述一样。
我在R5上去ping R6的38.1.1.1,抓包发现,压根没有抓到ARP广播报文:
所以,我的理解是:在接口广播类型的情况下,ARP请求广播报文,会检查目的ip与我本地接口ip是否同网段?是同网段的话,我就发ARP请求广播报文,不同网段,压根不会发请求广播报文。如果接口的OSPF网络类型是p2p,底层是以太网,不管同不同网段,ARP请求广播报文都会发送,但是接收端的话,会检查请求报文里的IP与我本接口的ip是不是同网段的,是同网段的才会响应,不同网段的,不会响应。
同网段,对端就会响应ARP报文:
那有人肯定就会问了,那为啥底层是ppp时,不同网段的IP,直连就可以通呢?
且听我下面的分析:
R3配置:
# interface Serial4/0/0 link-protocol ppp ip address 37.1.1.1 255.255.255.0 # return # ospf 1 area 0.0.0.0 network 37.1.1.1 0.0.0.0 # return
R4配置:
# interface Serial4/0/0 link-protocol ppp ip address 38.1.1.1 255.255.255.0 # return # ospf 1 area 0.0.0.0 network 38.1.1.1 0.0.0.0 # return
状态:
现在,我们在R3ping R4之前,先开启抓包:
从抓包,我们就可以知道了,PPP链路没有使用ARP。
因为在底层封装PPP协议,在这种链路上,设备认为对端就是直连一台设备而已,所以不需要ARP的,直接用ppp封装,所以能成功发送给对端,对端也能响应,所以PPP不同网段可以通。