【CCNP】第五章 动态路由协议-OSPF

OSPF,open shortest path first, 开放最短路径优先,
OSPF协议基于IP协议,协议号为89,紧跟EIGRP的88。
先前介绍的两款协议RIP和EIGRP同属于距离矢量型(DV型)路由协议,
OSPF则和前两款不同,属于链路状态型(LS)路由协议,更加侧重于链路状态的发送,而不单单是传递路由条目。 OSPF是当前企业现网环境中运用最广泛的一款协议!

第一节 OSPF的理论

1.OSPF的报文

1. Hello报文:用于建立和维护OSPF邻居关系,默认发送间隔10s (30s)
2. DBD报文:链路状态描述报文,简要描述链路状态信息
3. LSR报文:链路状态请求,用于请求链路状态的详细信息
4. LSU:链路状态更新,用于响应LSR
5. LSACK:用于对DBD和LSU的确认

2.OSPF的邻居:

OSPF通过Hello报文建立和维护邻居关系

默认情况下, ​ 在>=1.544M的链路上,Hello包间隔10s发送一次,Dead时间为40s; ​ 在<1.544M的链路上,30s发送一次,Dead时间为120s。

OSPF的Hello时间和Dead时间是可以进行修改的,语法:

Router(config)#interface eX/y
Router(config-if)#ip ospf hello-interval x # x为要修改的Hello时间间隔,范围1-65535,单位为s。
Router(config-if)#ip ospf dead-interval y # y为要修改的Dead时间间隔,范围1-65535,单位为s。

如果确需要修改Hello时间和Dead时间,还是建议保持原有的4倍关系会较为稳妥。同时需要注意的是,链路的两端如果有一端修改了Hello时间或Dead时间,另一端不做修改,原先建立好的邻居关系会Down掉。

3.OSPF的邻居状态机

  1. Down状态:OSPF进程刚刚开始时

  2. Init状态:OSPF进程初始化状态,在此状态下,本地的OSPF路由器已经向外发送了Hello报文,等待接收对端的Hello报文

  3. Two-way(2-way)状态:接收到了对端的Hello报文,判断是否与对端路由器继续发展邻居关系,该状态只会出现在广播网络(即E口、F口、G口链路组成的网络)中

  4. Exstart状态:选举主从关系,决定谁先发送OSPF报文(由主先进行发送,选举的依据是Router-id,一条链路上Router-ID大的为主,先进行发送。

  5. Exchange状态:双方依据Exstart状态选举的主从关系相互传递DBD报文。

  6. Loading状态:双方交换链路状态信息,此过程涉及LSR、LSU和LSAck三部分报文。

  7. Full状态:邻居建立成功。OSPF网络逐渐趋于稳定。

        为什么要判断一下是否发展邻居关系?

        防止在广播网络出现重复传递同一份LSA的情况。在此状态下发生的事件为DR/BDR的选举。


DR/BDR的选举

DR(Designated router):指定路由器
​
BDR(backup designated router):备份指定路由器

选举规则:

(1)比较优先级

优先级最高的路由器成为DR,次高的成为BDR

优先级值是基于接口的概念,且默认为1,可做修改:

Router(config)#interface eX/y
Router(config-if)#ip ospf priority z # 其中z为可修改的优先级值,范围为0。0代表不参与选举,255则为最大

(2)比较Router-ID

Router-ID最高的成为DR,次高的成为BDR。

Router-ID:就是对路由器的一个标识,表现形式为点分十进制,类似于IP地址

Router-ID的选举规则:

a.看有无经过手工指定,如果有手工指定的Router-id,则**优先选择手工指定的Router-ID**
​
b.如果没有手工指定,则看路由器是否配备环回口IP地址,如果有,则将**环回口IP地址作为Router-ID**。如果一台路由器具备**多个环回口地址**,则选举**环回口地址最大的作为OSPF的Router-ID**
​
c.如果该路由器也未能配备环回口,则优选双up物理接口中的最大的IP地址作为OSPF的Router-ID

        需要值得注意的是:

        DR/BDR的选举一旦完成,决定好了DR和BDR的归属,再去调整优先级想让新的设备成为DR,则不会生效,因为OSPF是一个较为稳定的协议,如果想要让设备之间进行DR/BDR的重新选举,则需要敲入命令:

Router#clear ip ospf process
    Reset ALL OSPF processes? [no]:yes # 一定要敲yes或者简写为y,默认行为为no。

DR、BDR、DRothers 之间的通信过程:

        DR、BDR监听224.0.0.6,DRothers向224.0.0.6发送。

发送LSA

        DRothers监听224.0.0.5,DR、BDR向224.0.0.5发送,

发送LSA

4.OSPF的区域及设计理念

        OSPF的设计是为了大型网络及超大型网络来使用的,因此为了节约设备的资源,OSPF将网络划分成了一个又一个的区域,每个区域内的设备只需要掌握本区域内的详细的链路状态信息即可。

        区域分为两大区域:骨干区域和非骨干区域

骨干区域:有且仅有一个,area 0
非骨干区域:除area 0以外的其它区域,范围1-4294967295

        OSPF的区域是基于接口的概念,所以一台路由器可能接口会属于不同的路由器

第二节 OSPF的基础配置

OSPF的基本配置:

Router(config)#router ospf Process-ID # 进程号范围1-65535,需要注意的是进程号本地可以存在多个,也就是说OSPF支持多进程。
Router(config-router)#router-id x.x.x.x # 强烈推荐手工指定Router-ID的配置,方便观察邻居关系和排错等;

接下来进入OSPF的宣告环节, 来理解一下宣告的意思:宣告,就是想不想让某个接口参与OSPF进程,若参与,则该接口就会运行OSPF路由协议,定期发送hello包,建立邻居等;不宣告就不参与,就不会与对端形成OSPF邻居了。


OSPF的宣告:

OSPF的宣告方式支持三种方式

1.不精确宣告(网段宣告,不太推荐)

Router(config)#router ospf Process-ID
Router(config-router)#network 192.168.1.0 0.0.0.255 area x

2.精确宣告(较为推荐)

Router(config)#router ospf Process-ID
Router(config-router)#network 192.168.1.1 0.0.0.0 area x

3.接口宣告(强烈推荐)

Router(config)#interface eX/y
Router(config-if)#ip ospf Process-ID area x
​

OSPF邻居建立的条件:

1.链路两端Hello/Dead Time必须保持一致
2.建立邻居的两个接口必须要处于同一区域中(一条链路上的两个接口必须同属于一个区域)
3.接口的掩码必须要相同
4.Router-ID必须唯一
5.接口两端的优先级不能都为0(只在广播网络中)
6.认证通过

OSPF的路由器角色:

1.DR/BDR、DRothers
2.ABR:区域边界路由器,一台OSPF路由器拥有多个区域时,称为ABR。
3.ASBR:自治系统边界路由器,一台路由器既运行了OSPF,又运行了其它路由协议。

OE1和OE2的区别:

它们代表的是外部路由1和外部路由2,它们的区别就在于是否加内部路由(度量花销)。默认是OE2就是不加内部路由,假设我的网络只有一个出口,那么使用OE1和OE2都一样;

A、如果有多个ASBR宣告一条到达同一外部AS的外部路由时候用只需要比较域外部开销,只需考虑外部开销更小就可以了,不需要考虑内部开销。所以优先选择OE2。

B、单出口(ASBR),计不计算域内开销已经没有意义,所以默认OE2。

C、如果我们只有一个出口那么OE2就能帮我们解决所有问题,如果我们有多个出口这时我们可以使用OE1,它能够让我们在做路由决策的时候变得更加精确。因此多出口,建议用OE1。


OSPF的重分发

        在重分发进OSPF的时候,需要加入关键词subnets,才可同时发布子网,否则只会发布主类网络。

Router(config)#router ospf 1
Router(config-router)#redistribute eigrp 1/rip subnets

        重分发进OSPF的路由默认类型均为OE2,且Metric值固定为20,无论后续传递多少台路由器,Metric值都保持不变。

        如果想要改变重分发进OSPF的路由类型,可在重分发时加入关键字“metric-type 1”,即可变为OE1形式

Router(config)#router ospf 1
Router(config-router)#redistribute eigrp 1/rip subnets metric-type 1

        如果重分发进OSPF的路由类型为OE1,则代表Metric值初始为20,后续可能会发生变化。

第三节 OSPF的LSA

OSPF的LSA

OSPF路由器之间相互传递的信息是链路状态信息(Link-State)

每台路由器都将链路状态信息存储在链路状态信息库里(Link-State-Database,LSDB),可以通过命令 #show ip ospf databse 查看。

OSPF对这些LS划分了很多种类。

【CCNP】第五章 动态路由协议-OSPF_第1张图片

一类LSA

Router Link Stats:

用于描述产生该LSA的路由器的链路状态信息。运行在同一区域内的每台OSPF路由器都会产生一条一类的LSA。所以一类LSA由多少条就可以表明当前区域内存在多少条设备。

Router#show ip ospf database router # 查看一类LSA详细信息

【CCNP】第五章 动态路由协议-OSPF_第2张图片

Link-State-ID:用于区分不同的链路状态信息
Advertising Router:表明本LS是哪台OSPF路由器通告的。
Number of Links:表明该LS下的详细链路数目信息
Link Connected to:链路连接的类型

链路链接类型

一共可以有4种类型:

(1)Transit Network(传输网络):拥有OSPF邻居的网络
    Link ID:DR的IP地址
    Link Data:始发该LSA的路由器的接口地址


(2)Point-to-Point(点到点网络):串口组成的链路
    Link ID:邻居路由器的Router-ID
    Link Data:始发该LSA的路由器的接口地址
P2P类型的链路必须要两个类型来描述,必须要Stub Network补充描述。

(3)Stub network link(末节网络):在OSPF进程中,但是没有OSPF邻居的链路
    Link ID:网络号
    Link Data:掩码
注意:环回口默认情况下掩码始终为32位。同时环回口网络类型始终为Stub Network

(4)Virtual-Link(虚链路):为了解决孤立区域的解决方案
    Link ID:邻居路由器的Router-ID
    Link Data:从哪个接口与该邻居路由器建立虚链路

二类LSA

Net Link States:网络LSA

只出现于MA(多路访问)网络中,用于对一类LSA补充说明,描述当前网络中存在多少台OSPF路由器,可以根据二类LSA来确定该MA网络中路由器的数量,从而完整的绘制出整个网络的拓扑图。

Router#show ip ospf database network # 查看二类LSA详细信息

【CCNP】第五章 动态路由协议-OSPF_第3张图片

Link State ID:表明DR的IP地址
Advertising Router:通告的路由器的Router-ID
Attached Router:本MA网络内路由器的Router-ID

三类LSA

Summary Net Link States:汇总LSA

三类LSA不传递LS,传递的而是其他区域的路由条目。

Router#show ip ospf database summary # 查看三类LSA

【CCNP】第五章 动态路由协议-OSPF_第4张图片

Link State ID:网络号
Network Mask:网络号的掩码
Advertising Router:下一跳路由器的Router-ID

通过三类LSA收到的路由代码点都是OIA域间路由

【CCNP】第五章 动态路由协议-OSPF_第5张图片

四类LSA

Summary ASB Link States:

用于通告OSPF网络中ASBR的位置,此LSA由ABR产生。

由于五类LSA在传递重分发进OSPF的路由的时候字ADv Router字段值不变,同时非ASBR区域不知道ASBR的具体位置在哪,因此四类LSA需要作为五类LSA的一个补充说明。

Router#show ip ospf database asbr-summary

【CCNP】第五章 动态路由协议-OSPF_第6张图片

Link State ID:ASBR路由器的Router-ID
Advertising Router:通告该LSA的路由器的Router-ID

五类LSA

Type-5 AS External Link States:

用于传递重分发进OSPF的路由,由ASBR产生。

七类LSA

NSSA区域专用的LSA,与五类LSA相同。

第四节 OSPF的Metric值

OSPF的Metric值

的值所有路由入接口值的累加

开销当前链路的带宽

其中,分母100M是可以进行修改的

Router(config)#router ospf 1
Router(config-router)# auto-cost reference-bandwidth x # 单位Mbps

常见的链路类型由E口链路(以太网链路),F口链路(快速以太网链路),G口链路(吉比特以太网链路),其链路带宽值及OSPF接口cost值计算如下表

接口名称 SERIAL ETHERNET FASTETHERNET GIGABITETHERNET
Bandwidth 1.544M(S) 10M(E) 100M(F) 1000M(G)
COST 64 10 1 1

第五节 OSPF的孤立区域的解决方法

OSPF在设计时因为设计缺陷或将来引入更多新的设备,导致非骨干区域的ABR没有直接连接到骨干区域中,而是连接到了其它的非骨干区域,这个区域就叫做孤立区域。

1.虚链路

虚链路是OSPF自带的解决孤立区域的方法,创建好的虚链路自动属于区域0,从而可以将之前被孤立的区域扩展到骨干区域中去。

虚链路的部署:

【CCNP】第五章 动态路由协议-OSPF_第7张图片

第一步,确认部署位置,如上图所示,Area 2 被 Area 1孤立。

        在该区域的两台ABR上(R2和R3,其中必须是一台设备可以连接到骨干区域,另一台设备连接到孤立区域)

第二步,部署虚链路

R2(config)#router ospf 1
R2(config-router)#area 1 virtual-link 3.3.3.3 # 对端路由器的Router-id R2建立虚链路的邻居是R3
​
R3(config)#router ospf 1
R3(config-router)#area 1 virtual-link 2.2.2.2 # 对端路由器的Router-id R3建立虚链路的邻居是R2

2.隧道

思路一致,在R2和R3之间建立隧道,在这个隧道中传递OSPF的信息。

R2:
R2(config)#int tun 0
R2(config-if)#ip add 172.16.0.1 255.255.255.0
R2(config-if)#tunnel source 23.1.1.2
R2(config-if)#tunnel destination 23.1.1.3
R2(config-if)#ip ospf 1 area 0  # 要将隧道接口宣告进区域0
​
R3:
R3(config)#int tun 0
R3(config)#ip add 172.16.0.2 255.255.255.0
R3(config)#tunnel source 23.1.1.3
R3(config)#tunnel destination 23.1.1.2
R3(config)#ip ospf 1 area 0 

3.重分发

可以不必执着与同一进程的OSPF,不如换一种路由协议?或者OSPF换一个进程号?

【CCNP】第五章 动态路由协议-OSPF_第8张图片

R3上做双向重分发,将OSPF进程1的路由重分发进OSPF进程2中,OSPF进程2的路由重分发进OSPF进程1中

R3:
R3(config)#router ospf 1
R3(config-router)#redisribute ospf 2 subnets (metric-type 1/2)
​
R3:
R3(config)#router ospf 2
R3(config-router)#redisribute ospf 1 subnets (metric-type 1/2)

OSPF的认证

OSPF既支持明文认证,也支持密文认证。

分为接口认证区域认证基于钥匙串的认证

接口认证:

1.明文认证

Router(config)#int e0/0
Router(config-if)# ip ospf authentication # 启用链路接口明文认证
Router(config-if)# ip ospf authentication-key cisco # 定义明文密钥

2.密文认证

Router(config)#int e0/0
Router(config-if)# ip ospf authentication message-digest # 启用链路接口密文认证
Router(config-if)# ip ospf message-digest-key 1 md5 cisco # 定义密文密钥

基于key-chain的认证:

Router(config)#key chain A
Router(config-keychain)#key 1
Router(config-keychain-key)#key-string cisco # 定义密钥
Router(config-keychain-key)#cryptographic-algorithm md5 #定义加密算法,如md5,或hmac384等
Router(config)#int e0/0
Router(config-if)#ip ospf authentication key-chain A # 接口下调用该钥匙串

区域认证:

需要注意的是,区域认证需要结合链路认证来使用的,同时,如果对一个区域内的某台设备启用了密文认证,则该区域内的所有设备都需要启动区域认证。区域认证又分为明文认证和密文认证。

1.区域明文认证的配置:

Router(config)# router ospf 1
Router(config-router)# area x authentication # 对区域x开启明文认证
Router(config)#interface eX/y
Router(config-if)# ip ospf authentication-key cisco # 区域认证需要结合链路认证使用

2.区域密文认证的配置:

Router(config)# router ospf 1
Router(config-router)# area x authentication message-digest # 对区域x开启密文认证
Router(config)#interface eX/y
Router(config-if)# ip ospf message-digest-key 1 md5 cisco # 区域认证需要结合链路认证使用。

虚链路认证:

虚链路也是可以启用认证的,同样分为明文认证和密文认证

明文配置:

Router(config)#router ospf 1
Router(config-router)#area 1 virtual-link 3.3.3.3 authentication # 启用虚链路的明文认证
Router(config-router)#area 1 virtual-link 3.3.3.3 authentication-key cisco # 配置明文密钥

密文配置:

Router(config)#router ospf 1
Router(config-router)#area 1 virtual-link 3.3.3.3 authentication message-digest # 启用虚链路的密文认证
Router(config-router)#area 1 virtual-link 3.3.3.3 message-digest-key 1 md5 cisco # 配置密文密钥

OSPF的网络类型

Broadcast:广播,以太网。支持广播和组播。需要DR Hello包间隔时间10s,通过组播发现邻居
​
Point-to-Point:点到点,串行链路,支持广播和组播。不需要DR,Hello包间隔时间10s,通过组播发现邻居
​
NBMA:非广播多路访问,帧中继。不支持广播和组播。需要DR Hello包间隔时间30s,能依靠单播发现邻居
​
Point-to-multi-point:点到多点,帧中继。支持广播和组播。不需要DR Hello包间隔时间30s,通过组播发现邻居

网络类型:

广播和组播 邻居发现 DR/BDR HELLO时间
Broadcast 支持 组播 需要 10
Point-To-Point 支持 组播 不需要 10
NBMA 不支持 单播 需要 30
P2MP 支持 组播 不需要 30

不同网络类型是否可以建立邻居和传递路由:

建立邻居 传递路由
Broadcast — P2P ×
Broadcast - NBMA × ×
Broadcast - P2MP × ×
P2P — NBMA × ×
P2P — P2MP × ×
NBMA -P2MP × ×

第六节 OSPF的末节区域

OSPF将末节区域分为4种类型:

(1)stub:末节区域

        当一个区域被配置为末节区域后,域外路由会消失,取而代之的是一条默认路由。

        连接到末节区域的ABR会将四五类LSA过滤,同时,自动生成一条默认路由下发给该末节区域。

        需要注意的是,如果将某一个区域内的一台设备置为Stub路由器,则需要将该区域内的其它设备同时置为Stub路由器,否则OSPF的邻居状态机会卡在Down状态,无法正常建立邻居关系。同时,有两个禁忌:

a.Area 0不能被配置为末节区域
b.存在ASBR的区域不能被配置为末节区域

配置语法:

Router(config)# router ospf process-id
Router(config-router)# area x stub # 将区域x置为末节区域

(2)Totally Sutb:完全末节区域

        在该区域中,ABR除了会将四五类LSA(域外路由)过滤之外,还会将三类LSA(域间路由)也过滤掉。

配置语法:

Router(config)# router ospf process-id
Router(config-router)# area x stub no-summary # 将区域x置为完全末节区域

(3)NSSA:Not-So-Stubby-Area:非纯末节区域

        由于传统的末节区域会将四五类LSA进行过滤,因此在重分发路由时,可以选用第二种解决方案:就是NSSA区域,NSSA区域依旧会过滤掉四五类LSA,只不过属于NSSA区域的ASBR会将域外路由(重分发进OSPF)的路由放入Type7-LSA中在NSSA区域中传递。

        当ABR收到了七类LSA后,同时ABR需要将该七类LSA发向正常区域时,会将该七类LSA重新变回五类LSA,在正常区域中传递。

配置语法:

Router(config)# router ospf process-id
                            Router(config-router)# area x nssa # 将区域x置为非纯末节区域
​

但会带来一个问题,NSSA区域的路由器会断网,原因是连接到NSSA区域的ABR不会自动下发默认,下发默认需要手动配置:

Router(config)# router ospf process-id
Router(config-router)# area 1 nssa default-information-originate  # 加上下发默认参数

(4)Totally NSSA:完全非纯末节区域

        Totally NSSA区域会将三四五类LSA都进行过滤,同时由ABR自动下放默认路由

配置语法:

Router(config)# router ospf process-id
Router(config-router)# area 1 nssa no-summary # 将区域x置为完全非纯末节区域

第七节 OSPF的被动接口

在OSPF中,如果某个接口被置为被动接口,则不会从该被动接口接收或者发送Hello报文。也就意味着邻居起不来,路由也就无法传递。

配置语法:

Router(config)# router ospf process-id
Router(config-router)# passive-interface e x/y # 将某一个接口设置为被动接口
Router(config-router)# passive-interface default # 将所有运行OSPF的接口都设置为被动接口

OSPF的下发默认

        OSPF只支持自带的下放默认:

Router(config)# router ospf process-id
Router(config-router)# default-information orginate # 将本地拥有的默认路由下发至OSPF网络中(前提是本地一定得有默认路由)
Router(config-router)#default-information originate always # 无论本地有没有默认路由,都会下放
​

OSPF的重分发只支持和别的动态路由协议之间重分发,不支持重分发静态。

你可能感兴趣的:(CCNP,网络)