OSPF协议基本原理笔记

笔记是从书上和相应的PPT上摘抄的

特点

1.支持较大规模的网络:

OSPF 协议无路由跳数限制,所以其适应范围广,支持网络规模更大。在特定的组网环境下,OSPF 单区域甚至可支持几十台路由器。

2.组播触发式更新:

OSPF 协议在收敛完成后,会以触发方式发送拓扑变化的信息给其它路由器,从而占用了较少的链路带宽;同时,在某些类型的链路上以组播方式发送协议报文,减少对其他设备的干扰。

3.收敛速度快:

在网络的拓扑结构发生变化后,OSPF 会立即发送更新报文,从而使拓 扑变化很快扩散到整个自治系统;同时,OSPF 采用周期较短的 Hello 报文来维护邻居状态。

4.以开销(Cost)作为度量值:

OSPF 协议在设计时,就考虑到了链路带宽对路由度量值的影响。OSPF 采用链路开销作为度量值,而链路开销与链路带宽成反比,即带宽越高,开销越小。这样,OSPF 选路主要基于带宽因素。

5.协议设计避免路由环路:

由于 OSPF 根据收集到的链路状态用最短路径树算法计算路由,从算法本身保证了不会生成自环路由。

6.应用广泛:

        目前在互联网有大量的应用实例,是使用最广泛的 IGP 之一。

三张表

1.邻居表:

        运行 OSPF 协议的路由器以组播方式(目的地址 224.0.0.5)发送 Hello 报文来发现邻居。收到 Hello 报文的邻居路由器检查报文中所定义的参数,如果双方一致就会形成邻居关系。邻居表会记录所有的建立了邻居关系的路由器,包括相关描述和邻居状态。路由器会定时的向自己的邻居发送 Hello 报文,如果在一定的周期内,没有收到邻居的回应报文,就认为邻居路由器已经失效,将它从邻居表中删除。

2.链路状态数据库(LSDB):

        有时也被称作拓扑表。根据协议规定,运行 OSPF 协议的路由器之间并不是交换路由表,而是交换彼此对于链路状态的描述信息。交换完成之后,所有同一区域的路由器的拓扑表中都具有当前区域的所有链路状态信息,并且都是一致的。

3.路由表:

        运行 OSPF 协议的路由器在获得完整的链路状态描述之后,运用 SPF 算法
进行计算,并且将计算出来的最优路由加入 OSPF 路由表中。

路由生成过程

第1步:生成 LSA 描述自己的接口状态。
        每台运行 OSPF 的路由器都根据自己周围的网络拓扑结构生成 LSA(链路状态通告)。
LSA 中包含了接口状态(up 或 down)、链路开销、IP 地址/掩码等信息。OSPF 链路开销值与接口带宽密切相关。缺省情况下,开销值与接口带宽成反比。此外,为了对协议选路的结果进行人工干预,路由器也支持通过命令来指定接口的开销值。

第2步:同步 OSPF 区域内每台路由器的 LSDB
        OSPF 路由器通过交换 LSA 实现 LSDB 的同步。由于一条 LSA 是对一台路由器或一个网段拓扑结构的描述,整个 LSDB 就形成了对整个网络的拓扑结构的描述。LSDB 实质上是一张加权的有向图,这张图便是对整个网络拓扑结构的真实反映。显然,OSPF 区域内所有路由器得到的是一张完全相同的图。
    
第3步:使用 SPF 计算出路由
        OSPF 路由器用 SPF 算法以自身为根节点计算出一棵最短路径树。在这棵树上,由根到
各节点的累计开销最小,即由根到各节点的路径在整个网络中都是最优的,这样也就获得了由根去往各个节点的路由。计算完成后,路由器将路由加入 OSPF 路由表。当 SPF 算法发现有两条到达目标网络的路径的 Cost 值相同,就会将这两条路径都将加入 OSPF 路由表,形成等 价路由。

分层结构

OSPF 协议通过将自治系统划分成不同的区域(Area)来解决上述问题。区域是从逻辑上将路由器划分为不同的组,每个组用区域号(Area ID)来标识。区域的边界是路由器,而不是链路。一个网段(链路)只能属于一个区域,或者说每个运行 OSPF 的接口必须属于某 个特定区域

规定:
         1.所有非骨干区域必须与骨干区域保持连通;
         2.骨干区域自身也必须保持连通
    
划分区域的优势
        1.减少了区域内LSDB中链路状态信息的数量,降低了运行OSPF协议对路由器性能的要求。
         2.可以将相同功能性或者地理位置的路由器划分在一个区域内,以便于管理。
         3.隔离拓扑变化,减少路由震荡对整个自治系统的影响

路由器类型

区域内路由器(Internal Router)

区域边界路由器(ABR,Area Border Router)

骨干路由器(Backbone Router)

自治系统边界路由器(ASBR, Autonomous System Border Router )

router ID 与网络类型

Router ID

        1.一台路由器如果要运行OSPF协议,则必须存在Router ID(RID)。RID是一个32比特无符号整数,可以在一个自治系统中唯一的标识一台路由器.

       2.RID可以手工配置,也可以自动生成。

        3.如果没有通过命令指定RID,将按照如下顺序自动生成一个RID

        4.如果当前设备配置了Loopback接口,将选取所有Loopback接

        5.上数值最大的IP地址作为RID

        6.如果当前设备没有配置Loopback接口,将选取它有已经配置IP地址中数值最大的IP地址作为RID。

网络类型

1.Broadcast

2.NBMA(Non-Broadcast Multi-Access,非广播多点可达网络)

3.P2MP(Point-to-MultiPoint,点到多点)

4.P2P(Point-to-Point,点到点)
    
NBMA网络是指那些全连通的、非广播、多点可达网络。而P2MP网络,则并不需要一定是
全连通的。

NBMA是一种缺省的网络类型,而P2MP网络必须是由其它的网络强制更改的。

NBMA网络采用单播发送报文,需要手工配置邻居。P2MP网络采用组播方式发送报文。

报文类型

Hello 报文:

        周期性发送,用来发现和维持 OSPF 邻居关系。内容包括一些定时器的数值、DR(Designated Router,指定路由器)、BDR(Backup Designated Router,备份指定路由器)以及自己已知的邻居。
路由器组播方式(组播地址为 224.0.0.5)发送 OSPF 的 Hello 报文。
组播地址 224.0.0.5 表示所有运行 OSPF 的路由器都能收到这个报文

DD(Database Description,数据库描述)报文:

        描述了本地 LSDB 中每一条 LSA的摘要信息,用于两台路由器进行数据库同步。

LSR(Link State Request,链路状态请求)报文:

        向对方请求所需的 LSA。两台路由器互相交换 DD 报文之后,得知对端的路由器有哪些 LSA 是本地的 LSDB 所缺少的,这时需要发送 LSR 报文向对方请求所需的 LSA。内容包括所需要的 LSA 的摘要。

LSU(Link State Update,链路状态更新)报文:

        向对方发送其所需要的 LSA。

LSAck(Link State Acknowledgment,链路状态确认)报文:

用来对收到的 LSA 进行确认。内容是需要确认的 LSA 的 Header(一个报文可对多个 LSA 进行确认)。OSPF 报文是直接封装在 IP 报文之中的,其 IP 报文头的协议号为 89。
ospf 协议号89

定时器
 Hello 定时器:

        接口向邻居发送 Hello 报文的时间间隔,OSPF 邻居之间的 Hello 定时器的值要保持一致,且应与路由收敛速度、网络负荷大小成反比。

邻居失效时间:

        在邻居失效时间内,如果接口还没有收到邻居发送的 Hello 报文,路由器就会宣告该邻居无效

选举原则

首先比较Hello报文中携带的优先级
        优先级最高的被选举为DR,优先级次高的被选举为BDR
         优先级为0的不参与选举


优先级一致的情况下,比较Router ID
        Router ID越大越优先


保持稳定原则
        当DR/BDR已经选举完毕,就算一台具有更高优先级的路由器变为有效,也不会替换该网段中已经选举的DR/BDR成为新的DR/BDR
    
只有在广播或 NBMA 类型接口才会选举 DR,在点到点或点到多点类型的接口上不需要选举 DR。    

DR 是某个网段中的概念,是针对路由器的接口而言的。某台路由器在一个接口上可能是 DR,在另一个接口上有可能是 BDR,或者是 DR Other。

DR 并不一定就是路由器优先级最高的路由器接口;同理,BDR 也并不一定就是路由器优先级次高的路由器接口。

状态机

Down:在上一个邻居失效时间内,在当前的接口没有收到任何 Hello 报文。这个状态是状态机的第一个稳定状态

Attempt:这个状态只存在于 NBMA 网络中。当一台设备试图通过 Hello 报文去联系自己的邻居,但是还没有收到回应的报文时,就将它的邻居设置为 Attempt 状态。

Init:一台路由器收到了其他路由器发送的 Hello 报文,但是在 Hello 中的邻居列表中没有看到自己的 Router ID。

2-way:一台路由器收到了其他路由器发送的 Hello 报文,并且在 Hello 中的邻居列表中已经看到自己的Router ID。这是状态机的第二个稳定状态。

ExStart:一台路由器和它的邻居在这个状态协商主从关系,并且由 Master 路由器决定 DD 交换的序列号。

Exchange:在这个状态时,路由器邻居之间交换 DD 报文。

Loading:路由器比较 DD 报文和 LSDB,如果发现 DD 存在 LSDB 中不具有的 LSA,向邻居发送 LSU 请求 LSA。

Full:在这个状态,路由器结束更新自己的 LSDB,具有完整的 LSDB。这是状态的第三个稳定状态。

这些状态机中,只有 Down、2-way 和 Full 状态才是稳定的状态,其他状态都是瞬时的中间状态。正常情况下,DR/BDR 和 DRother 路由器的邻居状态应该稳定在 Full 状态,而DRother 路由器之间的邻居状态应该稳定在 2-way 状态

LSDB更新

当网络拓扑发生变化时,感知到变化的 OSPF 路由器会生成相应的 LSA 更新报文,发送到区域中。运行 OSPF 协议的路由器收到一条 LSA 更新报文的时候,
工作流程如下:
1) 系统会首先在 LSDB 中查找此条 LSA。如果不能查到,就认为是一条新的 LSA,加入LSDB。
2) 如果查到了此条 LSA,那么比较这条 LSA 的序列号。如果收到的新 LSA 序列号更大,那么认为这条 LSA 有了更新,将这条 LSA 的计时器进行刷新,同时更新序列号。
3) 如果收到的新 LSA 序列号等于或者小于 LSDB 中 LSA 的序列号,那么就认为收到的LSA 可能是由于网络拥塞或者重传的陈旧的 LSA,不会对 LSDB 的 LSA 做任何操作,并且将收到的 LSA 更新报文丢弃。

为了保证 LSDB 及时刷新,LSDB 里面的 LSA 都设定有老化时间,缺省为 1 小时。如果 1 个小时 LSA 没有被更新,LSA 将会老化同时被移除
缺省情况下,LSDB 每隔半个小时刷新一次所有的 LSA。此时,LSA 的序列号会加一,同时老化计时器会重置。


现链路状态发生变化,以组播方式(224.0.0.6),将 LSU 报文发送给其他路由器。组播地址 224.0.0.6 表示只有 DR 和 BDR 能够接收到这个报文。

DR,收到报文后,发送 LSAck 报文确认;同时使用组播地址 224.0.0.5, 将 LSU 报文发送给所有的 OSPF 路由器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值