从理解上来看,Type-5类外部路由实际上和OSPF的区域没有任何关系,它忽略区域的界限,传播到OSPF的每一台路由器上。
从原理上来看,ABR必然存在所连接的每个区域的链路状态数据库。为了描述方便,我们假定ABR连接了区域和区域1。
很显然,RTB是ABR。RTA引入了N条外部路由,那么在RTB上,区域的LSDB中也会存在N条Type-5类LSA,作为ABR,RTB一定会把这些Type-5原封不动地扔到区域1的LSDB中,并同步给RTC,同时,生成Type-4传入区域1,告诉区域1可以通过RTB来访问这些外部路由。
这并没有任何问题,可是很多时候,如果这个区域1位于网络的边缘,ABR是否有必要把这些Type-5外部路由全部扔到区域1中呢?
我们思考一下,RTC上这些外部路由的下一跳是谁?
毫无疑问是RTB,因为RTB生成了Type-4扔进了区域1,所以RTC上这些外部路由的下一跳全部都是RTB。
当然,如果这些外部路由只有几十条,几百条,那都不是事儿,RTC查找几百条路由还是很easy的。
可是,如果这些外部路由有几千条、几万条呢?
我们知道,路由的查找是遍历(就是从头到尾看)整个路由表,然后在所有匹配到的路由条目中匹配掩码最长的,所以,路由表越大,查找越慢。
几千条、甚至几万条路由,够RTC喝一壶的,如果RTC只是一台中低端的路由器,它的CPU占用率会让你觉得它跟“死了”差不多!
怎么解决呢?很容易让人想到在RTB上,通过路由控制(如路由过滤、路由策略等)方法过滤掉这些外部路由,不让它们从区域进入到区域1。
想法挺好,可是行不通。
OSPF中有一个很特别的概念,几乎很少有书上提及,叫做“路由权限”。
简单来说,就是只有路由(不管是Type几)的始发者才能影响链路状态数据库LSDB,其他路由器没有权限增加或删除LSDB中的内容。
比如,区域间路由Type-3是由ABR生成的,那么,只有ABR可以对Type-3进行过滤、聚合等操作,来影响一个区域的LSDB中Type-3的内容,其他路由器没权限。
再比如,外部路由是ASBR引入的,那么只有ASBR可以对自己引入的这些外部路由进行过滤、聚合等操作,来影响所有OSPF路由器的LSDB中Type-5的内容,其他任何路由器都没有权限把这些外部路由从LSDB中删除。
这就麻烦了,不能在RTB上过滤这些外部路由。可是如果在RTA上过滤,那么区域中也没有了。
所以,OSPF引入了“特殊区域”的概念,来解决这个问题。
在上面的问题中,如果把区域1设置成stub区域,那就没有任何问题了!
Stub区域,也可以叫“末节区域”、“末梢区域”,是OSPF的一种特殊区域。除了骨干区域外,其他区域都可以设置成stub区域。
Stub区域的特点是,连接stub区域的ABR不会把Type-4和Type-5扔到stub区域中。
那在区域中,这些外部路由有没有受到影响呢?
并没有任何影响!
也就是说,上图中只要区域1是stub区域,那么相貌平平的RTB虽然只是ABR,并不是这些外部路由的始发者,却把这些外部路由阻挡在了区域1外面,RTC上不会有哪怕一条外部路由,这让RTC流下了感动的泪水!
感动了一会,RTC擦擦眼泪,咦?不对啊,虽然我没有这些外部路由了,那我也没法访问它们啊!
作为ABR的RTB微微一笑,好办,我给区域1扔一条缺省路由吧,你们用这条缺省路由来访问外部网络。
虽然是一条缺省路由,但也要穿上链路状态的外衣,免得别人说三道四,影响OSPF“链路状态”路由协议的名声。穿什么好呢?Type-3吧。
于是,ABR向stub区域扔了一条Type-3类缺省路由,stub区域中的路由器虽然没有任何一条外部路由,但也可以用这条缺省路由高高兴兴地访问了。
外部路由的问题虽然解决了,可是如果网络规模非常大,区域间的Type-3也会非常多。把区域1设置为stub区域后,RTC虽然没有了外部路由,但是Type-3路由一条也没有少。如果这些路由也有几千几万条,RTC又哭了,只能向ABR求救。
RTB又微微一笑,Type-3?都是我扔过去的,我有权限,小菜一碟,so easy。
可是RTB发现要过滤这些Type-3并不轻松,如果这些Type-3的路由前缀没有规律,很难聚合,那么要用很多很多前缀列表或者ACL来匹配它们。如果有几千甚至几万条没有规律的Type-3路由,RTB就傻了!
而且,这些Type-3路由的下一跳,也全部都是RTB。
怎么办,另一个特殊区域Totally Stub可以解决这个问题。
Totally Stub区域,也叫“完全末节区域”、“完全末稍区域”。如果ABR连接了一个Totally Stub区域,那么ABR不仅不会向Totally Stub区域扔Type-4及Type-5,连Type-3也不会扔进去。但为了让Totally Stub区域能访问其他区域和外部路由,ABR也会向Totally Stub区域扔一条穿着Type-3外衣的缺省路由!
这下,RTC可以彻底放心了,除了自己区域的路由和一条Type-3缺省路由外,啥也没有。
不过,OSPF对Stub区域和Totally Stub区域有个严格规定:区域内不准有ASBR!
这很好理解,本来这两个特殊区域里就不存在Type-5,被ABR过滤了,如果区域内有ASBR,必然引入了Type-5,这自相矛盾。
小Q:Totally Stub区域里有没有Type-3路由?
领取专属 10元无门槛券
私享最新 技术干货