天天看点

OSPF协议介绍

作者:运维法拉令

动态路由的分类

动态路由按工作区域分类可以分为两类:内部网关协议-IGP和外部网关协议EGP。

IGP-内部网关协议:RIP,OSPF,IS-IS

EGP-外部网关协议:BGP

动态路由按工作机制及算法来分可以分为两类:距离矢量路由协议和链路状态路由协议。

距离矢量路由协议:RIP

链路状态路由协议:OSPF,IS-IS

按区域分:

其实IGP也好EGP也好主要是自治域AS的概念。

AS自治域就是网络管理员自己能独立管理的网络就是自治域,如果是另一个网络你管理不了另一个网络就是另一个自治域。在自治域内部使用的协议就叫IGP,在两个自治域之间使用的协议就叫EGP。

按工作状态分:

距离矢量就是:有方向有距离的参数,假设三个路由器A,B,C。当A给C传一条路由,对于C来说路由是从左边传来的,C就知道了方向,距离就是A到C经历了几跳,C从A学到了两跳,两跳就是距离。距离矢量路由协议是不知道全网拓扑图的。

链路状态就是:两个路由器之间不是传路由信息,传递的是链路状态,传递路由器接口状态:带宽,网段,掩码等,传递路由器链路状态信息,每台设备之间都会去交互链路状态,然后进行路由计算就能得到路由。OSPF就是一种链路状态路由。

OSPF实现过程

1.建立邻居关系,传递自己的LSA 。目的:为了让所有的设备获取其他设备的LSA。

2.交互LSA,组建LSDB链路状态数据库。目的:服务后续的路由计算。

3.SPF算法计算拓扑。目的:根据LSA信息计算出全网的拓扑信息。

4.路由表。计算出来的最优路径加入路由表。

OSPF基础术语

1.router-ID

作用:标识这个设备的名字,在交互LSA中产生作用

如何产生:手动配置>最大ip的环回口>最大ip的物理口

2.度量值

作用:计算路径开销,用来选出路由

如何计算:cost=参考带宽/接口带宽(参考带宽默认是100Mbit/s),沿途路由器的出接口方向开销

3.区域

作用:减小路由表规模

如何实现:不同区域只传递路由,不传递LSA,普通区域只能和骨干区域相连,骨干区域属于区域0

路由器类型:

区域内路由器IR,所有接口都属于同一个ospf区域。

区域边界路由器ABR,路由器的接口同时属于两个以上的区域,至少有一个是骨

干区域。

骨干路由器BR,至少有一个接口属于骨干区域。

自制系统边界路由器ASBR,引入外部路由的路由器。

OSPF协议报文的类型

OSPF有五种类型的协议报文。这些报文在OSPF路由器之间交互中起不同的作用。

1.Hello报文:周期性发送,用来发现和维护OSPF邻居关系。

2.Database Description报文:描述本地LSDB的摘要信息,用于两台设备进行数据库同步。

3.Link State Request报文:用于向对方请求所需要的LSA。设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。

4.Link State Update报文:用于向对方发送其所需要的LSA。

5.Link State ACK报文:用来对收到的LSA进行确认。

OSPF三大表项

OSPF有三张重要的表项,OSPF邻居表、LSDB表和OSPF路由表。

1.OSPF邻居表:OSPF在传递链路状态信息之前,需先建立OSPF邻居关系,OSPF的邻居关系通过交互Hello报文建立,OSPF邻居表显示了OSPF路由器之间的邻居状态。

OSPF协议介绍

2.LSDB表:LSDB会保存自己产生的及从邻居收到的LSA信息,Type标识LSA的类型,AdvRouter标识发送LSA的路由器。

OSPF协议介绍

3.OSPF路由表:OSPF路由表和路由器路由表是两张不同的表项,OSPF路由表包含Destination、Cost和NextHop等指导转发的信息。

OSPF协议介绍

OSPF工作原理

ospf有两种重要的关系,邻居关系和邻接关系。

两台路由器直连,在双方互联接口上激活OSPF,路由器开始发送及侦听Hello报文。在通过Hello报文发现彼此后,这两台路由器便形成了邻居关系。

邻居关系的建立只是一个开始,后续会进行一系列的报文交互,例如前文提到的DD、LSR、LSU和LS ACK等。当两台路由器LSDB同步完成,并开始独立计算路由时,这两台路由器形成了邻接关系。

1.邻居关系的建立过程:

OSPF协议介绍

1.路由器R1状态为down,因为他还不知道他的邻居有谁,于是发送一个HELLO报文,报文内容是我是R1,我不知道有谁。

2.此时R2收到了一个表里之前没有的邻居,于是将邻居表R1状态为init(初始化),将R1的信息添加到邻居表内,然后给R1发送一条HELLO报文,说我是R2,我已经发现你了。

3.R1收到一条HELLO报文,发现里面有R2的信息,于是发现邻居R2,而且R2也知道R1的位置,所以将邻居表R2的状态设为2-WAY,R1这时也给R2发送一条HELLO报文,说我是R1,我也知道R2是我的邻居了。

4.R2收到HELLO报文,知道了R1发现了自己于是将邻居表中R1的状态设为2-WAY。

这样R1与R2 的邻居关系已经建立好了。HELLO报文是组播发送,目的地址是224.0.0.5,HELLO报文信息如下:

OSPF协议介绍

2.邻接关系建立过程:

OSPF协议介绍
OSPF协议介绍

当邻居关系建立完毕后,他们是不会传递LSA信息的 ,需要建立邻接关系,他们才会交换LSA信息。

选择主从,由于OSPF是基于IP的协议,IP是一种尽力而为的模型,他是不知道发送的信息对方有没有收到的,所以OSPF就用主路由器的序列号来保证DD交互的可靠性。

建立流程:

1.R1向R2发送空的DD报文,报文内容为空序列号为X,R1发送信息说我是主,我的Router-id是1.1.1.1。

2.R2向R1发送空的DD报文,报文内容为空序列号为Y,R2发送信息说我是主,我的Router-id是2.2.2.2。

3.R1接收到了R2的信息之后,由于,R2的Router-id大,于是选举R2为主路由器,序列号用Y,发送DD报文LSDB里面的LSA信息摘要。

4.R2接收到了R1的LSDB中的LSA摘要后,也发送一个DD报文序列号为Y+1发送自己的LSDB中的LSA摘要。

到这里R1和R2都知道了对方LSDB中的内容了。

5.然后R1去请求一个自己没有的LSA详细信息,因为之前发的是摘要信息,发送LSR报文请求完整LSA信息。

6.R2收到之后将R1请求的LSA 信息详细发送LSU报文给R1。

7.R1收到R2发来的LSU报文之后,给R2回复一个LSACK报文,确认我已经收到了LSA信息。

这样邻接关系也建立好了。报文信息如下(随便抓了个包,没有对应关系):

OSPF协议介绍

其实建立邻接关系可以举个例子:

1.小明和小龙互相说:小明说我做了数学,英语。小龙说我做了英语,语文。这就是DD报文里的LSDB的LSA摘要信息。

2.然后小明说:语文借我看看,这就是LSR报文,请求LSDB中LSA详细信息

3.小龙将语文作业给小明,就是LSU报文,将LSA信息发送。

4.小明收到后和小龙说好嘞谢谢你,就相当与LSA CK报文,确认我已经收到了对方给我的东西。

DR与BDR

DR指定路由器,BDR备用指定路由器,在一个广播域里只能有一个DR/BDR,其他路由器都为drother非指定路由器。

作用:减少同一个广播域彼此之间LSA重复发送。

选举范围:一个广播域内,选举出DR/BDR。

选举规则(基于接口):接口的优先级越大越优先,0-255。优先级相等,RID大的优先,优先级为0时退出选举。

选举阶段:2-way状态后,在40S内把结果通过hello报文里面DR/BDR字段同步。

注意:DR/BDR是非抢占机制,就算后面加进来的设备优先级再高,都不会抢占DR/BDR。想要强制,可以让DR的接口优先级设置为0退出选举。drother与drother之间是2-WAY状态。

如下拓扑图

R3为DR,R2,R4为drother:

OSPF协议介绍
OSPF协议介绍
OSPF协议介绍

继续阅读