OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由。是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故运作于自治系统内部。著名的迪克斯加算法(Dijkstra)被用来计算最短路径树。OSPF分为OSPFv2和OSPFv3两个版本,其中OSPFv2用在IPv4网络,OSPFv3用在IPv6网络。OSPFv2是由RFC 2328定义的,OSPFv3是由RFC 5340定义的。与RIP相比,OSPF是链路状态协议,而RIP是距离矢量协议。
1.OSPF协议的基本原理:
RIP的缺点:存在最大跳数是15跳,无法应用在大型网络中;周期性的发送自己的全部的路由信息,浪费流量,收敛速度缓慢;本身的算法存在环路的可能性很大
OSPF的特别:采用组播更新的方式进行更新(224.0.0.5、224.0.0.6),增量更新(只发送别人没有的),以cost作为度量值,有效的避免了环路(在单区域中可以完全避免环路,但是在多区域中并不能完全避免环路)。
2.OSPF的表:
邻居表:记录了建立邻居关系的路由器
LSDB(链路状态数据库):包含了本路由器上的区域的所有的链路状态信息,并实时同步
路由表:经过SPF算法计算出的路由存放在OSPF路由表中
3.生成OSPF路由:
相同区域内的每一台路由器的LSDB是相同的,有LSDB得到带权的有向图,每台路由器以自己为根节点极端最小生成树
4.骨干区域和非骨干区域的划分:
为了减少路由器上LSDB的规模,骨干区域负责转发非骨干区域的之间的路由,骨干区域的区域号为0
OPSF划分区域的要求:
1.骨干区域必须是保持连通
2.非骨干区域必须与骨干区域连通(可以通过虚链接的方式实现非骨干区域与骨干区域不是物理上的连通)
5.OPSF路由器的类型:
区域内路由器(Internal Router)
区域边界路由器(ABR)
骨干路由器(BR)
自治系统边界路由器(ASBR)
一台路由器可以同时是ABR,BR和ASBR
6.OSPF的网络类型:
Router ID:是一个32bit的无符号整数,可以在一个自治系统中唯一标识一台路由器,可以自动生成,也可以手动配置。
自动生成Router ID:如果本设备上配置了loopback接口地址,则选择loopback接口地址最大的作为Router ID,如果没有配置loopback接口地址,则选择所有接口中ip地址最大的作为Router ID
网络类型有:Broadcast(广播网络:Ethernet)、NBMA(非广播多点可达:fr)、P2P(点对点网络:PPP)、P2MP(点对多点网络:没有链路默认是点对多点,可以通过修改)
7.OSPF报文和封装:
Hello报文:建立并维持邻居关系
DD报文:对LSDB内容的汇总(仅仅包含LSA摘要)
LSR报文:请求自己没有的或是比自己更新的链路状态信息(LSA)
LSU报文:链路状态更新信息
LSAck:对LSU报文的确认
封装格式:
链路层帧头
IP Header
OSPF Packet
链路层帧尾
8.邻居的建立和状态的迁移
邻居的建立和维持都是通过交互Hello报文来实现的
Broadcast网络中,NBMA网络中都需要进行DR和BDR的选举
DR/BDR的选举原则:首先比较hello报文中所携带的优先级,优先级大的成为DR,当优先级为0的时候则不会进行选举。
优先级一致的情况下,则比较Router ID,Router ID大的成为DR
保持稳定的原则:一旦网络中DR/BDR选举完成之后,就算出现优先级更高的路由器,也不会再重新选举。
邻居关系的建立过程
(1)RTA发送Hello报文
DR=0.0.0.0
Neighbors seen=0
RTB收到Hello报文之后,发现RTA这个邻居将自己的邻居表进行修改:
邻居ID
邻居地址
邻居状态
1.1.1.1
10.1.0.1
lint
接下来发送的Hello报文
DR=2.2.2.2
Neighbors seen=RTA
RTA收到RTB发送的Hello报文之后,将自己的邻居表进行修改:
邻居ID
邻居地址
邻居状态
2.2.2.2
10.1.0.2
2-way
接下来发送的Hello报文:
DR=2.2.2.2
Neighbors seen=RTB
RTB收到之后,将自己的邻居表里面的邻居状态修改为2-way
第一阶段完成
邻居建立第二阶段:
RTA发送DD报文,RTB接收到之后,对比自己的LSDB数据库,如果RTA发送的DD报文中的LSA摘要,自己这边都有,则状态立马进入Full,如果有没有的或是更新的,则RTB发送LSR请求自己没有的和比自己更新的LSA,RTA通过发送LSU报文对RTB进行更新,RTB收到LSU报文之后,更新完成状态进入Full,并且回复LSAck报文,RTA状态进入Full。
LSDB的更新,接收到一条LSA,如果这条LSA自己的LSDB中不存在,则直接进行更新,如果自己的LSDB数据库中存在,那么会与那一条LSA进行比较,留下LSA序列号更大的。
9.配置和优化OSPF
OSPF中的network命令是指定接口开启OSPF
OSPF优化命令,因为在P2P网络中不需要进行DR/BDR的选举,所以收敛速度大大加快,会将Broadcast的网络改为P2P
命令:ospf network-type p2p
也可以修改Hello报文的发送时间间隔(默认为2s)
命令:ospf time hello 2
当两端的OSPF的网络类型不同时,邻居关系能达到邻居关系能达到Full但是不能进行路由学习。
10.配置OSPF的接口的参考带宽:
bandwidth-refernce (缺省为100M cost为1)
cost=参考带宽/接口带宽
参考带宽最好根据实际情况修改为最大的(本设备上)接口带宽。
假设接口的cost值修改为上图所示,RTA上有一个100.1.1.1,当RTA把这个宣告进OSPF的时候,RTC收到这条路由之后,这条路由的cost=20+40=60(就是相当于,这条路由传递方向的进方向的接口带宽),例如:当RTC上有一条20.0.0.0/24的路由要传递给RTA的时候,此时这条路由到达RTA之后的cost=40(10+30)
OSPF cost计算标准:沿着路由传递方向累加进站口的cost
11.OSPF报文的定时器的默认值
网络类型
Hello定时器
邻居失效时间
Broadcast
10
40
P2P
10
40
NBMA
30
120
P2MP
30
120
12.配置OSPF引入外部缺省路由:
在公网与内网相接的设备上,做OSPF引入缺省路由,可以告诉内网的所有开启OSPF的设备,要想到达外网,可以通过本设备。
default-route-advertise
参数:always :当本机没有默认路由的时候,会产生一条缺省路由,发给其他邻居,但是本机上不会存在。
Cost:默认路由的度量值
13.OSPF高级特性:
OSPF虚链接:解决了骨干区域被分割的问题和非骨干区域和骨干区域无法连通的问题。
命令:在这两个区域的ABR上的中间区域中配置vlink-peer 对方的Router ID
LSA类型和路由选择:
LSA报文头的三个关键字:LS TYPE(LSA的类型)、Link state ID(链路状态ID,不同的LSA的链路状态ID不同)、Advertising Router(产生这条LSA的Router ID),这三个关键字唯一的标识了一条LSA。
常用的六类LSA:
LSA的类型
可以发送的角色
第一类LSA(Router LSA)
ALL Routers
第二类LSA(Network LSA)
DR
第三类LSA(Network Summary LSA)
ABR
第四类LSA(ASBR Summary LSA)
ABR
第五类LSA(AS External LSA)
ASBR
第七类LSA(NSSA External LSA)
ASBR
第一类LSA:所有的开启OSPD功能的路由器都会产生,描述的是自己直连网段的链路信息(链路类型、开销),将自己所有的直连链路的信息汇总成一条发布给本区域内的其他路由器,不可以跨区域传输。
第二类LSA:描述的是一个NBMA网络,或是一个Broadcast网路的所有的路由器以及掩码的信息,在区域内传播。如果一个单一区域,那么这个区域内可以只存在第一类LSA和第二类LSA。
第三类LSA:将所连接区域的链路信息以子网的形式,发送给相邻的区域,三类LSA的link State ID是目的网段。当从一个非骨干区域通过骨干区域传输到另一个非骨干区域的时候,会将Advertising Router修改为本区域的发送这条路由的ABR的Router ID
第五类LSA:描述到AS外部的信息,跨区域传输的时候,不会改变始发者。这样就可能会造成下一跳不可达,所以就通过第四类LSA来进行弥补。
第四类LSA:描述的是目标网络是ASBR的Router ID的LSA,始发者会随着区域间额传输而改变。
如果没有五类LSA则不会存在四类LSA,但是当有五类LSA的时候,也不一定存在四类LSA。
比如:
RTB上引入了一条外部路由,此时在RTA和RTC上并不存在目标网络是RTB 的 Router ID的四类LSA,因为RTA与RTC知道怎么到达RTB,并不会产生下一跳不可达的情况。
第五类LSA的两种外部路由:
第一类外部路由:cost=外部开销+内部开销(外部路由可靠性高)
第二类外部路由:cost=外部开销(外部开销默认为1)(外部路由可靠性低)都会默认为第二类外部路由
14.OSPF选路原则:
区域内路由、区域间路由、第一类外部路由、第二类外部路由
在类型相同的情况下在比较cost值。
15.引入外部路由时导致的问题及解决的办法
引入外部路由的时候,产生对应的五类LSA,Link State ID为目的网络,但是不会携带掩码的信息,所以当引入了两条目的网络一样但是掩码不一样的路由的时候,会认为是同一条LSA,导致路由学习错误。
当遇到这种情况的时候,ASBR会将这两条路由中的掩码大的那一条的LSA的Link State ID修改为子网的广播地址,来进行区分。
16.OSPF特殊区域:
Stub区域、Totally stub区域、NSSA区域
Stub区域:一般都是将边缘区域划分成Stub区域,在这个区域中不存在第四类和第五类LSA,但是会由ABR发送一条默认路由,下一跳指向ABR
Totally stub区域(完全stub 区域):为了进一步缩小路由的数量,这个区域禁止了第三类LSA的存在,同时第四类和第五类LSA也不存在,但是会由ABR产生一条三类的默认路由下一跳指向ABR
NSSA区域(不是那么完全的stub区域):需要ASBR的存在但是 又不允许五类LSA的出现,所以这个区域不存在第四类和第五类LSA,但是,会由ASBR产生一条七类的LSA,七类LSA只能在NSSA区域中传播,经过ABR传递到其他的区域的时候,会转换成五类的LSA。
17.OSPF协议的路由聚合:
ABR对三类LSA的聚合:
abr-summary advertise/not-advertise
advertise 聚合后并且发布出去
not-advertise 聚合后不发送出去
在做聚合时应该在路由产生的区域做
ASBR对五类或是七类LSA的聚合
asbr-summary
18.OSPF过滤计算出的路由(在LSA经过SPF算法得到最佳路由导入的路由表的时候,进行过滤):只会影响到本设备上的路由表中的路由,并不会影响到其他的设备。
在区域中配置:filter-policy acl import
19.OSPF过滤三类LSA:
Filter acl import/export 对不同的区域import 或是 export不同。