第九天 链路状态路由协议-OSPF

OSPF

OSPF概念

  • 开放式最短路径优先OSPF(Open Shortest Path First)协议是IETF定义的一种基于链路状态的内部网关路由协议。[IGP]
  • RIP是一种基于距离矢量算法的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题,目前已逐渐被OSPF取代。

开放式最短路径优先(OSPF)

在这里插入图片描述

- 更新方式
1.周期更新
每30分钟以每条LSA周期性更新(错峰更新)
2.触发更新
只要是路由器上的LSA多了或者少了,都会告诉邻居来发生变化

动态路由基础:
1.距离矢量 RIP BGP EIGRP(思科)
	传递的是路由表 (路由器与路由器之间传递的是路由表)
	水平分割(路由防环机制)
2.链路状态 OSPF ISIS
  传递的是链路状态信息(LSA)

1.IGP 内部网关路由协议(局域网) RIP OSPF ISIS EIGRP
2.EGP 外部网关路由协议(广域网)BGP

  • OSPF是一种基于链路状态的路由协议,它从设计上就保证了无路由环路。OSPF支持区域的划分,区域内部的路由器使用SPF最短路径算法保证了区域内部的无环路。OSPF还利用区域间的连接规则保证了区域之间无路由环路。
  • OSPF支持触发更新,能够快速检测并通告自治系统内的拓扑变化。
  • OSPF可以解决网络扩容带来的问题。当网络上路由器越来越多,路由信息流量急剧增长的时候,OSPF可以将每个自治系统划分为多个区域,并限制每个区域的范围。OSPF这种分区域的特点,使得OSPF特别适用于大中型网络。OSPF可以提供认证功能。OSPF路由器之间的报文可以配置成必须经过认证才能进行交换。

OSPF原理介绍

在这里插入图片描述

  • OSPF要求每台运行OSPF的路由器都了解整个网络的链路状态信息,这样才能计算出到达目的地的最优路径。**OSPF的收敛过程由链路状态公告LSA(Link State Advertisement)泛洪开始,LSA中包含了路由器已知的接口IP地址、掩码、开销和网络类型等信息。**收到LSA的路由器都可以根据LSA提供的信息建立自己的链路状态数据库LSDB(Link State Database),并在LSDB的基础上使用SPF算法进行运算,建立起到达每个网络的最短路径树。最后,通过最短路径树得出到达目的网络的最优路由,并将其加入到IP路由表中。
  • LSA 链路状态信息 Link-state advertise

OSPF的五种报文

在这里插入图片描述

  • OSPF直接运行在IP协议之上,使用IP协议号89。
  • OSPF有五种报文类型,每种报文都使用相同的OSPF报文头。
    1. Hello报文:最常用的一种报文,用于发现、维护邻居关系。并在广播和NBMA(None-Broadcast Multi-Access)类型的网络中选举指定路由器DR(Designated Router)和备份指定路由器BDR(Backup Designated Router)。
    1. DD报文:两台路由器进行LSDB数据库同步时,用DD报文来描述自己的LSDB。DD报文的内容包括LSDB中每一条LSA的头部(LSA的头部可以唯一标识一条LSA)。LSA头部只占一条LSA的整个数据量的一小部分,所以,这样就可以减少路由器之间的协议报文流量。
    1. LSR报文:两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地LSDB所缺少的,这时需要发送LSR报文向对方请求缺少的LSA,LSR只包含了所需要的LSA的摘要信息。
    1. LSU报文:用来向对端路由器发送所需要的LSA。
    1. LSACK报文:用来对接收到的LSU报文进行确认。
两台路由器之间都会传输自己的LSA 是会互相发送的
两台路由器先传输谁的LSA是通过一个主从关系来的
这个主从关系是怎么选举的? 就是通过两台路由器先发送一个空的DD报文
两个DD报文发送出来的时候都是master,通过routeID来判断谁的优 越大越优

Hello
 建立邻居 互发hello包
 维系邻居 10S发送一次hello包 40内没有收到对方的hello包就会中断邻居
 建立好邻居后开始传送LSA信息通过以下报文传输

DD 
  数据库描述报文 把数据库中的所有信息进行描述 做个目录的意思
  由于LSA中的数据太大一下子传输不过来对于网络压力太大  
  所以 R1向R2 传输的是DD报文中各数据库中的目录信息
  R2收到这个目录信息后 然后比较自己的数据库查看缺少那些路由,只需要把自己缺 少的路由发过来就可以了
LSR
 链路状态请求报文
 R2去请求自己缺少的那一部分数据库的路由
LSU
 链路状态更新报文
 R1把数据更新给R2(更新的就是R2缺少的那部分路由)
LSACK
 最后R2给R1发送一个确认信息 告诉R1收到了R1发的路由信息

邻居状态机

在这里插入图片描述

 init:自己发送了hello包 并且收到了对方的Hello包才会变成init状态 
 稳定后会变成2-Way
2-Way 是不会传输报文的,不会传输LSA

ExStat 交换报文 和Exchange报文
再传输DD LSR LSU 的过程

传输完后 Loading 装载数据

然后最后ACK确认后变成Full状态
  • 邻居和邻接关系建立的过程如下:
    1. Down:这是邻居的初始状态,表示没有在邻居失效时间间隔内收到来自邻居路由器的Hello数据包。
    1. Attempt:此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为HelloInterval。如果RouterDeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。
    1. Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中,尚未与邻居建立双向通信关系。
    1. 2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。
    1. ExStart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文。主从关系是在此状态下形成的,初始DD序列号也是在此状态下决定的。在此状态下发送的DD报文不包含链路状态描述。
    1. Exchange:此状态下路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。
    1. Loading:相互发送LSR报文请求LSA,发送LSU报文通告LSA。
    1. Full:路由器的LSDB已经同步。

Router ID、邻居和邻接

在这里插入图片描述

router ID 
一般手动配置的话会使用环回口当作router ID
自动:配置的第一个IP地址作为routerID
  • Router ID是一个32位的值,它唯一标识了一个自治系统内的路由器,管理员可以为每台运行OSPF的路由器手动配置一个Router ID。如果未手动指定,设备会按照以下规则自动选举Router ID:如果设备存在多个逻辑接口地址,则路由器使用逻辑接口中最大的IP地址作为Router ID;如果没有配置逻辑接口,则路由器使用物理接口的最大IP地址作为Router ID。在为一台运行OSPF的路由器配置新的Router ID后,可以在路由器上通过重置OSPF进程来更新Router ID。通常建议手动配置Router ID,以防止Router ID因为接口地址的变化而改变。
  • 运行OSPF的路由器之间需要交换链路状态信息和路由信息,在交换这些信息之前路由器之间首先需要建立邻接关系。
  • 邻居(Neighbor):
  • OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文用于发现邻居。收到Hello报文的OSPF路由器会检查报文中所定义的一些参数,如果双方的参数一致,就会彼此形成邻居关系,状态到达2-way 即可称为建立了邻居关系。
  • 邻接(Adjacency):
    形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。只有当双方成功交换DD报文,并同步LSDB后,才形成真正意义上的邻接关系。
  • 本例中,RTA通过以太网连接了三个路由器,所以RTA有三个邻居,但不能说RTA有三邻接关系。

OSPF 支持的网络类型

在这里插入图片描述

  • OSPF定义了四种网络类型,分别是点到点网络,广播型网络,NBMA网络和点到多点网络。
  • 点到点网络是指只把两台路由器直接相连的网络。一个运行PPP的64K串行线路就是一个点到点网络的例子。
  • 广播型网络是指支持两台以上路由器,并且具有广播能力的网络。一个含有三台路由器的以太网就是一个广播型网络的例子。
    在这里插入图片描述
  • OSPF可以在不支持广播的多路访问网络上运行,此类网络包括在hub-spoke拓扑上运行的帧中继(FR)和异步传输模式(ATM)网络,这些网络的通信依赖于虚电路。OSPF定义了两种支持多路访问的网络类型:非广播多路访问网络(NBMA)和点到多点网络(Point To Multi-Points)。
  • NBMA:在NBMA网络上,OSPF模拟在广播型网络上的操作,但是每个路由器的邻居需要手动配置。NBMA方式要求网络中的路由器组成全连接。
  • P2MP:将整个网络看成是一组点到点网络。对于不能组成全连接的网络应当使用点到多点方式,例如只使用PVC的不完全连接的帧中继网络。

DR&BDR

在这里插入图片描述

接口状态机制
DR 指定路由器 只有1个 老大
BDR 备份指定路由器  只有1个  老二
Dother  多个  小弟

组播更新
OSPF的两个组播频道
224.0.0.5 所有人都会侦听这个组播
Hello 也会发送到这个组播里
 
小弟更新的时候会把数据发到这个组播里
224.0.0.6  只有老大老二侦听这个组播
 老大 老二再这个组播里
 老大收到这个组播后会发送给 224.0.0.5 这个组播里 
  • 每一个含有至少两个路由器的广播型网络和NBMA网络都有一个DR和BDR。
  • DR和BDR可以减少邻接关系的数量,从而减少链路状态信息以及路由信息的交换次数,这样可以节省带宽,降低对路由器处理能力的压力。一个既不是DR也不是BDR的路由器只与DR和BDR形成邻接关系并交换链路状态信息以及路由信息,这样就大大减少了大型广播型网络和NBMA网络中的邻接关系数量。在没有DR的广播网络上,邻接关系的数量可以根据公式n(n-1)/2计算出,n代表参与OSPF的路由器接口的数量。在本例中,所有路由器之间有6个邻接关系。当指定了DR后,所有的路由器都与DR建立起邻接关系,DR成为该广播网络上的中心点。
  • BDR在DR发生故障时接管业务,一个广播网络上所有路由器都必须同BDR建立邻接关系。本例中使用DR和BDR将邻接关系从6减少到了5,RTA和RTB都只需要同DR和BDR建立邻接关系,RTA和RTB之间建立的是邻居关系。
  • 此例中,邻接关系数量的减少效果并不明显。但是,当网络上部署了大量路由器时,比如100台,那么情况就大不一样了。

DR&BDR选举

在这里插入图片描述

DR BDR选举

先看Pri(优先级)   0-255  默认是1
再看rid(routerID)  越大越优先

当一台路由的接口宣告了OSPF以后 他的接口状态会从down变成wating(等待)
wating等待的时间为 hello包的 四倍时间  40S
再这40秒内如果没有人跟我PK 那我这个接口就会自动成为DR状态

每个广播域选一套DR BDR Dother
  • 在邻居发现完成之后,路由器会根据网段类型进行DR选举。在广播和NBMA网络上,路由器会根据参与选举的每个接口的优先级进行DR选举。优先级取值范围为0-255,值越高越优先。缺省情况下,接口优先级为1。如果一个接口优先级为0,那么该接口将不会参与DR或者BDR的选举。如果优先级相同时,则比较Router ID,值越大越优先被选举为DR。
  • 为了给DR做备份,每个广播和NBMA网络上还要选举一个BDR。BDR也会与网络上所有的路由器建立邻接关系。
  • 为了维护网络上邻接关系的稳定性,如果网络中已经存在DR和BDR,则新添加进该网络的路由器不会成为DR和BDR,不管该路由器的Router Priority是否最大。如果当前DR发生故障,则当前BDR自动成为新的DR,网络中重新选举BDR;如果当前BDR发生故障,则DR不变,重新选举BDR。这种选举机制的目的是为了保持邻接关系的稳定,使拓扑结构的改变对邻接关系的影响尽量小。

OSPF区域

在这里插入图片描述

OSPF区域
Area 0 骨干区域
其他为 非骨干区域

骨干区域必须和非骨干区域直连
非骨干区域和非骨干区域是不可以直连的

可以说路由器接口是属于那个区域的
但是不能说路由器是属于那个区域的

连接两个区域的路由器叫做 ABR


一个接口再OSPF里 一个接口再RIP里
这种路由器叫做asbr 自治系统边界路由器
abr和asbr都是ospf的角色

每个区域都维护一个独立的LSDB
  • OSPF支持将一组网段组合在一起,这样的一个组合称为一个区域。
  • 划分OSPF区域可以缩小路由器的LSDB规模,减少网络流量。
  • 区域内的详细拓扑信息不向其他区域发送,区域间传递的是抽象的路由信息,而不是详细的描述拓扑结构的链路状态信息。每个区域都有自己的LSDB,不同区域的LSDB是不同的。路由器会为每一个自己所连接到的区域维护一个单独的LSDB。由于详细链路状态信息不会被发布到区域以外,因此LSDB的规模大大缩小了。
  • Area 0为骨干区域,为了避免区域间路由环路,非骨干区域之间不允许直接相互发布路由信息。因此,每个区域都必须连接到骨干区域。

OSPF开销

在这里插入图片描述

ospf开销
路由传递方向上  入接口的累加就是他的cost值
ospf cost 20
带宽越大cost越小,这也就是ospf会选择带宽大的原因
cost也是越小越优

  • OSPF基于接口带宽计算开销,计算公式为:接口开销=带宽参考值÷带宽。带宽参考值可配置,缺省为100Mbit/s。以此,一个64kbit/s串口的开销为1562,一个E1接口(2.048 Mbit/s)的开销为48。
  • 命令bandwidth-reference可以用来调整带宽参考值,从而可以改变接口开销,带宽参考值越大,开销越准确。在支持10Gbit/s速率的情况下,推荐将带宽参考值提高到10000Mbit/s来分别为10 Gbit/s、1 Gbit/s和100Mbit/s的链路提供1、10和100的开销。注意,配置带宽参考值时,需要在整个OSPF网络中统一进行调整。
  • 另外,还可以通过ospf cost命令来手动为一个接口调整开销,开销值范围是1~65535,缺省值为1。

OSPF配置、命令

在这里插入图片描述

  • 在配置OSPF时,需要首先使能OSPF进程。
  • 命令ospf [process id]用来使能OSPF,在该命令中可以配置进程ID。如果没有配置进程ID,则使用1作为缺省进程ID。
  • 命令ospf [process id] [router-id ]既可以使能OSPF进程,还同时可以用于配置Router ID。在该命令中,router-id代表路由器的ID。
  • 命令network用于指定运行OSPF协议的接口,在该命令中需要指定一个反掩码。反掩码中,“0”表示此位必须严格匹配,“1”表示该地址可以为任意值。
  • 命令display ospf peer可以用于查看邻居相关的属性,包括区域、邻居的状态、邻接协商的主从状态以及DR和BDR情况。
wild card bits 通配符 (简单理解为 反掩码但是两者不是一个东西)

//创建OSPF 进程为100
[R1]ospf 100 router-id 1.1.1.1
[R1-ospf-100]area 0
//在区域下宣告
[R1-ospf-100-area-0.0.0.0]network 12.1.1.0 0.0.0.255

//也可以在接口模式下进行宣告,接口模式下优先于区域模式下 宣告
//在接口下宣告OSPF 前提是必须先创建一个ospf进程和 区域
[R1-GigabitEthernet0/0/0]ospf enable 100 area 0

//查看邻居表 表头是自己得信息,表里的内容是邻居的信息
[R1]display ospf peer brief 
//Area Id:这个邻居是通过那个区域学来的
//Interface:邻居是通过那个接口学过了的
//Neighbor id:邻居的routerID为多少

//查看路由表
[R1]display ip routing-table 
//做一个筛选 只查看ospf的路由表
[R1]dis ip routing-table protocol ospf

//OSPF的数据库表
[R1]display ospf lsdb

//查看接口的OSPF信息
[R1]dis ospf interface GigabitEthernet 0/0/0

//修改接口优先级
[R1-GigabitEthernet0/0/0]ospf dr-priority 254

//修改接口的cost值
//路由表中的cost值是通过路由器去的入接口计算出来的
//入接口就是路由条目传递的方向
[R1-LoopBack0]ospf cost 19

//Hello时间不一样 可以2-way 但是不能full 不能传路由

//查看ospf接口状态
[GW]display ospf interface Eth-Trunk 1.201
//Ospf选路通过cost来进行选路的,可以通过修改cost的方式改变ospf的路由选路
//修改cost的方式
[GW-Eth-Trunk1.201]ospf cost 2
//Cost的值计算方式是从入接口开始计算的

OSPF认证

在这里插入图片描述

  • OSPF支持简单认证及加密认证功能,加密认证对潜在的攻击行为有更强的防范性。OSPF认证可以配置在接口或区域上,配置接口认证方式的优先级高于区域认证方式。

  • 接口或区域上都可以运行ospf authentication-mode { simple [ [ plain ] | cipher ] | null } 命令来配置简单认证,参数simple表示使用明文传输密码,参数plain表示密码以明文形式存放在设备中,参数cipher表示密码以密文形式存放在设备中,参数null表示不认证。

  • 命令ospf authentication-mode { md5 | hmac-md5 } [ key-id { plain | [ cipher ] } ] 用于配置加密认证,MD5是一种保证链路认证安全的加密算法(具体配置已在举例中给出),参数key-id表示接口加密认证中的认证密钥ID,它必须与对端上的key-id一致。

  • terminal debugging

  • debugging ospf packet

  • 在启用认证功能之后,可以在终端上进行调试来查看认证过程。

  • debugging ospf packet命令用来指定调试OSPF报文,然后便可以查看认证过程,以确定认证配置是否成功。

OSPF实验

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值