静态路由及动态路由

1.路由器的简单介绍

路由器(Router)是一种负责寻径、转发的网络层设备, 它从网络中选取一条最佳的通信路径提供给客户。路由器可连接几个分开的网络,用过IP逻辑地址连接到一起。路由器通过路由表转发数据,路由表中记录着网络地址以及各地址之间距离的清单,路由器利用路由表清单选择最佳转发路径。路由器使用时间最少和路径最短的算法进行工作,用以保证当某条路径发生故障断开或者出现拥堵是仍能正常通信。通过端口的转换,路由器可以实现不同网段的网络间进行通信。

2.路由器的工作原理

1.静态路由

**静态路由的原理:**静态路由不同于动态路由,不会自动生成识别目标端的IP地址,需要网络管理员手动输入目标段的IP地址,通过ARP协议获得对端的MAC地址,从而建立连接,是单方的。
**静态路由器的优缺点:**静态路由器不会自动识别IP,配置比较简单,同时也严重缺乏灵活性,连接也是单方向的。

2.默认路由

**默认路由的原理:**默认路由本质上也是属于静态路由的,默认路由的一端固定连接大网的一个接口,当找不到目标网络的路由时,路由器会请求转发到默认路由接口。

3.浮点路由

**浮点路由的原理:**设置优先级,做备选路线,增加网络冗余性,以确保网络传送的安全可靠。

**浮点路由的优缺点:**浮动保证了网络传输的安全可靠性,保障了工作环境的良好运行,但是成本相对较高,配置和维护相对困难。

3.路由配置

1、静态路由配置
首先我们可以先进行常规操作

#undo terminal monitor 关闭弹窗

#进入用户视图更改命名

#interface +端口号 ,进入端口视图

#ip add +ip , 添加ip地址(如下图示例)
请添加图片描述
接下来我们要观察各路由的目标网段及下一跳的IP,然后给每台路由做设置。

#ip route-static +目标网段+子网掩码+下一跳IP

如图中所示,给两台路由都做好配置,就可实现跨网段信息交互了。

2、默认路由配置
同静态路由,先设置常规操作,方便后面配置

#进入用户视图更改命名

#interface +端口号 ,进入端口视图

#ip add +ip , 添加ip地址
请添加图片描述
下面的步骤就与静态路由稍有区别了。

同样,先观察每台路由的目标网段及下一跳IP

以图为示例

我们设置R1和R3为默认路由

#ip route-static 0.0.0.0 0.0.0.0 +下一跳IP

R2我们需要进行双向设置,既与R1通又与R3通,需要设置两次

#ip route-static +目标网段+子网掩码+下一跳IP (R1方向)

#ip route-static +目标网段+子网掩码+下一跳IP(R2方向)

3、浮动路由配置
先进行常规操作

#undo terminal monitor 关闭弹窗

#进入用户视图更改命名

#interface +端口号 ,进入端口视图

#ip add +ip , 添加ip地址(如下图示例)
请添加图片描述
第一步,先观察各路由的目标网段及下一跳IP,对R1和R2设置一个最优路径的配置。

这里我们需要设一个环回IP,用于测试

#int lookback0

#ip add +IP地址(如1.1.1.1 24)

后面的配置与静态路由相同。

第二步,设置备选路径,由R1,R3,R2构成

同样需要用到第一步设置的环回IP lookback0

对R2进行设置

#ip route-static 目标网段+子网掩码 +下一跳IP preference +优先级数(优先级数要比60大)

R1同理

#ip route-static 目标网段+子网掩码 +下一跳IP preference +优先级数(优先级数要比60大)

R3设置需要双向,不用再设优先级

#ip route-static 目标网段+子网掩码 +下一跳IP(R1方向)

#ip route-static 目标网段+子网掩码 +下一跳IP(R2方向)

最后我们可以用PC机和环回IP进行PING通,测试配置是否无误。

4.动态路由

1.动态路由概述
动态路由是与静态路由相对的一个概念,指路由器能够根据路由器之间的交换的特定路由信息自动地建立自己的路由表,并且能够根据链路和节点的变化适时地进行自动调整。当网络中节点或节点间的链路发生故障,或存在其它可用路由时,动态路由可以自行选择最佳的可用路由并继续转发报文。
动态路由协议:路由器之间用来交换信息的语言

2.动态路由特点
1.减少了网络管理
2.占用了网络带宽(少量,可忽略不计)

3.选择依据:度量值
跳数、带宽、时延、可靠性、成本、负载
路由器会通过度量值来确定最优路由路径

4.收敛
使所有路由器都到达一致状态的过程

5.动态路由协议分类
距离矢量路由协议
——依据从源网络到目标网络所经过的路由器的个数选择路由 - - RIP、IGIP(思科私有协议)
链路状态路由协议
——综合考虑从源网络到目标网络的各条路径的情况选择路由 - - OSPF、ISIS

一、RIP协议

1.概述:

RIP(Routing Information Protocol,路由信息协议)是一种内部网关协议(IGP),是一种动态路由选择协议,用于自治系统(AS)内的路由信息的传递。

RIP 被定义为距离矢量路由协议,而距离矢量路由协议的根本特征就是自己的路由表是完全从其它路由器学来的,并且将收到的路由条目一丝不变地放进自己的路由表,以供数据转发。正因为如此,对于路由是否正确,对于目标是否可达,RIP全然不知。

“距离”的定义 :
从一路由器到直接连接的网络的距离定义为 1。
从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1。

RIP 使用跳数作为 metric,跳数就是到达目标网络所需要经过的路由器个数,因为直连网络不需要经过任何路由器,所以直连网络的 metric 为 0。RIP 所支持网络的最大跳数为 15,也就是 metric 值最大为 15,一但大于 15,如 16,被 RIP 认为目标不可达,由此可见,RIP 并不适合大型网络

RIP协议的管理距离为120。当路由表中出现了多条目标网段、子网掩码相同的路由信息时,优先选择管理距离小的协议所生成的路由信息。

RIP协议一共有两个版本:
Version 1 有类路由协议,广播更新。(由于不支持VLSM,RIPV1已经被淘汰,以RIPv2为主
Version 2 无类路由协议,支持VLSM

RIP协议的三个要素:
(1)仅和相邻路由器交换信息。
(2)交换的信息是当前本路由器所知道的全部信息,即自己的路由表。RIP交换的是本路由器上完整的路由表。
(3)按固定的时间间隔交换路由信息,例如,每隔 30 秒

2.RIP协议工作原理及流程
RIP协议在整个工作流程中主要使用四个定时器:
更新定时器(Update timer):
当此定时器超时时,立即发送更新报文。(30s)
老化定时器(Age timer):
RIP设备如果在老化时间内没有收到邻居发来的路由更新报文,则认为该路由不可达。(180s)
垃圾收集定时器(Garbage-collect timer):
如果在垃圾收集时间内不可达路由没有收到来自同一邻居的更新,则该路由将被从RIP路由表中彻底删除。(240s)
抑制定时器(Suppress timer):
默认时长为180s,当RIP设备收到对端的路由更新,其cost为16,对应路由进入抑制状态,并启动抑制定时器。为了防止路由震荡,在抑制定时器超时之前,即使再收到对端路由cost小于16的更新,也不接受。当抑制定时器超时后,就重新允许接受对端发送的路由更新报文。

3.路由表的建立
路由器在刚刚开始工作时,只知道到直接连接的网络的距离(此距离定义为1)。路由表中也只有到直连网络的直连路由。
以后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息。
经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离和下一跳路由器的地址。
请添加图片描述
4.RIPv2认证功能
由于 RIP 没有邻居的概念,所以自己并不知道发出去的路由更新是不是有路由器收到,同样也不知道会被什么样的路由器收到,因为 RIP 的路由更新是明文的,网络中无论谁收到,都可以读取里面的信息,这就难免会有不怀好意者窃听 RIP 的路由信息。为了防止路由信息被非法窃取,RIP ver 2 可以相互认证,只有能够提供密码的路由器,才能够获得路由更新。而 RIP ver 1 是不支持认证的。RIP ver 2 可以支持明文与 MD5 认证。

路由器之间,当一方开启认证之后,另一方也同样需要开启认证,并且密码一致,才能读取路由信息。认证是基于接口配置的,密码使用 key chain 来定义,key chain中可以定义多个密码,每个密码都有一个序号,RIP ver 2 在认证时,只要双方最前面的一组密码相同,认证即可通过,双方密码序号不一定需要相同,key chain 名字也不需要相同,但在某些低版本 IOS 中,会要求双方的密码序号必须相同,才能认证成功,所以建议大家配置认证时,双方都配置相同的序号和密码。

5.RIP协议优缺点:

优点:
对于小型网络,RIP就所占带宽而言开销小,易于配置、管理和实现;
“好”消息传的快;

缺点:
(1)网络规模被限制,最大跳数为15跳
(2)使用“跳数”作为度量值,以跳数的多少比较路由路径的优劣。 RIP 选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
(3)收敛速度慢。当网络中出现拓扑变化时,需要较长的时间才会收敛。可能会导致网络中路由表信息不一致。
(4)路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。

6.RIP协议路由环路发生原理及处理方式
6.1 路由环路形成
请添加图片描述
如上图所示,当正常运行的网1突然不可达时,R1路由器将到网1的路由条目删除,但是还没来的及向 R2路由器进行更新。此时R2路由器更新计时器先超时,R2将自己的路由信息发送给R1,R1就从R2处又学习到了网1的路由信息,并且将距离设置成2。此时,R1 的路由表已经出现了错误,但路由器并不知道。

当R1的更新计时器超时后,R1又向R2发送自己的路由信息,R2用从R1路由表内学习到的路由信息将自己的到网1的路由信息进行覆盖,此时R2到网1的路由信息中,距离字段被改为3。

以此类推,在不断的路由更新中,到网1的距离会逐渐增加直至无穷大,同时R1与R2之间在到网1的路由信息上形成了路由环路。如果没有一定的措施去解决 的话,路由器将永远无法发现这个错误。

6.2路由环路的危害
路由环路会对网络造成严重影响,导致网络性能降低,甚至使网络瘫痪。
路由环路可能造成以下后果:
①环路内的路由器占用链路带宽来反复收发流量。
②路由器的 CPU 因不断循环数据包而不堪重负。
③路由器的 CPU 承担了无用的数据包转发工作,从而影响到网络收敛。
④路由更新可能会丢失或无法得到及时处理。这些状况可能会导致更多的路由环路,使情况进一步恶化。
⑤数据包可能丢失在“黑洞”中。

6.3路由环路解决方法
距离矢量路由环路的解决方法有如下五种:
1)最大跳计数(maximum metric),RIP允许跳计数最大可以达到15,任何需要经过16跳才能到达的网络都被认为是不可达的。解决了环路时跳数会增加到无限大的问题
2)水平分隔(split horizon),限制路由器不能按照接收信息的方向去将接收到的信息再发回去。
例:路由器从f1/0口收到去往Net1的路由信息,在发送更新时,不会将关于Net1的路由信息再从f1/0口发出去。
3)路由中毒(路由毒化)或毒性反转。路由毒化用于在发往其它路由器的路由更新中将路由标记为不可达。标记“不可达”的方法是将度量设置为最大值。对于 RIP,毒化路由的度量为 16。
毒性反转:R3发现10.4.0.0不可达,立刻向外发送毒化路由,告知R2该网段不可达。R2在收到毒化路由后,会根据毒性反转,立刻向R3发送一条毒化路由。确保 R3 不会轻易受到有关网络 10.4.0.0 的错误更新的影响。
请添加图片描述
4)抑制计时器
抑制计时器可用来防止定期更新消息错误地恢复某条可能已经发生故障的路由。抑制计时器指示路由器将那些可能会影响路由的更改保持一段特定的时间。如果确定某条路由为 down(不可用)或 possibly down(可能不可用),则在规定的时间段内,任何有关该路由的信息都将被忽略。这表示路由器将在一段足够长的时间内将路由标记为 unreachable(不可达),以便路由更新能够传递带有最新信息的路由表。
5)触发更新:路由器周期性发送更新,RIP是默认每隔30秒。 触发更新就是当检测到网络拓扑发生变动时,路由器会立即发送一个更新信息给邻居路由器,而不用等待更新计时器,并依次产生触发更新通知它们的邻居路由器,此过程就叫触发更新。

7.RIP 的配置
以R1配置为例:
router rip
version 2
no auto-summary
network 192.168.20.0
network 192.168.1.0
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

二、OSPF协议

1.OSPF概述
路由协议 OSPF 全称为 Open Shortest Path First,也就开放的最短路径优先协议,因为 OSPF 是由 IETF 开发的,它的使用不受任何厂商限制,所有人都可以使用,所以称为开放的,而最短路径优先(SPF)只OSPF的核心思想,其使用的算法是Dijkstra算法,最短路径优先并没有太多特殊的含义,并没有任何一个路由协议是最长路径优先的,所有协议,都会选最短的。

距离矢量路由协议的根本特征就是自己的路由表是完全从其它路由器学来的,并且将收到的路由条目一丝不变地放进自己的路由表,运行距离矢量路由协议的路由器之间交换的是路由表,距离矢量路由协议是没有大脑的,路由表从来不会自己计算,总是把别人的路由表拿来就用;而 OSPF 完全抛弃了这种不可靠的算法,OSPF是典型的链路状态路由协议,路由器之间交换的并不是路由表,而是链路状态,OSPF通过获得网络中所有的链路状态信息,从而计算出到达每个目标精确的网络路径。

OSPF 工作在单个 AS,是个绝对的内部网关路由协议(Interior Gateway Protocol, 即 IGP)。

OSPF 对网络没有跳数限制,支持 CIDR和VLSM,没有自动汇总功能,但可以手工在任意比特位汇总,并且手工汇总没有任何条件限制,可以汇总到任意掩码长度。

OSPF 并不会周期性更新路由表,而采用增量更新,即只在路由有变化时,才会发送更新,并且只发送有变化的路由信息;事实上,OSPF 是间接设置了周期性更新路由的规则,因为所有路由都是有刷新时间的,当达到刷新时间阀值时,该路由就会产生一次更新,默认时间为 1800 秒,即 30 分钟,所以 OSPF 路由的定期更新周期默认为 30 分钟。

OSPF 所有路由的管理距离(Ddministrative Distance)为 110,OSPF 只支持等价负载均衡。

OSPF 支持认证,并且支持明文和 MD5 认证;OSPF 不可以通过 Offset list 来改变路由的度量值( metric)。

2.OSPF协议相关术语

Router-ID:
唯一标识一个路由器
OSPF 路由器之间相互通告链路状态,如果路由器之间分不清谁是谁,没有办法确定各自的身份,那么通告的链路状态就是毫无意义的,所以必须给每一个 OSPF 路由器定义一个身份。这就是 Router-ID,并且 Router-ID 在网络中绝对不可以有重名,否则路由器收到的链路状态,就无法确定发起者的身份,也就无法通过链路状态信息确定网络位置,OSPF 路由器发出的链路状态都会写上自己的 Router-ID,可以理解为该链路状态的签名,不同路由器产生的链路状态,签名绝不会相同。
每一台 OSPF 路由器只有一个 Router-ID,Router-ID 使用 IP 地址的形式来表示,确定 Router-ID 的方法为:
★1 .手工指定 Router-ID。
★2 .路由器上活动 Loopback 接口中 IP 地址最大的,也就是数字最大的,如 C 类
地址优先于 B 类地址,一个非活动的接口的 IP 地址是不能被选为 Router-ID 的。
★3 .如果没有活动的 Loopback 接口,则选择活动物理接口 IP 地址最大的。

COST:
OSPF 使用接口的带宽来计算 度量值。计算方法:cost=100Mbit/接口带宽
如果路由器要经过两个接口才能到达目标网络,那么很显然,两个接口的 Cost值要累加起来,才算是到达目标网络的 Metric 值,所以 OSPF 路由器计算到达目标网络的 Metric 值,必须将沿途中所有接口的 Cost 值累加起来,在累加时,只计算出接口,不计算进接口。
OSPF 会自动计算接口上的 Cost 值,但也可以通过手工指定该接口的 Cost 值,手工指定的优先于自动计算的值。OSPF 计算的 Cost,同样是和接口带宽成反比,带宽越高,Cost 值越小。到达目标相同 Cost 值的路径,可以执行负载均衡,最多 6 条链路同时执行负载均衡。

链路状态(Link-State):
链路状态(LSA)就是 OSPF 接口上的描述信息,例如接口上的 IP 地址,子网掩码,网络类型,Cost 值等等,OSPF 路由器之间交换的并不是路由表,而是链路状态(LSA),OSPF 通过获得网络中所有的链路状态信息,从而计算出到达每个目标精确的网络路径。OSPF 路由器会将自己所有的链路状态毫不保留地全部发给邻居,邻居将收到的链路状态全部放入链路状态数据库(Link-State Database),邻居再发给自己的所有邻居,并且在传递过程种,绝对不会有任何更改。通过这样的过程,最终,网络中所有的 OSPF 路由器都拥有网络中所有的链路状态,并且所有路由器的链路状态应该能描绘出相同的网络拓朴。
与距离矢量路由不同,距离矢量路由中交换的是完整的路由表,这样如果有人恶意攻击的话,就能够知道整个网络拓扑结构。而链路状态路由则交换链路的状态,用户无法通过这个清晰的得知整个链路拓扑。

邻居(Neighbor):
在同一网络中都有接口的两台路由器,通过Hello包建立和维护邻居关系
OSPF 邻居靠发送 Hello 包来建立和维护,Hello 包会在启动了 OSPF 的接口上周期性发送,在不同的网络中,发送 Hello 包的间隔也会不同,当超过 4 倍的 Hello 时间,也就是 Dead 时间过后还没有收到邻居的 Hello 包,邻居关系将被断开。
两台 OSPF 路由器必须满足 4 个条件,才能形成 OSPF 邻居,4 个必备条件如下:
(1)Area-id(区域号码):即路由器之间必须配置在相同的 OSPF 区域,否则无法形成邻居。
(2)Hello 时间与 Dead 时间:即路由器之间的 Hello 时间和 Dead 时间必须一致,否则无法形成邻居。
(3)Authentication(认证):路由器之间必须配置相同的认证密码,如果密码不同,则无法形成邻居。
(4)Stub Area Flag(末节标签):路由器之间的末节标签必须一致,即处在相同的末节区域内,否则无法形成邻居

邻接:

邻接是一种特殊的邻居。他不仅可以通过hello包进行通信,还可以互相之间发送LSA。

OSPF 只有邻接关系之间才会交换 LSA,路由器会将链路状态数据库中所有的内容毫不保留地发给所有邻接,要想在 OSPF 路由器之间交换 LSA,必须先形成 OSPF 邻接关系。

DR/BDR
通过在多路访问网段中选择出一个核心路由器称为 DR(Designated Router),网段中所有的 OSPF 路由器都和 DR 互换 LSA。DR 就会拥有所有的 LSA,并且将所有的 LSA 转发给每一台路由器。

如果 DR 失效后,那么就会造成 LSA 的丢失与不完整,所以在多路访问网络中除了选举出 DR 之外,还会选举出一台路由器作为 DR 的备份,称为 BDR(Backup Designated Router),BDR 在 DR 不可用时,代替 DR 的工作

既不是 DR,也不是 BDR 的路由器称为Drother,Dother负责 和DR互换 LSA ,同时还会和 BDR互换 LSA。
注意:Drother之间不能互换数据,这是为了防止出现环路
请添加图片描述
DR/BDR选举规则:
DR 与 BDR 的选举是在一个二层网段内选举的,即在多个路由器互连的接口范围内,与 OSPF 区域没有任何关系,一个区域可能有多个多路访问网段,那么就会存在多个 DR 和 BDR,但一个多路访问网段,只能有一个 DR和 BDR;选举 DR 和 BDR 的规则为:
1、比较接口优先级:
选举优先级最高的成为 DR,优先级数字越大,表示优先级越高,被选为 DR 的几率就越大,次优先级的为 BDR,优先级范围是 0-255,默认为 1,优先级为 0 表示没有资格选举 DR 和 BDR。
2、Route-Id 大小:
如果在优先级都相同的情况下,Route-Id 最大的成为 DR,其次是 BDR,数字越大,被选为 DR 的几率就越大。
DR和Dorther处理数据报的区别:所有 OSPF 路由器,包括 DR 与 BDR,都能够接收和传递目标地址为224.0.0.5 的数据包。只有 DR 和 BDR 才能接收和传递目标地址为 224.0.0.6 的数据包。

OSPF网络类型
OSPF是一个在各方面都考虑比较周全的路由协议,也会因此将该协议变得更为复杂化,OSPF并不像RIP与EIGRP那样,RIP与EIGRP在运行时,并不考虑OSI模型在二层所定义的内容,即并不关心二层的链路介质类型,而OSPF在运行时,必须考虑链路层的类型,称为OSPF网络类型(Network Type),对于不同二层介质类型,OSPF将有不同的操作和运行过程,网络类型,可分为如下几种:
点到点(Point-To-Point)
点到多点(Point-To-Multipoint )
广播(Broadcast )
非广播(Non-Broadcast )
点到多点非广播(Point-To-Multipoint Non-Broadcast)

对于不同的网络类型,将会影响到 OSPF 的 Hello 时间与 Dead 时间,关系到 DR与 BDR 的选举与否,影响到 OSPF 邻居是自动建立还是手工建立,总结如下表:
请添加图片描述
OSPF 邻居的成功建立,并不要求双方网络类型一致,但双方网络类型不一致,将可能导致链路状态数据库中的条目无法进入路由表。

3.OSPF原理

OSPF的计算
OSPF 协议路由的计算过程可简单描述如下:
①每台 OSPF 路由器根据自己周围的网络拓扑结构生成 LSA(Link StateAdvertisement,链路状态通告),并通过更新报文将 LSA 发送给网络中的 其它 OSPF 路由器。
②每台 OSPF 路由器都会收集其它路由器通告的 LSA,所有的 LSA 放在一起 便组成了 LSDB(Link State Database,链路状态数据库)。LSA 是对路由 器周围网络拓扑结构的描述,LSDB 则是对整个自治系统的网络拓扑结构的 描述。
③OSPF 路由器将 LSDB 转换成一张带权的有向图,这张图便是对整个网络拓 扑结构的真实反映。各个路由器得到的有向图是完全相同的。
④每台路由器根据有向图,使用 SPF 算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。

4.OSPF启动过程

七种状态机:
请添加图片描述
路由器从启动OSPF进程,到根据链路状态数据库计算出路由表,同样需要经历一系列的启动过程,总共有8种可能的启动过程,但并不是一定会经历这8个过程,具体过程如下:
Down → Attempt → Init → Two-way → Exstart → Exchange → Loading → Full

①Down
路由器刚刚启动OSPF进程,还没有从任何路由器收到任何数据包,Hello包也没有收到,在此进程,可以向外发送Hello包,以试图发现邻居。

②Attempt
因为OSPF使用组播发送数据包,如使用组播发送Hello包,如果Hello包不能发出去被其它路由器收到,就不能和其它路由器建立OSPF邻居;在一些组播不能发送的网络中,例如帧中继这样的非广播网络环境,组播不能够传递,在这种情况下,就需要指定OSPF使用单播向邻居发送Hello包,以此试图和指定的邻居建立OSPF邻居关系,在此状态下,OSPF称为Attempt状态。

③Init
只是OSPF路由器一方收到了另一方的Hello,但并没有双方都交换Hello,也就是对方的Hello中还没有将自己列为邻居。

④Two-way
双方都已经交换了Hello信息,并且从Hello中看到对方已经将自己列为邻居,此状态,就表示OSPF邻居关系已经建立,并且如果是需要选举DR和BDR的话,也已经选举出来,但OSPF邻居之间并不一定就会交换LSA,如果不需要交换LSA,则永远停留在此状态,如果需要形成邻接并互相交换LSA,则状态继续往下进行。(比如Drother与Drother之间将永远停留在Two-way状态,因为Drother与Drother之间不需要交换LSA。)

⑤Exstart
因为在OSPF邻居之间交换完整的LSA之前,会先发送Database Description Packets (DBD),Link-state Request (LSR)等数据包,邻居之间是谁先发,谁后发,需要确定顺序,在Exstart状态,就是确定邻居之间的主从关系(Master—Slave关系),Router-ID数字大的为主路由器,另一端为从路由器,由主路由器先向从路由器发送信息。在选举DR与BDR的网络环境中,并不一定DR就是主路由器,BDR就是从路由器,因为DR和BDR可以通过调整接口优先级来控制,所以DR也许是因为优先级比BDR高,而Router-ID并不比BDR高。
注意:在任何网络环境下,OSPF在交换LSA之前,都需要确定主从关系。

⑥Exchange
就是交换Database Description Packets (DBD)的过程,DBD只是LSA的简单描述,只包含LSA的一些头部信息,收到DBD的路由器会和自己的链路状态数据库作对比,确定需要哪些LSA的完整信息,就会发送LSR请求给邻居。

⑦Loading
邻居根据收到的LSR(Link-State Request),向对方回复Link-state update(LSU)。

⑧Full
等到OSPF都收到了邻居回复的所有Link-state update(LSU),那么此时的数据库状态就变成了收敛状态,此状态就是Full状态,但此时只是数据库已经同步,但路由表却还在计算当中。
注意:除了Two-way和Full这两个状态,邻居停留在任何状态,都是不正常。

OSPF数据包交换过程
从OSPF建立邻居,到LSA的互换,到路由表的计算,需要经过一系列的数据包交换过程,过程如下:
Hello

Database Description Packets (DBD)

Link-state Request (LSR)

Link-state update(LSU)

LSDB

具体情况如下:

Hello
Hello包是用来建立和维护OSPF邻居的,要交换LSA,必须先通过Hello包建立OSPF邻居。

Database Description Packets (DBD)
邻居建立之后,并不会立刻就将自己链路状态数据库中所有的LSA全部发给邻居,而是将LSA的基本描述信息发给邻居,这就是Database Description Packets (DBD),是LSA的目录信息,相当于书的目录,邻居在看完DBD之后,就能知道哪些LSA是需要邻居发送给自己的。

Link-state Request (LSR)
邻居在看完发来的LSA描述信息(DBD)之后,就知道哪些LSA是需要邻居发送给自己的,自己就会向邻居发送LSA请求(LSR),告诉邻居自己需要哪些LSA。

Link-state update(LSU)
当邻居收到其它路由器发来的LSA请求(LSR)之后,就知道对方需要哪些LSA,然后根据LSR,将完整的LSA内容全部发给邻居,以供计算路由表。

LSDB
就是已经收到了所有需要邻居发给自己的LSA,这时的链路状态数据库已经达到收敛状态。

5.OSPF区域

1.区域划分

随着网络规模日益扩大,当一个大型网络中的路由器都运行 OSPF 路由协议时, 路由器数量的增多会导致LSDB 非常庞大,占用大量的存储空间,并使得运行 SPF 算法的复杂度增加,导致CPU 负担很重。

在网络规模增大之后,拓扑结构发生变化的概率也增大,网络会经常处于“振荡” 之中,造成网络中会有大量的OSPF 协议报文在传递,降低了网络的带宽利用率。更为严重的是,每一次变化都会导致网络中所有的路由器重新进行路由计算。

OSPF 协议通过将自治系统划分成不同的区域(Area)来解决上述问题。区域是从逻辑上将路由器划分为不同的组,每个组用区域号(Area ID)来标识。区域的边界是路由器,而不是链路。一个网段(链路)只能属于一个区域,或者说每个运行OSPF 的接口必须指明属于哪一个区域。如图 1所示
请添加图片描述
划分区域后,可以在区域边界路由器上进行路由聚合,以减少通告到其他区域的LSA 数量,还可以将网络拓扑变化带来的影响最小化。

2.路由器的类型

OSPF 路由器根据在 AS 中的不同位置,可以分为以下四类:
(1) 区域内路由器IR( Internal Router )
该类路由器的所有接口都属于同一个 OSPF 区域。
(2) 区域边界路由器 ABR ( Area Border Router )
该类路由器可以同时属于两个以上的区域,但其中一个必须是骨干区域(骨干区域的介绍请参见下一小节)。 ABR 用来连接骨干区域和非骨干区域,它与骨干区域 之间既可以是物理连接,也可以是逻辑上的连接
(3) 骨干路由器( Backbone Router )
该类路由器至少有一个接口属于骨干区域。因此,所有的 ABR 和位于 Area0 的内部路由器都是骨干路由器。
(4) 自治系统边界路由器 ASBR
与其他 AS 交换路由信息的路由器称为 ASBR 。 ASBR 并不一定位于 AS 的边界,它有可能是区域内路由器,也有可能是 ABR 。只要一台 OSPF 路由器引入了外部 路由的信息,它就成为 ASBR 。
请添加图片描述
3. 骨干区域与虚连接

OSPF 划分区域之后,并非所有的区域都是平等的关系。其中有一个区域是与众不同的,它的区域号(Area ID)是 0,通常被称为骨干区域。骨干区域负责区域之间的路由,非骨干区域之间的路由信息必须通过骨干区域来转发。对此,OSPF 有两个规定:

①所有非骨干区域必须与骨干区域保持连通;
②骨干区域自身也必须保持连通。

但在实际应用中,可能会因为各方面条件的限制,无法满足这个要求。这时可以通 过配置OSPF 虚连接(Virtual Link)予以解决。虚连接是指在两台 ABR 之间通过一个非骨干区域而建立的一条逻辑上的连接通道。它的两端必须是 ABR,而且必须在两端同时配置方可生效。为虚连接两端提供一条非骨干区域内部路由的区域称为传输区(Transit Area)

4.外部路由
OSPF 同其它路由协议一样,可以将其它外部协议的路由信息或其它 OSPF 进程的路由信息重分布进自己的域内,在路由表中的表示方法和OSPF自己的路由会有所不同,这样的路由在 OSPF 域内就是 OSPF 外部路由(External Route)。外部路由分为两类:

(1)O E2 :类型为 O E2 的外部路由,在该路由进入 OSPF 之前的 Metric 值为多少,进入 OSPF域后就不变。
(2)O E1:O E1 的路由在 OSPF 路由器上的 Metric值包含该路由进入 OSPF 域之前的 Metric 值,再加上在 OSPF 域内传递的 Metric 值。

OE2与OE1在路由条目上没有任何区别,只是对于路由的Metric值计算有区别;类型为OE2的外部路由,在该路由进入OSPF之前的Metric值为多少,进入OSPF域后,所有OSPF路由器看到关于该路由的Metric值全部相同,不会再为该路由增加任何Metric值,OE2默认Metric值为20。而OE1的路由在OSPF路由器上的Metric值包含该路由进入OSPF域之前的Metric值,再加上在OSPF域内传递的Metric值,也就是到达外部路由的Metric值为到达ASBR的Metric值再加上进入OSPF域之前的Metric值之和,不同OSPF路由器看到OE1的路由的Metric值可能会有不同

5.OSPF末节区域
路由增加,就意味着 LSA 的增加,有时,在一个末梢网络中,许多路由信息是多余的,并不需要通告进来,因为一个 OSPF 区域内的所有路由器都能够通过该区域的 ABR 去往其它 OSPF 区域或者 OSPF 以外的外部网络,一个区域的路由器只要知道去往 ABR,就能去往区域外的网络,因此可以过滤掉区域外的路由进入,这样的区域称为 OSPF 末节区域(Stub Area);一个末节区域的所有路由器虽然可以从 ABR 去往区域外的网络,但路由器上还是得有指向 ABR 的路由,所以末节区域的路由器只需要有默认路由,而不需要明细路由,即可与区域外的网络通信,根据末节区域过滤掉区域外的不同路由,可将末节区域分为如下四类:
Stub Area(末节区域)
Totally Stub Area(完全末节区域)
Not-so-Stubby Area(NSSA)
Totally Not-so-Stubby Area(Totally NSSA)
① Stub Area(末节区域)
在 Stub Area(末节区域)下,ABR 将过滤掉所有外部路由进入末节区域,同时,末节区域内的路由器也不可以将外部路由重分布进 OSPF 进程,即末节区域内的路由器不可以成为 ASBR,但其它 OSPF 区域的路由(Inter-Area Route)可以进入末节区域,由于没有去往外部网络的路由,所以 ABR 会自动向末节区域内发送一条指向自己的默认路由
②Totally Stub Area(完全末节区域)
在 Totally Stub Area(完全末节区域)下,ABR 将过滤掉所有外部路由和其它 OSPF区域的路由(Inter-Area Route)进入完全末节区域,同时,末节区域内的路由器也不可以将外部路由重分布进 OSPF 进程,即完全末节区域内的路由器不可以成为ASBR,由于没有去往外部网络的路由,所以 ABR 会自动向完全末节区域内发送一条指向自己的默认路由
③Not-so-Stubby Area(NSSA)
在 Not-so-Stubby Area(NSSA)下,ABR 将 过滤掉所有外部路由进入末节区域,同时也允许其它 OSPF 区域的路由(Inter-Area Route)进入 NSSA 区域,并且路由器还 可以将外部路由重分布进 OSPF 进程,即 NSSA 区域内的路由器可以成为 ASBR,由于自身可以将外部网络的路由重分布进 OSPF 进程,所以 ABR 不会自动向 NSSA 区域内发送一条指向自己的默认路由,但可以手工向 NSSA 域内发送默认路由,并且只可在 ABR 上发送默认路由
④ Totally Not-so-Stubby Area(Totally NSSA)
在 Totally Not-so-Stubby Area(Totally NSSA)下,ABR 将过滤掉所有外部路由和其它 OSPF 区域的路由(Inter-Area Route)进入 Totally NSSA 区域,但路由器可以将外部路由重分布进 OSPF 进程,即 Totally NSSA 区域内的路由器可以成为 ASBR,由于没有去往其它 OSPF 区域的路由,所以 ABR 会自动向 Totally NSSA 内发送一条指向自己的默认路由

注:
★在末节区域下,ABR 自动发出的默认路由,Metric 值默认为 1,可通过命令 area area-id default-cost cost 修改,默认路由除了默认的 Cost 值以外,还会累加真实接口的 Cost 值。
★骨干区域不能配置为任何末节区域。
★当将某个区域配置为末节区域后,则区域中所有路由器都必须配置为末节区域,因为配置为末节区域的路由器上所有接口发出的 Hello 包中都会有末节标签,所有如果对方没有末节标签,则不能成为邻居。

总结:
请添加图片描述
6.OSPF虚链路(Virtual Link)

因为OSPF采用了区域化的设计,并且区域也采用了Hub-Spoke的架构,所有区域中定义出一个核心,然后其它部分都与核心相连,OSPF的区域0就是所有区域的核心,称为BackBone 区域(骨干区域),而其它Normal 区域(常规区域)应该直接和骨干区域相连,常规区域只能和骨干区域交换LSA,常规区域与常规区域之间即使直连也无法互换LSA,但在某些情况下,某些常规区域无法与骨干区域直连,这时便无法得到其它区域的路由,因此,设计了将骨干区域的范围通过虚拟的方法进行扩展到相邻常规区域的位置,因而让不能直接与骨干区域相连的区域,最终可以与骨干区域直连,这种对骨干虚拟的扩展和拉伸就是OSPF虚链路(Virtual Link)能实现的;因为某些常规区域不能与骨干区域直连而只能与其它常规区域直连,所以OSPF虚链路(Virtual Link)通过将相邻的常规区域虚拟为骨干区域,从而让那些不能与骨干区域直连的常规区域也能获得其它OSPF区域的路由。与骨干区域相邻的常规区域被扩展后,该区域被称为Transit Area,理论上Transit Area不应该为末节区域;在扩展后,原本为常规区域的Transit Area,将变成骨干区域,所以路由将从Inter-Area Route转变为Intra-Area Route,路由表示形式也将从O IA改变为O的形式;在进行OSPF虚链路扩展时,是将Transit Area中与骨干区域直连的ABR和连接另一个常规区域的ABR相连,连接这两个ABR时,使用双方的Router-ID来连接。如下图:
请添加图片描述
在上图中,区域2只能与区域1直连,而无法与骨干区域直连,在这种情况下,由于常规区域与常规区域之间即使直连也无法互换LSA,所以R3虽然是ABR,但因为没有连接骨干区域,最后不可能将任何区域的LSA发进区域2,最终导致区域2无法外其它区域通信,在这种情况下,需要通过OSPF虚链路将骨干区域的范围扩展到相邻的区域1,如下图:
请添加图片描述
在进行OSPF虚链路扩展后,区域1被虚拟成了骨干区域,而这时的R3等同于连接骨干区域和区域2的ABR,所以可以将自己所有的LSA发进区域2。在扩展OSPF虚链路时,是通过连接R2(ABR)与R3(ABR)的Router-ID 来建立的。
因为OSPF虚链路(Virtual Link)能将骨干区域扩展到相邻的常规区域,从而将常规区域虚拟为骨干区域,所以在某些情况下,如公司合并,或者为了备份骨干区域,可能出现骨干区域被常规区域所隔离,如下图:
请添加图片描述
图中骨干区域被区域1分割为两部分,将使得骨干区域自己的路由无法相互传递,在使用OSPF虚链路后,可以将区域1也扩展为骨干区域,如下图:
请添加图片描述
在经过OSPF虚链路将区域1也扩展为骨干区域后,可见所有的区域都变成了骨干区域,从而使网络中骨干区域能够收到另外一边被分割的骨干区域的路由,并且最后骨干区域自己的路由都为Intra-Area Route,但Area 1与骨干区域的路由将仍然为O IA。

注意:OSPF虚链路必须是在两个拥有共同区域的ABR之间建立的,其中必须至少有一个ABR是连接骨干的。
OSPF虚链路被认为是骨干区域的一个接口,一条链路,也需要建立OSPF邻居,但在邻居建立之后,链路上是没有Hello包传递的。

7.OSPF认证
同RIP和EIGRP一样,出于安全考虑,OSPF也使用了认证,OSPF同时支持明文和MD5认证,在启用OSPF认证后,Hello包中将携带密码,双方Hello包中的密码必须相同,才能建立OSPF邻居关系,需要注意,空密码也是密码的一种。

当OSPF邻居的一方在接口上启用认证后,从该接口发出的Hello包中就会带有密码,双方的Hello包中拥有相同的密码时,邻居方可建立;一台OSPF路由器可能有多个OSPF接口,也可能多个接口在多个OSPF区域,只要在接口上输入OSPF认证的命令后,便表示开启了OSPF认证,可以在每个接口上一个一个启用,也可以一次性开启多个接口的认证,如果需要开启多个接口的认证功能,那么认证的命令就并非直接在接口上输入,而是到OSPF进程模式下输入,并且是对某个区域全局开启的,当在进程下对某个区域开启OSPF认证后,就表示在属于该区域的所有接口上开启了认证。所以,在进程下对区域配置认证,是快速配置多个接口认证的方法,与在多个接口上一个一个开启,没有本质区别。因为OSPF虚链路被认为是骨干区域的一个接口,一条链路,所以在OSPF进程下对骨干区域开启认证后,不仅表示开启了区域0下所有接口的认证,同时也开启了OSPF虚链路的认证,但OSPF虚链路在建立后,并没有Hello包的传递,所以认证在没有重置OSPF进程的情况下,是不会生效的。

8.OSPF汇总路由
在OSPF同区域内,LSA是绝对不允许以任何形式或任何手段更改的,但在一个区域与另一个区域之间,LSA可以被ABR修改后传递,从而得知,在同一个区域内,OSPF路由是不能被汇总的,而是当路由从一个区域被ABR转发到另外一个区域时,就可以执行路由汇总,并且汇总必须是在ABR上执行的,但该汇总不对OSPF外部路由生效;在将外部路由重分布进OSPF时,也可以执行路由汇总,此时的汇总必须在ASBR上配置。
为了防止路由黑洞,需要在执行路由汇总的路由器上将汇总由指向空接口(null0),在IOS 12.1(6)以后的版本,配置汇总后会自动产生指向空接口的路由,但在IOS 12.1(6)及以前的版本需要手工创建。
注意:OSPF RFC (1583)并没有规定一个区域适合多少台路由器,一个网段多少个邻居,或如何布署网络。

猜你喜欢

转载自blog.csdn.net/weixin_52776876/article/details/124689494