当我们把一个OSPF的拓扑设计好后,如果有一天又需要加入一个新的区域,而且该区域比较远,扯一条线过去太贵,将两个区域合并为一个区域又太大,会导致网络卡顿。
因此可以向下面这样构造不规则区域:
因此要能够实现OSPF不规则区域的信息传递,我们就需要配置不规则区域。
OSPF的不规则区域有两种:
(1)远离骨干的非骨干区域:
这种区域ABR必须同时工作于区域0,才能进行区域间的路由共享。
(2)不连续骨干:
从x区域获取到的路由信息不得发往编号为x的区域,即便x区域连接了本区域不同的ABR(水平分割)。
我之前的这篇文章CCNP2:二层技术、PPP、HDLC、GRE(Tunnel)、MGRE技术提到过GRE的技术。
这里的 tunnel 是在两台ABR上建立隧道,然后将 tunnel 宣告在OSPF中。
正常情况下,我们是将 tunnel 宣告在0区域中,但是我们知道,这个tunnel只是虚构的,实际上控制方面的流量走的都是1区域,OSPF本来就是一个占用资源大的协议,这就导致了area1中的区域会十分卡顿。
缺点:
①占用资源:周期的保活和更新,触发的信息均需要通过中间的穿越区域,对中间区域影响较大。
②选路不佳:由于 tunnel 被宣告在了区域0中,那么area0和area1之间的ABR在选路的时候会优选 tunnel 口,裹报头就会占用资源特别大
OSPF隐性规则:OSPF协议若通过不同的区域学习到的相同的路由,优选区域0,若均为非骨干,则比较度量值,这就会导致选路不佳。
如果按下面这种方式,左边的ABR便不会再像上面一样去纠结是选择走 area0(tunnel) 还是走area1,因为两个均为非骨干。但是这样带来的问题更为严重,
将tunnel宣告到区域2中,右边的ABR将不再拥有路由共享资格,就会形成下面这样:
此时,area1中的设备学习路由时,area2中的网段就会通过 tunnel 然后再经过左边的ABR,最后才能让area1学到,但是 tunnel的实际流量还是在area1中,这就更卡了,选路也不佳。
总之这种解决方案很差劲。
OSPF虚拟链路:非骨干区域间的ABR到骨干区域的ABR处授权,建立一条虚链路。
两台ABR都要配置:
R1(config)#router ospf 1
R1(config-router)#area 1 virtual-link 4.4.4.4
area1:中间穿越的区域
4.4.4.4:对端的ABR的RID
因为没有新的网段出现,故选路正常,为了避免周期的信息对中间区域的影响,故停止虚链路间的所有周期行为(保活机制)。这就导致两台ABR之间的虚链路之间没有dead time ,这就很不可靠。
DNA:无老化时间,表示去掉 更新时间 和 hello 时间。
因此也不建议去使用。
一台设备上若同时运行多个进程,那么不同进程拥有不同的RID,生成各自的数据库,但数据库不共享。仅将各自计算所得路由加载于同一张路由表内。
若多个进程工作于同一个接口上,仅最早的进程生效(一个接口只能工作一个进程,谁先来谁先工作)
在解决不规则区域时,让连接两个非骨干区域的ABR设备,将不同区域宣告到本地的不同进程下,之后使用重发布技术,进行路由共享即可。
总结:
多进程双向重发布 | 选路佳、共享路由条目 |
---|---|
tunnel | 选路不佳、占用资源大 |
虚链路 | 选路佳、占用资源大、不可靠 |
看到特殊区域时,如果没有底子,可能会比较混乱需要知道各类LSA,但是先讲LSA又不知道什么是特殊区域。可以将文章前后结合起来看。
LSA:链路状态通告,或者说是拓扑信息都可以。
链路状态通告=LSA头部(缩略信息)+ LSA 主体
对于完整的LSA是携带完整的拓扑信息的,DBD与LSR携带的都是LSA的头部信息,只有LSU才携带完整的LSA信息。
完整的LSA头部内容包含:
①Type:LSA类型
②LS-ID:连接对象的ID编号
③ADV Router:该LSA的通告路由器
LSA内容应该包含以下:
①链路路由前缀
②链路掩码
③链路开销
④连接的链路类型
⑤连接的路由器
这个图解释的比较形象,首先LSU携带了LSA信息。经过一个判断:条目是否在链路状态数据库中?
如果是,则比较条条目的序列号,相同的话说明数据库中的该条目与接收到的该条目是一样的,那么就忽略。不一样的话比较条目的序列号,若该新来的条目的序列号比较新则更新原来的条目,若收到的新来的条目还没有数据库里面的新,那么将使用LSU发送该数据库的LSA给刚才的源,反更新它。
如果否,则会将新来的LSA加载到数据库中,然后回复LSack作为确认。接着洪泛该LSA,让其它的路由器获取该未知网段。最后运行SPF计算新的路由表。
周期洪泛:30分钟,60分钟便会老化,之所以维持这么长时间是为了更加稳定。
例如下面这样将area1、area2、area3各汇成一条给area0,它是减少骨干区域的LSA量。
假设R1是ABR,它有两个环回,1.1.5.5/24、1.1.6.5/24,汇总之后便是1.1.4.0/22,其所在区域为area2,area2为需要汇总的区域。只能在ABR上汇总,汇总之后它会自动产生空接口防环路由。
R1(config)#router ospf 1
R1(config-router)#area 2 range 1.1.4.0 255.255.252.0
注:汇总时是通过该区域的1、2类LSA计算所得路由才能汇总成功
假设R2是ASBR,它有两个环回,2.1.1.1/24、2.1.2.1/24,汇总之后便是2.1.0.0/22,汇总之后也会自动产生空接口防环路由。。
R2(config)#router ospf 1
R2(config-router)#summary-address 2.1.0.0 255.255.252.0
特殊区域不可以为骨干区域、设置的区域不能存在虚链路
比如说将area1设置为特殊区域,那么它就只会学本区域的路由,对于其它区域的,它不会去学习,而是缺省指向与area0相连的ABR,这样就可以减少非骨干区域的更新量。
特殊区域分为两大类:一类是不存在ASBR,另一类是存在ASBR。
我们先说第一类:不存在ASBR
要既不是骨干区域、也不能存在虚链路,还不存在ASBR,因此满足这些条件的只有区域1了。
将area1设置为末梢区域后,该区域将拒绝4、5类LSA进入,4类是ASBR的位置,5类是域外路由(图中为EIGRP),拒绝之后ABR将会自动产生3类缺省发向该区域。
R1(config)#router ospf 1
R1(config-router)#area 1 stub
该区域所有的设备均需要配置,否则邻居关系就会断开
上面我们说到,设置为末梢区域的区域会拒绝4、5类LSA进入,然后自动产生3类缺省,那为什么不干脆进一步拒绝3类LSA,然后保留一条去往区域0的缺省呢?因此这就是完全末梢区域:在末梢区域的基础上,进一步拒绝3类的LSA,仅保留一条3类的缺省。
配置规则:
先将该区域配置为末梢区域,然后仅在ABR上定义完全即可
ABR(config-router)#area 1 stub no-summary
接下来要说的是第二类存在ASBR:
图中的area2就是一个NSSA非完全末梢区域
什么是非完全?图中的area2它是一个OSPF的一个末梢,但是它后面又跟了个EIGRP,虽然跟OSPF没有多大关系,但是这样area2就不算是完全末梢区域了,因此它就是非完全的了。
该区域拒绝4、5类LSA,不自动产生3类缺省,本地的5类LSA基于7类转发,通过NSSA区域后转回5类。
我们知道将area2设置为非完全NSSA区域后,可以为骨干区域减少一条4类LSA,但是4类LSA很少啊,它携带的是ASBR的位置,能有很多个ASBR吗,它的意义是在这吗?
现在我们回想一下我们的初心,减少骨干区域的LSA靠的是区域间手工汇总,因此设置NSSA非完全末梢区域的并不在于减少骨干区域的LSA,它的意义在于它能够拒绝区域ASBR产生的4、5类LSA,为了避免环路的出现,默认不自动产生缺省路由,导致无法访问其他的的域外网段,故在管理员确定无环的情况下,可以手工添加缺省路由。
R4(config)#router ospf 1
R4(config-router)#area 2 nssa
该区域所有设备配置
原理:该区域是在NSSA的基础上进一步拒绝3类LSA,自动产生3类缺省
这个比较好理解,之前是拒绝4、5类LSA,但是没有拒绝area0的LSA。那么完全NSSA就是拒绝其它全部区域的LSA,然后产生一条3类缺省。背后的EIGRP,通过7类转为5类穿过area2。
配置规则:先将该区域配置为NSSA,然后仅在ABR上定义完全即可。
R4(config)#router ospf 1
R4(config-router)#area 2 nssa no-summary
接下来我们聊一下出环的事情,这个环是怎么出的?
我们知道一般末梢区域是不会连ISP的,连接ISP的是区域0,但是当末梢区域要访问运营商时,会使用缺省指向区域0,由区域0通过缺省发给运营商。因此环也是这样出的,如果把一个末梢区域连接了ISP,然后区域0访问ISP时缺省指向该末梢区域,但是该末梢区域由于自动产生了3类缺省又会指向区域0,这样就出环了。
注:
①ISP所在位置的非骨干区域不得配置为任何的特殊区域。
②若ISP连接在其它的协议时,连接该协议的非骨干区域也不得配置为任何特殊区域。
首先我们知道OSPF协议基于LSU(包、相当于打包在一起)来共享LSA信息。
LSA:描述了路由器所有的链路、接口、路由器的邻居以及链路状态信息。
OSPF会在不同的条件下发出不同类别的LSA
详细查看某条LSA
R1#show ip ospf database router 1.1.1.1
router:类别名
1.1.1.1:link-id
接下来我要说明的是各种LSA,LSA总共有11种,这里我只介绍1、2、3、4、5、7类LSA。
我们先宏观的讲:无论哪种类别的LSA必携带**以下参数:
参数 | 注解 | 详细 |
---|---|---|
LS Age | 老化时间 | 周期为1800归0,也可触发归0,最大老化时间3609秒 |
Option | 选项 | 这里不做介绍 |
LS Type | 类别名 | 标注此类LSA是属于哪种LSA |
Link State ID | 在目录中的编号 | 这个编号是方便我们去打开它 |
Advertising Router | 通告者的RID | |
LS Seq Number | 序列号 | 使用棒棒糖规则,杆和圈(循环阶段) |
Checksum | 校验和 | |
Length | 长度 | |
Number of links | 包含的信息条数 |
首先,我会以下面这张图为基础讲解各种LSA。
我们查看一下R1的路由器的LSA,图中显示它的通告者就是自己,等信息。
下面这张图是它携带的信息:我们发现都是直连的拓扑。它的传播范围是本区域,Link-ID为通过者的RID,且本区域的所有设备均为通告者。
这类LSA存在3种链路类型:
①stub:末梢网络,例如环回
②transit:在传递一类LSA时会产生二类LSA描述完整拓扑,通告DR的位置。
③p2p(点到点):串型链路中为该链路类型。
这张图是目录信息,我们一会儿打开第一个看看。
下图是R1的网络LSA,里面包含了掩码和这个MA网段所包含的设备的RID。当收到这条LSA的设备,便知道这个MA网段中都包含了哪些设备,它的传播范围也是本区域。
除此之外显示通告者为2.2.2.2,通过显示邻居表发现,R2就是DR,Link-ID为DR的接口IP地址。
要想出现3类LSA,就需要在上图添加一个路由器,然后把它划到区域1
R1上show ip ospf database,我们可以看到出现了3类LSA
我们把它打开其中一条详细查看一下:
我们发现这其实就是一条路由,里面包含目标网络号,还有度量值,传播的范围为整个OSPF域。
这条LSA携带的是O IA域间路由,就是去往OSPF其它区域中的网段,通告者是ABR,至于如何到ABR,就用LSA1、2进行计算,在之后其它的ABR收到该条3类LSA之后,便会将通告者修改为本地。
先将5类LSA,之后引出4类。
我们将上图再稍加修改,为R4添加一个环回,然后让R4运行EIGRP宣告该环回,再通过重发布技术把它发进OSPF域中。
之后R1上就会出现下面这条O E2域外路由
接着我们查看一下OSPF的数据库表,发现了产生了一个5类的LSA:
我们打开这个目录,进行详细的查看:
因此,该类LSA它的传播范围为整个OSPF域,通告者为ASBR 4.4.4.4,携带的信息是 O E 域外路由,Link-ID为99.0.0.0(目标网络号)。
注:我们发现它的通告者是4.4.4.4,而不是2.2.2.2,这个不像我们之前提到的LSA3,在经过下一跳ABR的时候会将通告者修改为本地,它没有发生改变,这就违背了拓扑算路由。那么R1、R2是如何找到ASBR 4.4.4.4的位置呢?这就是我接下来要讲的LSA4
将上述环回重发布的时候,4、5类LSA均会同时产生,因此我们直接查看OSPF的数据库表就会发现4类LSA:
我们解开这条目录:
它的传播范围是除了ASBR所在区域外的整个OSPF域,上面这张图就说明了Link-ID为4.4.4.4,通告者为3.3.3.3,意思就是说要想去4.4.4.4这个网段找3.3.3.3,此时R1、R2、就知道了ASBR的位置了,接着利用LSA5就可以找到目标了。
如果还有其它ABR,那么在经过下一跳ABR时,也需要将通告者修改为本地。
7类LSA是指在非完全末梢区域内(not-so-stubby area)由ASBR(由ABR2充当)发出的通告外部区域的LSA,因此图中的ABR2路由器将把与NSSA区域相连的接口收到的类型7的LSA转换成类型5的LSA洪泛到整个骨干区域中去,从而也洪泛扩散到其他的区域中去。.
而这些原本的7类LSA其实就是5类,只不过将区域2设置为NSSA后,把5类变成了7类,7类透过area2,到达ABR2时,向OSPF其它域通告时,在将它从7类转为5类。(这里可以看文章前面,更详细)
这张图与我画的所有的拓扑都没关系,看看7类LSA长什么样好。
类别 | 类别名 | 传播范围 | 通告者 | 携带信息 | Link-ID | 通告者 |
---|---|---|---|---|---|---|
LSA1 | router 路由器 |
本区域 | 本地区域所有设备 | 本地直连拓扑 | 通告者的RID | 本地区域所有设备 |
LSA2 | network 网络 |
本区域 | DR | MA网段部分的拓扑 | DR的接口IP地址 | DR |
LSA3 | Summary Network 网络汇总 |
整个OSPF域 | ABR | O IA域间路由 | O IA路由 目标网络号 |
ABR,在经过下一跳ABR时,修改为本地 |
LSA4 | asbr-summary ASBR汇总LSA |
除ASBR所在区域外的整个OSPF域 | ABR | ASBR位置 | ASBR的RID | ABR,在经过下一跳ABR时,修改为本地 |
LSA5 | External 自治系统外部LSA |
整个OSPF域 | ASBR | O E域外路由 | O E路由,目标网络号 | ASBR(不修改) |
LSA7 | NSSA外部LSA | NSSA区域内 (离开该区域后转回5类) |
ASBR | O N域外路由 | O N路由,目标网络号 | ASBR(不修改) |
①接口明文:
//连接邻居的接口上配置
R1(config)#interface s1/1
// 开启接口明文认证需要,开启后本地hello包中认证类型字段被修改,若邻居间不一致,将无法建立邻居关系
R1(config-if)#ip ospf authentication
//定义明文认证的秘钥
R1(config-if)#ip ospf authentication-key cisco
②接口密文
R2(config)#interface s1/1
//开启密文认证需要
R2(config-if)#ip ospf authentication message-digest
//配置秘钥及编号
R2(config-if)#ip ospf message-digest-key 1 md5 cisco123
例:在R1上开启关于区域0的明文或密文认证,实际就是在R1上所有的区域0接口配置了明文或密文的认证需求,修改了认证类型字段而已。
接口的秘钥还需要到各个接口上逐一匹配
R2(config)#router ospf 1
//区域明文
R2(config-router)#area 1 authentication
//区域密文
R2(config-router)#area 1 authentication message-digest
明文认证
//开启明文认证需求
R2(config-router)#area 1 virtual-link 4.4.4.4 authentication
//在配明文认证密码:cisco
R2(config-router)#area 1 virtual-link 4.4.4.4 authentication-key cisco
密文认证
r2(config-router)#area 1 virtual-link 4.4.4.4 authentication message-digest
r2(config-router)#area 1 virtual-link 4.4.4.4 message-digest-key 1 md5 cisco123
被动接口:只接收不发送路由协议信息,仅用于连接用户的接口,不得用于连接邻居的接口
R2(config)#router ospf 1
R2(config-router)#passive-interface f0/0
R2(config)#interface s1/1
//修改hello time
R2(config-if)#ip ospf hello-interval 10
//修改dead time
R2(config-if)#ip ospf dead-interval 40
切记:修改本端的hello time,本端的dead time将自动4倍关系匹配,且邻居间hello 和 dead time必须一致。
OSPF的缺省有3种:分别是3、5、7类缺省,其中5类比较重要。
3类缺省特殊区域(末梢、完全末梢、完全NSSA)中连接骨干区域的ABR自动产生3类缺省。
普通的NSSA区域不产生缺省,需要人工添加
将area1设置为特殊区域后,ABR会自动下放3类缺省给area1中的设备,此时ASBR也会学到一个3类缺省。接着我们让该ASBR做重发布,该ASBR会将这条3类缺省发放给area2中的设备。
5类缺省是由重发布产生,前提是本地(ASBR)路由表中已经拥有缺省路由(任何方式获取均可),满足前提后,需要专用的重发布命令:
ASBR(config)#router ospf 1
ASBR(config-router)#default-information originate
当把该条命令一敲,它就会把自己路由表中的缺省路由重发布到area2区域内,这样area2中就会存在一个 O*E2的5类缺省。
默认导入的路由为类型2(O*E2),不叠加内部度量,种子度量1。
//修改种子度量和类型
R1(config-router)#default-information originate ?
metric OSPF default metric
metric-type OSPF metric type for default routes
如果本地路由表中还没有缺省路由,又希望强制向area2域内发放缺省路由。
R1(config-router)#default-information originate always
默认导入的路由为类型2,种子度量1
修改种子度量和类型:
R1(config-router)#default-information originate always ?
metric OSPF default metric
metric-type OSPF metric type for default routes
这类缺省比较少见,我们知道7类是只有NSSA区域产生之后才会出现的缺省。
7类缺省产生的条件是:正常仅在普通的NSSA环境配置,因为普通的NSSA不自动产生缺省路由,故需要在区域0和NSSA区域间的ABR上,向NSSA区域发布一条缺省路由。
R1(config-router)#area 1 nssa default-information-originate
默认进入路由为类型2,种子度量为1。
修改种子度量和类型:
R1(config-router)#area 1 nssa default-information-originate ?
metric OSPF default metric
metric-type OSPF metric type for default routes
切记:一旦本地为完全NSSA区域,若再导入7类缺省必然产生环路,只有普通的NSSA区域可以导入。
若一台设备同时学习到不同类别的缺省路由规则:
内部优于外部:3类优于5、7类
若5、7类相遇,先比管理距离再比较度量,越小越优选;若度量一致,5类优于7类。