首先我们要理解什么是stub区域?我的理解是stub区域内是为了让性能低的路由器能够发挥它的作用,所以该区域会限制 4类LSA 和 5类LSA 的转发,减少了路由表的数目,减少了内存的开销。
随后我们将area1配置成为stub区域,这时候我们就会发现R1的路由表上和R2的路由表上依然存在去到R3的外部路由,可是我们配置了stub区域啊,按照道理来说不应该stub区域不存在4类和5类lsa,那么R1又是从哪里获得这个外部路由的呢?
通过抓包工具我们可以看出
R3路由器向组播地址224.0.0.5发送了2个 LSU R2回复了一个ack
其中包含了3条5类lsa
这时候我们查看R2的lsdb表就可以看到有三条R3通告的路由
如下我们下面进行undo import-route direct
我们通过抓包能够发现R3发送一个LSU也是通过组播地址224.0.0.5发送的一个撤销路由的命令
其中包含了一条1类LSA和3条5类LSA
1类LSA出现了Do not age 字段
这个时候R2收到该LSU就会立马撤销该外部路由,观察图片我们能够发现通告路由器3.3.3.3通告的lsa已经从R2的外部路由表中消失了
这就是撤销路由的方式之一 发送包含一条1类LSA和若干条需要撤销掉的5类LSA来进行撤销路由的操作。
现在我们回到stub区域,因为stub区域无法发送4类LSA 和5类 LSA
那么他们是如何撤销该路由的呢?
当我们进行stub区域配置的时候,有大量的LSU和LSA报文,其中LSU包含了 大量的1类LSA、2类LSA、和3类LSA报文,没有4类LSA和5类LSA。
因为没有撤销方式一中没有5类LSA,所以R2的路由表中的外部路由表中由R3路由器宣告的三条外部路由不会直接撤销,而是会等到老化时间(3600s)过去了才会被删掉。
总结:
OSPF中撤销外部路由有两种方式
一种是通过发送包含了一个1类LSA和需要撤销的5类LSA的LSUpdate,当某个路由器通过组播地址224.0.0.5收到了该LSU后,就会回复一个LSAck 确认报文,会对自身路由表中的外部路由进行撤销。
另外一种就是无法通过LSU撤销外部路由的情况,这个时候的撤销路由的方式只能够等他老化时间age(3600s)过去后才触发删除。这也就是为什么引入外部路由后,然后在该区域配置stub区就会发生这个其他区域的ASBR还存在着stub区域内路由器引入的外部路由条目的问题。