1、R1宣告一条10.1.1.1的路由,R2和R4之间做虚链路,并且把双方的接口开销改为1000,会出现什么问题?
出现的问题:如果R4访问10.1.1.1这条路由,会产⽣R4--R5--R6--R4这样的环路。
R2和R4之间做了虚连接以后,在没有修改接⼝开销的时候,此时的路由下⼀跳情况如下:
(1) R4访问10.1.1.1这条路由的下⼀跳是R2,路径为R4--R2--R1
(2) R6访问10.1.1.1这条路由的下⼀跳是R4,路径为R6--R4--R2--R1
(3) R5访问10.1.1.1这条路由的下⼀跳是R6,路径为R5--R6--R4--R2--R1
R2和R4的接⼝修改过开销值以后,此时的路由下⼀跳情况如下:
(1)V-link 是由 R4 和 R2 之间建立的,原本路径是 R4-R2,但是修改接口 cost 后,R4 发现到达 R2 有更优的路径,即:R4-R5-R3-R2这条路径,开销为3,这时候 V-link 的路径发生了改变
(2)又因为,R4 访问 R1的10.1.1.1 时,需要先到达 R2 设备,而由于开销的调整,加上R2、R3、R4、R5的互连链路都是宣告进了区域1中,则 R4 的SPF算法计算出来去往R2的路径为R4-R5-R3-R2,从而使得 R4 访问 10.1.1.1 时,下一跳为 R5 ,数据包也转发给 R5 设备
(3)数据包只有本地意义(因为每个设备都有独立的 FIB)即:数据包从R4到达 R5 后,就不再归R4 管理,R5 会重新根据自己的 FIB 转发该数据包,R5 通过 1类LSA 计算,发现到达 R1 路由器的下一跳是 R6,路径为:R5-R6-R4-R5-R3-R2-R1-10.1.1.1)数据包发送给R6(虽然R5能通过R3学到这条路由的LSA,但这是非骨干区域传递过来的三类LSA, 只会接收不会用于计算路由,所以R5的下一跳是R6)
(4)R6收到数据时,通过 1类 LSA计算,发现到达 R1 路由器的下一跳为 R4,路径为:
R6-R4-R5-R3-R2-R1-10.1.1.1
(如此类推,数据包最终在 R4-R5-R6 之间产生环路)
2、如果R2是华为设备,R4是思科设备,对接会产生什么问题?
①华为通过周期性发送Hello报文来维护OSPF的虚链接邻居关系,而思科的虚链接邻居UP后,是不会发送Hello报文,来维护虚链接的邻居关系的。最终会导致华为的虚链接邻居收不到对端的OSPF报文,而超时,断开邻居关系。
②思科会将通过虚链路通告的LSA的DNA(Do not age)位置位,表示LSA永远不老化。这样做的目的是为了避免定期维护LSA而来带的链路拥塞和转发设备性能下降问题。原因是因为虚链路是非直连设备间通过单播建立的邻接关系,LSA传递需要经过中间网络进行转发。如果网络中存在低速链路或者性能比较差的设备,定期发送大量LSA会导致链路拥塞和设备性能下降。这种做法虽然减少了LSA定期维护带来的链路拥塞和转发设备性能下降问题,但是同时也会造成LSA无法被删除,永远保留在链路状态数据库中,形成僵尸LSA,占用大量的内存资源。华为则通过点到点的网络类型来维护虚链路,解决僵尸LSA的问题。
③MTU不一致会导致OSPF邻居无法建立,华为设备默认是关闭MTU检测的,而思科设备默认是开启MTU检测的,所以MTU不一致,会导致OSPF邻居无法建立;解决方案:第一是关闭思科设备的MTU检查,第二是将华为设备与思科设备的MTU值配置为一致。