OSPF---开放式最短路径优先协议

OSPF—开放式最短路径优先协议:

为了尽量弥补RIP协议的缺陷,OSPF产生了。

  • 协议使用范围:IGP

  • 链路状态型协议—传递拓扑(ISA,链路状态通告)

  • 传递真实掩码信息—无类别路由协议

  • OSPF版本:

    • OSPFv1(实验阶段)
    • OSPFv2(IPv4)
    • OSPFv3(IPv6)
  • SPF算法

  • OSPF更新方式:

    • 仅有触发更新。
    • 周期链路状态刷新—30min
  • OSPF更新地址—组播

    • 224.0.0.5、224.0.0.6
  • OSPF开销值 = 参考带宽/实际带宽(参考带宽默认为100Mbps,小于1按照1算)

  • OSPF进行跨层封装—跨过传输层,基于IP协议进行封装。协议号89。

  • OSPF消耗路由器、链路等资源较多。

OSPF区域化结构:

  • 为了适应大中型网络环境,OSPF进行了结构化部署—区域划分

  • 单区域网络、多区域网络。

  • 区域划分的特点:

    • 区域内传递拓扑;区域间传递路由。

    • 区域划分基于路由器接口(单个路由器上有多个接口连接着不同的区域)。

    • 区域编号—32位、点分十进制。

      • 区域0—骨干区域。
      • 非骨干区域—非0区域。

      OSPF规定,整个网络拓扑呈星型,且中心区域为骨干区域。

    • 区域划分规则:

      • 所有的非骨干区域都必须和骨干区域直接相连—星型拓扑;
      • 骨干区域唯一。
  • 区域边界路由器—ABR

    • 同时有接口属于多个区域,且至少有一个接口属于骨干区域
    • 在骨干区域中至少存在一个活跃的邻居。
  • 区域划分的目的:

    • 限制ISA传输的范围;
    • 减少ISA的数量。

OSPF五种数据包类型:

在这里插入图片描述

  • Hello报文

    • 用来周期性发现、建立(状态机)、保活OSPF邻居关系
    • 时间:10s以组播方式发送一次hello报文,来确认邻居的存在。
    • 若在4倍周期的时间内仍然没有接收到邻居发送的hello报文,那么认为邻居不存在,dead time一般为40s(默认)。
    • Router-ID—RID
      • 全网唯一,标识路由器的身份。
      • 使用IP地址的表示形式。
  • DBD报文

    • 数据库描述报文
    • 包含了所有拓扑的目录信息
  • LSR报文

    • 链路状态请求报文
    • 请求获取未知的链路信息(LSA信息)
  • LSU报文

    • 链路状态更新报文
    • 携带有真正的LSA信息
  • LSAck报文

    • 链路状态确认报文

OSPF七种状态机:

在这里插入图片描述

  • down—关闭状态

    • 当设备A还未运行OSPF协议时,处于该状态;
    • 当设备A启动了OSPF协议时,发送hello报文,内含A的RID
  • init—初始化状态。

    • 当设备B接收到A发送的hello报文时,在B的表中可以看到设备A的状态机为init。即以B的视角而言,A的状态由down–>init
    • 若B要想接收hello报文,则B也启动OSPF并发送hello报文。此时以A的视角而言,B的状态由down–>init。
  • 2-way—双向通讯状态

    • A再次发送hello报文,内含B的RID。当B收到时,此时以B的视角而言,A的状态由init—>2-way
    • 此时,B也发送hello报文,内含A的RID,此时以A的视角而言,B的状态由init—>2-way。此时,A与B建立了邻居关系。
    • 该状态是邻居关系建立的标志
  • 条件匹配:匹配成功则进入下一个阶段,失败则停留在邻居关系

  • exstart—预启动状态

    • 若条件匹配成功,则A、B都进入该状态。
    • A会发送DBD报文给B,B也发送DBD报文给A。此时该报文没有任何信息,发送该报文的原因是A和B要进行主从关系选举。若A为主,那么A优先进入下一个阶段。且下一个报文由从B先发送。
    • 选举的依据是RID,谁大谁为主。
    • 该状态下的DBD报文未携带任何LSA信息。
    • 然后,由从发送DBD报文给主,内含ISA目录信息,当主接收到DBD报文时,会先找出它不知道的内容,然后向从发送LSR报文,询问未知的LSA;从接收到该报文时回复LSU,内含真实的LSA信息;主在接到LSU报文时,回复LSAck报文。
    • 以上过程是从A的角度来看的。实际上,上述过程是双向的,只是是由A先发送报文。
  • exchange—准交换

    • 从在发送了含有目录信息的DBD报文后,进入exchange状态;主在接收到从发送的DBD后会闪过exchange状态,然后进入loading状态。当从接收到主发送的含有目录信息的DBD报文时才进入loading状态。当A接收到完整的LSA信息时,进入full状态。
  • loading—加载状态

    • 邻居间使用LSR、LSU、LSAck来获取完整的拓扑信息。
  • full—转发状态

    • 拓扑信息交换完成后进入的状态— 邻接关系建立的标志

最后,将拓扑信息转化为路由信息。

条件匹配:
  • 匹配成功则进入下一个阶段,失败则停留在邻居关系。
  • 最长为40秒,如果40秒内没有接收到回复,则会认为自己就是DR。
  • 决定了给谁发送拓扑信息。这样拓扑信息就在某台路由器上集聚。
  • 三种角色(对于接口而言)
    • 指定路由器—DR(1个)
    • 备份指定路由器—BDR(1个)
    • 其它路由器—DRother
  • 注:
    • 在网络中,可以没有BDR,但是一定要有DR;
    • 一个路由器可以既是DR又是BDR。
  • 角色间关系
    • DR与BDR—邻接
    • DR与DRother—邻接
    • BDR与DRother—邻接
    • DRother与DRother—邻居
  • OSPF条件匹配的情况
    • 在以太网络中—必须进行条件匹配
    • 在点到点网络中—不需要进行条件匹配
  • 选举规则

​ 1.每一个运行OSPF的设备的每一个接口都有一个优先级:默认为1,范围:0~255,越大越优;

​ 2.若优先级相同,则比较RID,越大越优;

  • 选举范围
  • 一个广播域内,进行一次条件匹配。

下图中会选出几个DR?

在这里插入图片描述

对于R4而言,它连接着两个广播域,故它要与左边和右边的广播域进行条件匹配选出DR,故会选出两个DR。

  • 条件匹配属于非抢占模式—一旦选举成功,就**不会因为新加入的设备而重新选举。**该新加入的设备自动变为DRother。

OSPF工作过程:

  • OSPF启动后,路由器A向本地所有启动了OSPF协议的直连接口,使用组播地址224.0.0.5发送hello报文,
    • 该hello报文内全域唯一的RID。
  • 当对端路由器B接收到该报文后,也会回复hello报文。
    • 该hello报文中携带A的RID值。
  • 此时,A与B建立邻居关系,并生成邻居表
  • 邻居关系建立后,邻居之间进行条件匹配,匹配失败则停留在邻居关系仅使用hello报文保活。
    • 若匹配成功,则可以开始建立邻接关系。
  • 邻接间共享DBD报文,将本地与邻接之间的DBD报文进行对比,查找本地没有的LSA信息,之后使用LSR来请求对端使用LSU回复具体的LSA信息,之后本地使用LSAck报文进行确认。
    • 该过程全部完成后,生成数据库表(LSDB)。
  • 之后,本地基于数据库表,启用SPF算法,计算到达所有未知网段的最短路径,然后将其加载到本地的OSPF路由表中。并将OSPF路由表中的部分路由加载到本地的全局路由表中。此时,路由器完成了路由收敛工作。
  • 最后,使用hello报文进行周期保活,并且每30min进行一次链路状态刷新。

OSPF基本配置:

在这里插入图片描述

1.启动OSPF协议,配置进程号,手工配置RID值(如果不配置,则设备主动生成,且优先使用环回接口最大IP,然后是物理接口最大IP):

[r1]ospf 1 router-id 1.1.1.1

2.配置区域:

[r1-ospf-1]area 0   //单区域OSPF网络的区域号必须配置为骨干区域

3.宣告:激活接口,发布拓扑或路由:

  • 宣告网段并使用反掩码
[r1-ospf-1-area-0.0.0.0]network 1.1.1.0 0.0.0.255(该方式可以同时激活多个接口)

反掩码(0和1的意义与掩码相反,0代表对应位不可变;1代表对应位可变): 32位二进制,使用点分十进制,由连续的0和连续的1组成。

RIP强制宣告的网段必须是主类网段,但是OSPF没有这方面的限制

这种宣告方式的好处与汇总网段类似,可以一次性宣告多个网段。

  • 接口宣告方式:精准宣告
[r1-ospf-1-area-0.0.0.0]network 12.0.0.1 0.0.0.0(此时仅会激活这一个接口而不会激活其它的接口)

以接口激活的方式在r2的12.0.0.2上配置后,出现了如下信息:
在这里插入图片描述

因为此时r1和r2两端的接口都已经激活了OSPF,所以两端开始发送hello报文以及其它的报文,两端路由器的状态机也开始变化。

  • OSPF邻居表:
[r2]display ospf peer         //查看ospf邻居表
[r2]display ospf peer brief   //查看ospf邻居简表

在这里插入图片描述

该表内记录了关于r2的邻居的详细信息,包括邻居的IP、RID以及DR和BDR信息。

但是,注意到r1和r2之间、r2和r3之间的DR和BDR关系:上表显示,r1是DR而r2是BDR。这和我们上面条件匹配的规则不符。因为优先级都是1,并且明显r2的RID比r1大,那么为什么DR不是r2呢?

因为OSPF的非抢占模式。由于我们在配置时是先在r1上配置的,那么当r1在接口激活OSPF之后,他就会向r2发送hello报文。但是此时r2无法回复r1。所以r1认为邻居不存在,它就会认为自己就是DR。当r2启动了OSPF之后,正常向r1发送hello报文想要进行条件匹配,但是由于非抢占原则,所以r2直接就认为r1是DR。

  • OSPF数据库表:
[r2]display ospf lsdb          //查看ospf邻居简表
  • OSPF路由表:
[r2]display ospf routing       //查看OSPF路由表
[r2]display ip routing-table protocol ospf  //在全局路由表中查看ospf路由项

在这里插入图片描述

因为ospf开销值是参考带宽/实际带宽,且不满1的按1来算。而参考带宽为100,此处的实际带宽为1000,故对于r3而言,目标1.1.1.1的开销值就是100/1000 + 100/1000 = 2.

  • 重置OSPF进程:
<r2>reset ospf process 1

在r2上重置OSPF进程后,r2和r3之间的DR、BDR关系又重新符合了条件匹配的规则。
在这里插入图片描述

OSPF扩展配置:

在这里插入图片描述

若A想要到达目标网段2.0,明显下面的路径更佳。但是以OSPF的默认参考带宽为100M而言,上下两条路径的cost都为2。那么就无法区分哪条路径更优了。

修改OSPF默认参考带宽:
[r1]ospf 1
[r1-ospf-1]bandwidth-reference 10000    //修改参考带宽为10000

在这里插入图片描述

那么此时R1和R2的参考带宽不同,所以也要在R2上修改:

[r2-ospf-1]bandwidth-reference 10000

此时,因为参考带宽为10000,所以上图中,A走下面的cost = 10000 / 100 + 10000 / 1000 = 110. A走上面的cost =10000/100 + 10000 / 100 = 200。所以下面的cost较小。
在这里插入图片描述
如上图,假设RID为1.1.1.1的路由器性能较佳,那么无疑让它当DR是合适的。但是偏偏它的RID是全域最小的,那么按照条件匹配的规则,他就不会被选为DR。
在这里插入图片描述
在条件匹配时,先比较优先级,越大越优;再比较RID。优先级默认为1,那么如何修改优先级?

修改OSPF优先级(针对接口而言):
[r1]int g0/0/0
[r1-GigabitEthernet0/0/0]ospf dr-priority 10    //在接口修改优先级干涉条件匹配。
<r2>reset ospf 1 process   //在r2上重置ospf进程(非抢夺模式)

注意,因为DR和BDR的角色都是针对接口而言的,所以如果要修改优先级则必须进入到接口才可以。

并且,如果要重新进行条件匹配,则要在原来的DR上重置ospf进程才行。
在这里插入图片描述

  • 特殊优先级—‘0’

若一个接口的优先级被设为0,那么代表该接口放弃选举该接口永远都只能是DRother

手工汇总:

根据OSPF的特点,在区域内传递拓扑信息;在区域之间传递路由信息。所以,如果想要基于OSPF中进行手工汇总,那么则必须在多区域的网络中才可以。
在这里插入图片描述

上图配置完成后,查看r6的路由表:
在这里插入图片描述

那么,如果想要汇总,就可以对r4上的三个环回进行汇总。

思考,当r4向r5传递信息时,传递了本地直连的拓扑信息。那么当r5向r6传递信息时,由于该网络有两个区域,所以该信息中必将含有与r6不同区域的信息。又因为拓扑信息只能在同一区域内传输,所以r5向r6传递的信息中既有路由又有拓扑。

所以,对于r6而言,它是根据r5发来的关于r4上的几个环回的路由信息来学到这几个目标的。既然是路由信息,就可以汇总:

[r2]ospf 1
[r2-ospf-1]area 0
[r2-ospf-1-area-0.0.0.0]abr-summary 192.168.0.0 255.255.252.0
  • 必须在ABR上配置
  • 需要进入汇总的几个路由所在的区域。

然后再次查看r6的路由表,会发现被汇总的三条路由变为了一条
在这里插入图片描述

缺省路由:

对于一台设备,如果想要访问外网,那么对应的路由器上就必须要有关于外网的所有的完整的路由信息。但是如果一条一条的配置,那么太过麻烦,并且有时根本不知道外网的完整的路由信息。

解决这个问题的办法是,对于一个网络,它与一台名叫边界设备的设备相连接,并且该边界设备也与运营商相连。该边界设备上一般配置有一条静态缺省路由指向ISP,即如果遇到未知的目标统统发给ISP。

那么如何让除了边界设备的其它设备也具备一条指向ISP的缺省路由?

解决方法:由边界设备下发。

对于OSPF缺省路由的配置,一般都在边界设备上配置,且该设备一般是ABR。但是也有特殊情况的存在。

例如:我们以下图中的R4来模拟边界设备来下发缺省路由:
在这里插入图片描述

先配置ISP的0/0/0的IP,然后在R4上配置一条指向ISP的缺省路由:
在这里插入图片描述
然后让R4将该路由下发:
在这里插入图片描述
接着,查看R6的路由表,发现了这样一条路由:
在这里插入图片描述
在配置RIP缺省路由时,我们强调了**只有在边界设备本地存在一条指向ISP的缺省路由,下发才有意义。**如果本地没有缺省路由那么就无法下发。

但是,对于OSPF而言,它有两种模式:

  • 一种是与RIP相似的非强制性下发:
[r1-ospf-1]default-route-advertise    //非强制性下发

将边界设备R4上的那条缺省路由删去:
在这里插入图片描述
再次查看R6的路由表:
在这里插入图片描述
发现那条缺省路由不复存在。说明对于OSPF而言,在非强制性模式下,只有当边界路由器本地存在一条缺省路由时才可以下发。

  • 另一种是与RIP不同的强制性下发:

对于OSPF而言,如果本地的路由表中没有缺省路由,但是还想下发缺省路由,则可以强制性下发缺省路由:

[r1-ospf-1]default-route-advertise always   //强制性下发,不要求本地存在缺省路由

然后再次查看R6的路由表:
在这里插入图片描述

静默接口:

在这里插入图片描述

现在,在R3上激活OSPF协议,然后就会在0/0/1接口发送hello报文,但是PC无法运行OSPF,所以要将0/0/1配置为静默接口:

[r3-ospf-1]silent-interface GigabitEthernet 0/0/1

OSPF的静默接口与RIP有些类似。对于RIP而言,被配置为静默接口的接口还可以接收到RIP报文,并且如果接收到了RIP报文就变为正常的接口。

对于OSPF而言,如果将接口设置为静默接口,那么该接口不能够收不能发报文。

加快收敛:
  • 修改hello报文发送的时间间隔。
[r3-GigabitEthernet0/0/0]ospf timer hello ?

注:两端都要修改否则会导致邻居关系无法建立。

  • 修改接口优先级。
手工认证:
[r1-g 0/0/0]ospf authentication-mode ?      //默认没有认证
md5
null

[r1-g 0/0/0]ospf authentication-mode simple cipher 123456
[r1-g 0/0/0]ospf authentication-mode md5 1 cipher 123456
[r2-g 0/0/0ospf authentication-mode md5 1 cipher 123456    //在相邻接口也配置相同的密码

修改hello报文发送的时间间隔。

[r3-GigabitEthernet0/0/0]ospf timer hello ?

注:两端都要修改否则会导致邻居关系无法建立。

  • 修改接口优先级。
手工认证:
[r1-g 0/0/0]ospf authentication-mode ?      //默认没有认证
 md5 Use MD5 algorithm -----MD5认证
 null Use null authentication -----不认证----OSPF默认情况
 simple Simple authentication mode ------简单认证----明文认

[r1-g 0/0/0]ospf authentication-mode simple cipher 123456
[r1-g 0/0/0]ospf authentication-mode md5 1 cipher 123456
[r2-g 0/0/0ospf authentication-mode md5 1 cipher 123456    //在相邻接口也配置相同的密码
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值