OSPF开放式最短路径优先协议--基础(公有)
OSPF 开放式最短路径优先协议
OSPF和EIGRP进行对比
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 ////路由器优先级
DR和BDR的接口IP地址 ///不同的接口角色
认证密码 ////OSPF 认证
末节区域标识位
这里插播一条信息,在OSPF的hello包中,有很多的信息可以导致后面的错误
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路由协议中更新的内容(链路状态通告)
正因为有了不同的关系,所以需要不同的通讯方式来进行沟通
1,224.0.0.5 所有人都使用这个地址,进行接收更新(多用途)
2,224.0.0.6 DR、BDR专用频道,(单用途)
小弟有更新,发送至224.0.0.6,(大哥专用频道),然后再由大哥通过224.0.0.5普通频道发布更新,所有人都可以进行学习。
一句话,不同的RID形成不同的角色,不同的角色促成不同的关系,不同的关系所发的内容有所不同。而这一切,只为了解决在OSPF广播类型的网络中所存在的问题(重复更新)
但是对于OSPF点对点网络类型中,就不牵扯这一角色的概念,因为只有两个点相连两台设备,不牵扯到选举,这样的话也加快了收敛的时间,大约10-20S

通过在接口修改网络类型,可以完成具体的配置
(config-if)#ip sopf network ?
Broadcast 广播
Point-to-point 点对点
OSPF在更新的时候,不像RIP和EIGRP一样更新路由条目,而是更新链路状态数据库
来了解一下OSPF的更新机制是什么样的
1)Hello包
2)DBD
3)LSR
4)LSU
5)LSACK
1--hello,
这个很简单,是建立和维持邻居关系用的
2-DBD,
数据库描述信息,什么意思?

假设图中的R1要给R2发送更新,而此时R1有1000条,而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越小越优,这和OSPF的SPF算法有关。
COST=108÷带宽(bit)
如100m的带宽,换算成bit,是多少呢?
100m=10000Kbit,再加上三个0,就是bit
10的8次方,就是1后面加8个0
10000 0000
除以
10000 0000bit
=1,COST=1
公式
10M=10
100M=1
1G=1
10G=1
再往上加,就都是1 了,
为什么要知道cost?因为在后期参志OSPF选路时,COST是一个很常用的参数。
---------------------------------------------------------------
CCIE成长之路 --- 梅利
浙公网安备 33010602011771号