一、OSPF简介:
RIP是一个距离矢量路由协议,使用过程中,有以下限制:
网络扩展不好
周期性广播消耗带宽资源
路由收敛速度慢(30s)
以跳数作为度量值
存在路由环路
OSPF的优点:(链路状态路由协议)IP协议89号
适应范围广——支持各种规模的网络,最多可支持几百台路由器。
快速收敛——在网络的拓扑结构发生变化后立即发送更新报文,使这一变化在自治系统中同步。
无自环——由于OSPF根据收集到的链路状态用最短路径树算法计算路由,从算法本身保证了不会生成自环路由。
区域划分——允许自治系统的网络被划分成区域来管理,区域间传送的路由信息被进一步抽象,从而减少了占用的网络带宽。
等价路由——支持到同一目的地址的多条等价路由。
路由分级——使用4类不同的路由,按优先顺序来说分别是:区域内路由、区域间路由、第一类外部路由、第二类外部路由。
支持验证——支持基于接口的报文验证,以保证报文交互和路由计算的安全性。
组播发送——在某些类型的链路上以组播地址发送协议报文,减少对其他设备的干扰。
二、OSPF协议基本原理
工作过程:邻居发现、路由交换、路由计算、路由维护
1、邻居表:记录所有建立了邻居关系的路由器,包括相关描述和邻居状态。会定期的相互发送hello报文来维护,若在一定的周期内没有收到领居回应的hello报文,则认为邻居路由器失效,将它从邻居表中删除
2、链路状态数据库表(LSDB):此表里包含了网络拓扑中链路状态的通告。。每台路由器在同一个区域内LSDB表一样
3、路由表:在获得完整LSDB表后,进行SPF算法,形成最优路由加入路由表
OSPF协议路由生成过程:
1、生成LSA描述自己的接口状态
每台路由器都根据自己周围的接口状态生成LSA(接口状态up或down)、链路开销、IP地址/子网掩码
链路开销与接口带宽成反比
2、同步ospf区域内的每台路由器的LSDB
ospf路由器通过交换LSA来实现LSDB的同步
3、使用spf计算路由
ospf路由器用spf算法以自身为根节点计算出一棵最短路径树
如果通过SPF算法发现到达同一目标的路径cost值相同,就将两条路由同时加入路由表,形成等价路由
COST值(开销)算入口的
三、分层结构
1)、骨干区域与非骨干区域
区域的边界是路由器,而不是链路。一个网段只能属于一个区域,或者说每个运行ospf的接口必须属于某个特定的区域。
每个区域必须与骨干区域相连(区域0)
骨干区域自身也必须保持连通
区域划分的好处:
减少区域内LSA的数量
便于管理
减少路由震荡的影响
area0:
主要为快速、高效的传输数据包,一般不接用户(防止自环,节省带宽)
其他area:主要连接用户,所有数据必须经过area0
区域内各路由器标识:
ABR:区域边界路由器(接口属于两个区域以上,且均有一个接口属于area0)
ASBR:自治系统路由器(有一个接口属于area0,还有接口属于外部路由,做引入的)
Internal :域内路由器(所有接口都属于同个区域)
Backbone:骨干路由器(至少有一个接口属于area0)
2)、Router ID
Router
ID:是一个32bit(位)无符号整数,可以在一个自治系统中唯一的标识一台路由器(是本地的概念)
选举方式:
手工配置;
若有Loopback接口,则选其中IP地址大的;
若无,则选物理接口(必须UP)下,IP地址大的。。失效后重新选
3)、ospf网络类型
1、ospf的四种网络类型:dis ospf interface g0/0/0
广播(Brodcast)类型:当链路层协议是Ethernet(以太网)、FDDI(光纤分布接口)时,ospf默认认为网络类型是广播,在该网络中,通常以组播形式(224.0.0.5和224.0.0.6)发送协议报文。
NBMA(非广播多点可达网络):当链路层是帧中继(FR)、ATM(异步传输模式)或X.25(面向连接的)时,ospf默认类型是NBMA(全互联),以单播形式发送报文。
如果一个网络是NBMA时,ospf的解决方法:
P2MP(点到多点):没有一种链路层协议被默认为P2MP网络。是通过其他网络类型强制更改的。常用将NBMA改为P2MP网络,,,,以组播形式(224.0.0.5)发送协议报文,可以手动修改为单播方式
P2P(点到点)(串行接口):当链路层协议为PPP、HDLC时,网络默认为P2P。以组播(224.0.0.5)发送协议报文
ospf的hello报的时间间隔与网络类型的关系:
广播 点到点
NBMA
P2MP
hello : 10s 10s 30s 30s
老化: 40s 40s 120s
120s
ospf的DR/BDR选举与网络类型的关系:
广播
点到点 NBMA 点到多点
DR/BDR 需要 不需要
需要 不需要
只要是多点可达的网络,需要选择DR/BDR
2、NBMA网络的配置原则
由于发送报文方式为单播,所以要手工配置邻居和相邻路由器是否有选举权
NBMA必须是全连通的,任一两台路由器都要建立虚链路。如果
部分接口没有可达,则将接口配置成P2MP;如果路由器对端只有一个路由器,可以将其改为P2P模式
NBMA与P2MP的区别
a、NBMA是指全连通、非广播、多点可达,P2MP不需要
b、NBMA需要选举DR和BDR,而在P2MP网络中不需要
c、NBMA是一种默认网络类型,而P2MP是强制更改的
d、NBMA采用单播,需要手工配置邻居,P2MP是组播
4)、DR与BDR的选举(DR和BDR是针对路由器接口而言的)需要40s
选举制(DR/BDR)--------实习制(DR坏了,BDR上)--------终身制(稳定状态时,优先级高的,不重新选举)
在广播网和NBMA网中,任意两台路由器都要传递消息,如果有n台,需要建立n(n-1)/2个邻接关系(点到点链路不需要选择DR和BDR)
选举DR后,只需要建立2(n-2)+1个
优先级最高的被选举为DR,优先级次高的被选举为BDR
优先级为0的不参与选举
a、先比较hello报文的优先级(值越大越优)(接口默认优先级为1,最大为255,0表示不参加选举)
b、若优先级一样则比较router id,大的优
c、次优先级的为BDR
注:
当路由器网络中,增加了一个优先级更高的路由器,不会强制的更改DR和BDR,在DR坏后,进行再次选举时,更高的被选为BDR
四、ospf报文的类型和封装:
ospf报文直接封装为IP报文协议报文,协议号为89
1)、ospf报文格式:
Header:公共头部
(version、Authentication、Router-ID、AreaID)
2)、hello报文:建立(发现)并维护邻居关系
定时器的数值、DR、BDR以及自己已知的邻居
(轮询时间10s、失效时间40s、接口掩码、接口优先级、option可选项)
3)、DD报文:交互LSA前主从确定和数据库的汇总(LSA摘要),用于两台路由器进行数据库(LSDB)的同步
4)、LSR报文:请求自己没有的LSA或者比自己更加新的LSA
5)、LSU报文:回复LSR需要的LSA的详细信息
6)、LSAck报文:对LSU报文的确认。内容是需要确认的LSA的Header(每个LSA的头部)
五、邻居关系和邻接关系的建立:
1)、邻居发现与维护
a、两台路由器以组播的方式(224.0.0.5)发送ospf协议的hello报文(Router
ID、相关参数协商信息)。组播地址224.0.0.5表示所有运行ospf路由器都能收到该报文。(224.0.0.5是DR和BDR发送报文给DRother时用,224.0.0.6是DR和BDR监听DRother时用(实验表明都是用224.0.0.5))
b、两台路由器根据收到的报文,进行参数协商,如果验证、区域等参数都设置一致,则认为发现邻居
c、发现邻居后,进行维护。邻居之间周期性(10s)的交互hello报文
在一定时间内,内收到邻居发来的报文,认为邻居正常,反则认为失效。
d、ospf定时器:
hello定时器(10s):接口向邻居发送hello报文的间隔。邻居之间定时器要保持一致,且与路由的收敛速度、网络负荷大小成反比
邻居失效时间 (40s):在邻居失效时间内,如果接口还没有收到hello报文,则宣告邻居无效
非广播网络中,每隔30秒发送一次,保持时间120秒
2)、邻居和邻接
ospf路由器启动后,便会通过ospf接口向外发送hello报文。收到报文的ospf路由器且报文中参数一致,则双方形成邻居关系
形成邻居关系的路由器不一定都能形成邻接关系,要根据网络类型,,只要双方成功交互DD报文,交换LSA并达到LSDB的同步之后,才能真正成为邻接关系
DR、BDR之间为邻接关系(full)(LSA和DD报文)
DR、BDR与DRother之间为邻接
DRother之间为邻居关系(2-way)(hello报文)
3)、邻居关系的建立:
i:RTA发送hello报文将DR为置成0.0.0.0,邻居表为空
ii:看对方邻居表是否有自己,没有,将RTA放入邻居表状态设为Init状态,然后比较RouterID,发现自己的比RTA大,将DR设为自己,发给RTA
iii:RTA检查RTB的hello报文,发现邻居表有自己状态设为2-way,并将RTB加入自己的邻居表,再发送hello给RTB
iv:RTB收到RTA的hello报文检查,发现邻居表里有自己,直接将邻居表里RTA状态设为2-way
邻接关系的建立:
如果RTA和RTB有一个是DR或者BDR还要继续建立邻接关系
i:RTA将邻居表里的RTB状态设为Exstar状态,并且发送一个不包含LSA的DD报文,进行主从协商,(Maste路由器的作用是在交换DD报文时,主动发送DD报文的作用)
Seq:序列号,由主设定,第一个包RTA认为自己是主,序列号设为X
I:置为1,表示是RTA发送的初始化的包
M:置为1,表明这不是最后一个包
MS:置为1,表明自己是主
ii:RTB收到DD报文,将邻居表里的RTA设为Exstar状态。比较Router
ID,由于自己的比RTA大,所以认为自己是主,序列号置为Y,MS置为1,,I和M也置为1
iii:RTA收到后,比较Router
ID确实比自己大,认为RTB为主,并将邻居表RTB的状态设为Exchange状态,并采用RTB设置的序列号Y发送一个带有LSA摘要的DD报文
iv:RTB收到后,也将邻居表RTA的状态设为Exchange状态,并回一个序列号为Y+1的带有LSA摘要的DD报文和RTA交换LSA摘要信息
v:双方收到带有LSA摘要的DD报文后,进行比较,RTB发现RTA的LSA摘要所对应的LSA自己都有,则将邻居表里的RTA设为Full。
vi:RTA发现RTB发来的LSA摘要所对应的LSA自己有缺少的,将邻居表中RTB状态设为Loading,并发送一个LSR报文(包含自己缺少的LSA摘要)。
vii:RTB收到后,将RTA所请求的LSA,以一条或多条LSU报文发给RTA
viii:RTA将收的LSA放入自己的LSDB表中,知道之前请求的所有LSA都获得。
5)、ospf邻居状态机:
i:Down:在上一个邻居失效时间内,没有收到任何hello报文
ii:Attempt:只存在于NBMA网络中,当一台设备试图联系自己邻居时,没有收到回应报文时,就会将邻居状态设置为Attempt
iii:Init:表示一台路由器收到另一台路由器的hello报文,但是报文中的邻居表里没有自己的RouterID
iv:2-way:表示一台路由器收到另一台路由器的hello报文,报文的邻居表中有自己的RouterID
v:Exstart:在协商主从时,确定DD报文的序列号,比较MTU。(MTU不一样时停在此状态)ospf
mtu-enable //开启MTU比较
vi:Exchange:在交换LSA摘要时
vii:Loading:对方的LSA摘要和自己的LSDB比较后,发现LSA摘要中存在LSDB中没有的
vii:Full:收到的LSA摘要和自己的LSDB表一致
六、LSDB的更新:
老化时间:LSDB里面的LSA都设定了老化时间,默认为1h,如果1h内LSA没有被更新,LSA在LSDB表中将会被移除。LSDB每隔0.5h刷新一次所有的LSA,LSA的序列号都会加一
序列号越大,表示LSA越新;老化时间越小,表示LSA越新,默认每0.5h进行一次LSA的泛洪。
注意:校验和是不能体现LSA的新旧。
(1)、RTA发现链路状态发生改变后,以组播地址为(224.0.0.6)将LSU报文发送给RTC和RTD。组播地址224.0.0.6表示只有DR和BDR能够接收到这个报文
(2)、RTC作为DR,收到报文后,发送LSAack报文确认,同时使用组播地址为224.0.0.5将LSU报文发送给所有OSPF的路由器。
配置和优化OSPF协议:
[RT2]ospf 1
//启用OSPF进程
注意:在同一台设备上,进程号不同,区域相同,不能互通,设备认为是两个路由协议,必须做重分布,,进程号是本地概念,不同的路由器进程号不同不影响互通。
[RT2-ospf-1]area 0
[RT2-ospf-1-area-0.0.0.0]
//进入ospf区域视图
[RT2-ospf-1-area-0.0.0.0]netw 192.168.1.0 0.0.0.255
//指定接口启用ospf协议
network的意思是:使能该网段覆盖的直连接口的ospf协议。
Router ID配置:
[RT2]router id 2.2.2.2
//配置全局router ID
[RT2-ospf-1]ospf 1 router-id 3.3.3.3
//配置局部的router id
当同时配置时,局部生效(配置完router
ID后要重置ospf协议reset ospf process)
查看:
[RT2]dis ospf peer
//查看ospf邻居
[RT1-ospf-1-area-0.0.0.0]dis ospf routing
//查看ospf路由信息
OSPF Process 1 with Router ID 1.1.1.1
Routing Tables
Routing for Network
Destination Cost Type NextHop AdvRouter Area
12.1.1.0/24 1 Stub 12.1.1.1 1.1.1.1 0.0.0.0
1.1.1.1/32 0 Stub 1.1.1.1 1.1.1.1 0.0.0.0
COST:开销 TYPE:路由类型(Intra-Area、Transit、Stub、Inter-Area、TYpe1
External和Type2 External) NextHop:下一跳地址
AdvRouter:发布路由器 Area:区域ID
ospf的路由条目类型: Transit:直连路由
1、域内路由(stub,Intra):来自同一区域内部的路由条目
2、域间路由(Inter):来自于不同区域的路由条目
3、外部路由(ASE,External)来自于ospf协议的外部路由
路由优先级排名:
域内路由>域间路由>外部路由
dis ip routing-table protocol ospf
//查看ospf路由(ospf的优先级为10,到达目的地的度量为1)
dis ospf interface g0/0/0
//查看ospf接口信息
dis ospf 1 brief
//显示ospf的概要信息
dis ospf 1 lsdb
//显示ospf的lsdb表
reset ospf 1
counters //清除ospf计时器
reset ospf
1 process //重启ospf进程
dis ospf error
//ospf的错误信息
terminal debugging
//打开debugging
debugging ospf ?
INTEGER<1-65535> Process ID
event OSPF events
//查看ospf时间
lsa OSPF LSA
//查看LSA
packet OSPF packets
//查看hello报文
spf OSPF spf
//查看spf算法
timer OSPF timer
//查看ospf计时器
undo debugging all
//关闭所有debugging
优化ospf网络
[RT1-GigabitEthernet0/0/0]ospf network-type ?
//修改接口的网络类型
broadcast Specify OSPF broadcast network
//广播
nbma Specify OSPF NBMA network
//非广播多点可达
p2mp Specify OSPF point-to-multipoint network
//点到多点
p2p Specify OSPF point-to-point network
//点到点
[RT1-GigabitEthernet0/0/0]ospf dr-priority 0~255
//配置接口优先级(0不参加选举)
[RT1-ospf-1]peer 12.1.1.2 dr-priority 2
//在NBMA的网络中,用此命令配置邻居,后面的优先级表示对方的接口优先级,是为了减少网络中的hello报文
[RT1-GigabitEthernet0/0/0]ospf cost 2
//修改接口开销(默认接口开销为1)
[RT1-ospf-1]bandwidth-reference 1000
//修改ospf的参考带宽(默认为100Mbps)
接口开销=参考带宽/接口带宽
配置ospf报文定时器:
[RT1-GigabitEthernet0/0/0]ospf timer ?
dead Interval after which a neighbor is declared dead
//修改邻居失效时间
hello Hello Interval
//修改hello时间
poll Poll Interval (on NBMA network)
//修改poll定时器
retransmit Retransmit Interval
//修改LSA的时间间隔
注意:修改计时器的时候两边必须都得改,否则无法发现邻居
配置ospf引入默认路由条目:
[RT2-ospf-1]default-route-advertise
{always|cost|type|route-policy}|summary
cost
//引入默认路由
always:若果本机没有配置默认路由,使用此参数可产生一个描述默认路由的ASE
LSA发不出去,如果没有写此命令,仅当本地配置饿默认路由,才可以产生一条Type-5 LSA发不出去
cost:该条默认路由度量值,(0~16777214)默认值为1
type:该路由ASE LSA的类型(1~2)默认为2
route-policy:路由策略名
summary:发布指定路由的type-3 summary LSA。