梅利333

从无到有,自有至精

导航

OSPF开放式最短路径优先协议--基础(公有)

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

 

OSPFEIGRP进行对比

 

EIGRP                                  OSPF

Hello:5S                                hello 10

死亡:15s                              死亡40s

 

触发更新(增量更新)                   触发更新,增量更新+额外的周期更新30min

 

邻居关系                               邻居关系----邻接关系

 

三张表

邻居表                                 邻居表

拓扑表                                 链路状态数据库

路由表                                 路由表

 

区别于EIGRP的拓扑表,OSPF的链路状态数据库中保存的不只是最优路径,而是保存着所有可以到达目标网络的路径 ,可以这么说,运行了OSPF协议的路由器,是掌握了全部网络拓扑的,为什么这么说?有什么依据呢?

来看一下OSPF在更新的时候HELLO包中都包含哪些内容

 

Hello包: RID                     ///router id

          Hello\死亡时间           ///默认是10/40

          我的邻居信息           ///会把自己的邻居信息发出去,回答上面的问题

          Area id  自己的域号      ////区域号

          Router priority          ////路由器优先级

          DRBDR的接口IP地址   ///不同的接口角色

          认证密码                 ////OSPF 认证

          末节区域标识位

 

这里插播一条信息,在OSPFhello包中,有很多的信息可以导致后面的错误

1 hello时间和dead时间两侧不一致,neighbor关系起不来

 查看,show ip ospf inter x/x

 修改,(xx-if)#ip ospf hello-interval ?

       (xx-if)#ip ospf dead-interval ?

2 RID设置相同,邻居关系起不来

3 area id设置不相同,邻居关系起不来

4 认证密码不同,以及方式不同,邻居关系起不来

 

 

OSPF还引进了区域的概念 Area

Area 0 是骨干区域,其它区域都是常规区域,

而且常规区域必须和骨干区域直接相连

一个设备连接着多个不同的区域,那它的名字叫做区域边界路由器,ABR,

当然还有ASBR,这个在后面会进行讲解

 

Router priority 路由器优先级,默认为1 ,越大越好,最大到255

如果将接口优先级改为0的话,就是自愿当DROTHERS,不参与角色选举

 

DR\BDR\DROTHERS分别是什么?

它们都是接口的角色,切记,这不是设备角色

想要了解清楚这三个角色,就要先知道OSPF所运行的网络类型有哪些

 

 

OSPF运行的网络类型(只说一下我们还用的)   1 广播型

                                            2 点对点

 

只有在广播型的网络中才会进行选择DR\BDR

为什么要选择这些角色呢?

 

如图

 

 

 

在一个广播型的网络中,所有设备运行了OSPF之后,他们之间是互为邻居,什么叫互为邻居呢?

R1的邻居是R2.R3.R4

R2的邻居是R1.R3.R4

R3的邻居是R1.R2.R4

R4的邻居是R1.R2.R3

假设,此时,R1发现了下更新,给自己的邻居,那么当R2收到之后,同样也会转发给自己的邻居,R3-R4,R3收到之后,也会做同样的事情,这样一来,就造成了重复更新(这将毫无意义),这样会浪费带宽,消耗设备。

 

针对这一现象,OSPF研发出角色的概念,根据给不同的端口定义不同的角色,从而限制这一情况的发生

选举DR(大哥)/BDR(二哥,大哥的备份)/DROTHERS(小弟)

 规则: 1 路由器优先级,越大越优<0-255>默认为1

        2 RID越大越优,RID,以IP地址的形式显示

 

RID: router id,是运行OSPF协议之后对设备的一个标识,可以自动选举,也可以手动配置,

 自动:如果有loopback接口的,就用loopback接口中最大的IP做为RID

       如果没有loopback接口,就用物理接口的最大IP做为RID

 手动:可以手动配置一些相对好记的IP地址,例如1.1.1.1 \1.1.1.2等,只要是后边好记就可以,只用于选举、好记,别无它用。

 

 

 

 

有了不同的接口角色,就要有不同的关系,

OSPF中,区别于EIGRP的单纯邻居关系,OSPF有两种关系

邻接关系

  DR/BDR<--------->DROTHERS

  又发hello包,也发更新LSA

邻居关系

  DROTHERS<-------->DROTHERS

  只发hello包,不发更新LSA

 

////LSA,OSPF路由协议中更新的内容(链路状态通告)

 

正因为有了不同的关系,所以需要不同的通讯方式来进行沟通

 1224.0.0.5  所有人都使用这个地址,进行接收更新(多用途)

 2224.0.0.6  DRBDR专用频道,(单用途)

小弟有更新,发送至224.0.0.6,(大哥专用频道),然后再由大哥通过224.0.0.5普通频道发布更新,所有人都可以进行学习。

 

 

一句话,不同的RID形成不同的角色,不同的角色促成不同的关系,不同的关系所发的内容有所不同。而这一切,只为了解决在OSPF广播类型的网络中所存在的问题(重复更新)

 

但是对于OSPF点对点网络类型中,就不牵扯这一角色的概念,因为只有两个点相连两台设备,不牵扯到选举,这样的话也加快了收敛的时间,大约10-20S

 

 

 

通过在接口修改网络类型,可以完成具体的配置

(config-if)#ip sopf network ?

                      Broadcast     广播

                      Point-to-point  点对点

 

 

OSPF在更新的时候,不像RIPEIGRP一样更新路由条目,而是更新链路状态数据库

 

来了解一下OSPF的更新机制是什么样的

1)Hello

2)DBD

3)LSR

4)LSU

5)LSACK

 

 

 

1--hello,

这个很简单,是建立和维持邻居关系用的

2-DBD

数据库描述信息,什么意思?

 

 

 假设图中的R1要给R2发送更新,而此时R11000条,而R2上有800条,

如果是RIP 的话,会将整个的路由表进行更新,这样一来,很占用带宽,OSPF是这样儿,OSPF先发一个DBD, 1000个路由条目的路由表的一个缩略图给R2看,

3-LSR

R2看完缩略图之后,和自己现有的进行对比,发现只需要其中的200个,就给R1发出一了个请求,“我只要这里面的200条”

4-LSU

这时R1根据R2发送过来的Rquest请求,发送200条实际的信息

5-LSACK

R2收到之后进行回复确认

 

需要注意一下,LSU更新的是LSA,

LSA是一个名字,LSU(update)是动词,  

 

OSPF的几种状态

DOWN--->init state ----->two--way------>exstart------>exchange------>loading---->full

关闭 ---->加载------>    邻居---------->准备交换---->正式交换------>读取----->邻接

 

 


OSPF配置

 

 

 R1,RID1.1.1.1,

R2,RID2.2.2.2,

R3,RID3.3.3.3,

R4,RID4.4.4.4,

全网运行OSPF ,

r1(config)#router ospf 2                            //OSPF进程号

r1(config-router)#router-id 1.1.1.1                   ///定义RID

r1(config-router)#network 10.0.0.0 0.0.0.255 area 0    //宣告网段和区域

r1(config-router)#network 20.0.0.0 0.0.0.255 area 0

 

r2(config)#router ospf 1     ///OSPF进程号,两端可以不一样,区别于EIGRP的自制系统号

r2(config-router)#router-id 2.2.2.2

r2(config-router)#network 10.0.0.0 0.0.0.255 area 0

r2(config-router)#network 30.0.0.0 0.0.0.255 area 0     //宣告网段和区域

 

当然,还有一种比较简洁的宣告方式(接口宣告)

 

r1(config)#router ospf 1         ///定进OSPF进程

r1(config)#inter range f0/0 - 1    ///选择相应的接口

r1(config-if-range)#ip ospf 1 area 0    //将接口宣告到OSPF,并定义区域

*Mar  1 00:13:36.343: %OSPF-5-ADJCHG: Process 2, Nbr 2.2.2.2 on FastEthernet0/0 from LOADING to FULL, Loading Done

 两端一旦宣告完相连的网段,就可以看到系统提示信息,(当然,这里的感觉没有eigrp,因为默认情况下要经过一系列的计算,谁是DR,谁是BDR,等等)

 

查看本设备的邻居,

#Show ip ospf neighbor

 

 

  RID     优先级  状态  刷新计时器  IP地址   本设备出口

 

state一栏,可以看到DR的信息,这说明什么问题呢?说明当前网络让于OSPF广播型网络,

现在咱们改一下网络模式,看下效果会是什么样的

 

r1(config)#inter range f0/0 - 1

r1(config-if-range)#ip ospf network point-to-point

 

 

 再查看一下OSPF的邻居表,发现DR的角色没有了,

那是肯定的,在点对点网络类型下,是不选举DR/BDR/DROTHERS

 

而且最主要的收敛速度要比广播型的要快很多

通常情况下,最为常用的也是这种点对点网络类型

 

查看OSPF路由表

Show ip route ospf

 

 

 查看链路状态数据库

 

 有时我们也常说OSPF是一个无私的协议,为啥这样说呢

看上图,不知道你有没有看到seq#,后面一大串数字 ,这是干啥用的?

其实你就可以把它理解为一个更新的计数器,每更新一次,就会在这个数上加1,

那这和无私有什么关系呢?

是这样,当路由器收到一个LSU的更新动作时,会把更新过来的序号和自己的进行对比

会出现两种情况 1 ,更新的比我的高,那么我会接受这个更新,同时将这个更新转发给我的邻居

                          2 ,更新的比我的低,那么我会放弃这个更新,并将我的更新发送给你(源更新方)

这种纯纯的奉献精神啊~

又可以联想到,说运行了OSPF设备,以自己为根向外扩散,以至于可以掌握全网的拓扑。

 

 补充命令

修改OSPF 接口优先级

 

 

  

意思就是可以通过修改优先级来决定接口的角色,同样还是适用于广播型的网络。这东西我们一般不去改,只要看RID就可以了,一目也然。

 

 

修改OSPF 接口的COST

R1(config-if)#ip ospf cost ?<1-65535>

COST越小越优,这和OSPFSPF算法有关。

 

COST=108÷带宽(bit

100m的带宽,换算成bit,是多少呢?

100m=10000Kbit,再加上三个0,就是bit

108次方,就是1后面加80

10000 0000

除以

10000 0000bit

=1COST=1

公式

10M=10

100M=1

1G=1

10G=1

再往上加,就都是1 了,

为什么要知道cost?因为在后期参志OSPF选路时,COST是一个很常用的参数。

 

 ---------------------------------------------------------------

CCIE成长之路 --- 梅利

 

posted on 2020-07-14 22:07  梅利333  阅读(687)  评论(0编辑  收藏  举报