OSPF原理篇
OSPF(Open Shortest Path First)-开放式最短路径优先协议
优点:
1.无环路:OSFP是一种基于链路状态的协议,从设计上保证了无路由环路。并且支持区域划分,区域内部路由使用spf最短路径算法保证了区域内部的无环路。OSPF利用区域间的连接规则,保证了无路由环路。
2.收敛快:支持触发更新,每30min一次周期更新,能够快速检测并通告自治系统的内的拓扑变化。
3.扩展性好:当网络上路由器越来越多,路由信息流量急剧增长的时候,OSPF可以将每个自治系统划分为多个区域,限制每个区域范围。并且这种分区域的特点适合大中型网络。
4.支持认证:OSPF可以提供认证功能。OSFP路由器之间的报文可以配置成必须经过认证才能交换。
OSPF的数据包类型
OSPF报文封装在IP报文中,协议号为89.
OSPF报文类型:
Hello报文:用于发现,维护邻居关系和周期保活。并在广播和NBMA网络中选举指定路由器DR和备份路由器BDR。
DD报文:两台路由器进行LSDB数据库同步时,用DD报文描述自己的LSDB。DD报文的内容包括LSDB中的每一条LSA的头部(以为LSA头部可以唯一标识一条LSA)。LSA头部只占一条LSA的整个数据量的一小部分,这样就可以减少路由器之间的协议报文流量。
LSR报文:两台路由器互相交换过DD报文后,知道对端的路由路由器有哪些是本地LSDB所缺少的,然后发送LSR报文向对方请求自己缺少的LSA,LSR值包含了所请求的LSA摘要。
LSU报文:用来向对端路由器发送所需要的LSA.
LSACK:用来对接收到的LSU报文及逆行确认。
OSPF的状态机
**Down:**初始状态,标识在邻居失效时间间隔内收到来自邻居路由器的 Hello数据包。
**Attempt:**此状态只在NBMA网络中存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为HelloInterval,如果RouterDeadInterval(一般为四倍的Hello时间)间隔内未收到邻居的Hello报文,则为Down状态。
Init:此状态下,路由器已经收到邻居的hello报文,但是自己不在邻居列表里,尚未建立双向通讯关系。
**2- Way:**双向通讯建立,但是没有与邻居成为邻接关系。这是建立邻接关系以前的最高级状态。
**ExStart:**建立邻接关系的第一步,路由器开始向邻居发送DD(此状态下DD报文不包含链路状态链路描述)报文。进行主从状态选举,初始DD序列号在此状态决定。
**Exchange:**路由器相互发送抱哈链路状态信息的DD报文,描述本地LSDB的内容。
**Loading:**相互发送LSA请求,发送LSU报文通告。
**Full:**路由器LSDB同步。
OSPF工作过程
1.启动配置完成后,本地组播224.0.0.5发送hello包;hello包将携带本地RID值,及本地已知所有邻居的RID值;若接收来来自对端的hello包中,存在本端的RID,那么视为双方认识,邻居关系建立;生成邻居表。
2.邻居关系建立后,条件匹配,匹配失败将停留于邻居关系,仅hello包周期保活即可。若条件匹配成功,可以建立邻接(毗邻)关系。
3.先使用不携带数据库信息的DBD包进行主从关系选举,RID数值大为主;优先共享数据库目录。
4.之后本地在基于对端的DBD来查找到本地未知的LSA信息。
5.之后使用LSR/LSU/LSACK来获取未知LSA信息。
6.最终生成数据库表(LSDB—链路状态数据库)。
7.之后本地启用SFP算法,基于本地的LSDB生成有向图,再计算出最短路径树,再基于树形构,算出本地为起到到达所有未知网段的最短路径,加载于本地的路由表。
8.收敛完成后,hello包周期保活;每30MIN邻接关系再进行DBD的比对,若一致继续保活即可;若不一致将重新收敛。
OSPF结构突变
结构突变:
1、新增了一个网段 直连新增网段的设备,直接使用更新包告知邻接关系接口;需要ack。
2、断开一个网段 直连断开网段的设备,直接使用更新包告知邻接关系接口;需要ack。
3、无法沟通 hello time10s;dead time 为hellotime的4倍;超过保活时间,删除邻居信息。
邻居发现 hello报文
OSPF的邻居发现过程是基于Hello报文来实现的,Hello报文中的重要字段解释如下:
Network Mask :发送Hello报文的接口的网络掩码。
Hello Interval :发送Hello报文的时间问隔,单位为秒。
Options:标识发送此报文的OSPF路由器所支持的可选功能。具体的可选功能己超出这里的讨论范围。
Router Priority :发送Hello报文的接口的Router Priority,用于选举DR和BDR。
Router Dead Interval :失效时间。如果在此时间内未收到邻居发来Hello报文,则认为邻居失效;单位为秒,通常为四倍Hello Interval。
Designated Router:发送Hello报文的路由器所选举出的DR的IP地址。如果设置为0.0.0.0,表示未选举DR路由器.
Backup Designated Router:发送Hello报文的路由器所选羊出的BDR的IP地址。如果设置为0.0.0.0,表示未选举BDR。
Neighbor :邻居的Router ID列表 ,表示本路由器已经从这些邻居收到了合法的Hello报文。
如果路由器发现所接收的合法Hello报文的邻居列表中有自己的Router ID,则认为已经和邻居建立了双向连接,表示邻居关系已经建立。
验证一个接收到的Hello报文是否合法包括:
如果接收端口的网络类型是广播型,点到多点或者NBMA,所接收的Hello报文中Network Mask字段心须和接收端口的网络掩码一致,如果接收端口的网络类型为点到点类型或者是虚连接,则不检查Network Mask字段;
所接收的Hlello报文中Hello Interval字段必须和接收端口的配置一致;
所接收的Hello报文中Router Dead Interval字段必须和接收端口的配置一致。
所接收的Hello报文中Options字段中的E-bit( 表示是否接收外部路由信息)必须和相关区域的配置一致。
其他参数:
Pollinterval:只用于NBMA网络上的邻居路由器。因为在NBMA网络中无法自动发现邻居,如果邻居是DOWN的,路由器将每经过Pollinterval的时间就发送一个Hel 1o给DOWN的邻居。
重传时间 默认5s 修改:进接口=> ip ospf retransmit-interval
transmit delay 传输延时,默认1s,代表LSA通过接口传出去时增加的延时
意义:为了保证不同路由器上LSA age一致
修改:进接口=>ip ospf transmit-delay 单位是s
数据库同步
邻居关系建立完成后,进行数据库同步:
如上图,RA在Extart状态下,向RB发送第一个DD报文,这里序列号为X,宣告自己为主路由器。但是RB也宣告自己是主路由器,由于B的router id大,所以B是主路由器。
之后RA发送新的DD报文,这个DD报文中带有LSDB的摘要信息,并且这个序列号为B第一次发送的序列号。此时B状态变为Exchange。
之后B发送一个新的DD报文,该报文包含自己的LSDB的描述信息,此序列号是上次使用过的序列号+1.
这里虽然A不需要向B发送一个新的DD报文,但是A作为从路由器,需要对B主路由器发送的每一个DD报文进行确认,所以A会向B发送一个空的DD报文,序列号为B最后一次给它发的序列号。
A发送结束后,A的邻居状态改为Loading,B收到A的确认报文状态给位Full。
OSPF支持的网络类型
点到点网络:两台路由器直接相连的网络。
广播行网络:支持两台以上的路由器,并且具有广播能力的网络。
NBMA:非广播多路访问,要求网络中的路由器组成全连接,即每个路由器都是主路由器。
P2MP:点到多点网络。
DR和BDR
每一个含有至少两个路由器的广播型网络和NBA网络都有一个DR和BDR。
DR和BDR可以减少邻接关系的数量,从而减少链路状态信息以及路由信息的交换次数,这样可以节省带宽,降低对路由器处理能力的压力。
—个既不是DR也不是BDR的路由器只与DR和BDR形成邻接关系并交换链路状态信息以及路由信息,这样就大大减少了大型广播型网络和NBMA网络中的邻接关系数量。在没有DR的广播网络上,邻接关系的数量可以根据公式n(n-1)/2计算出,n代表参与OSPF的路由器接口的数量。在本例中,所有路由器之间有6个邻接关系。当指定了DR后,所有的路由器都与DR建立起邻接关系,DR成为该广播网络上的中心点。
BDR在DR发生故障时接管业务,一个广播网络上所有路由器都必须同BDR建立邻接关系。
本例中使用DR和BDR将邻接关系从6减少到了5,RTA和RTB都只需要同DR和BDR建立邻接关系,RTA和RTB之问建立的是邻居关系。
此例中,邻接关系数量的减少效果并不明显。但是,当网络上部署了大量路由器时,比如100台,那么情况就大不一样了。
DR BDR选举原则
在邻居发现完成之后,路由器会根据网段类型进行DR选举。在广播和NBMA网络上,路由器会根据参与选举的每个接口的优先级进行DR选举。优先级取值范围为0-255,值越高越优先。缺省情况下,接口优先级为1。如果一个接口优先级为0,那么该接口将不会参与DR或者BDR的选举。如果优先级相同时,则比较Router ID,值越大越优先被选举为DR。
为了给DR做备份,每个广播和NBMA网络上还要选举一个BDR。BDR也会与网络上所有的路由器建立邻接关系。
•为了维护网络上邻接关系的稳定性 ,如果网络中已经存在DR和BDR,则新添加进该网络的路由器不会成为DR和BDR,不管该路由器的Router Priority是否最大。如果当前DR发生故障,则当前BDR自动成为新的DR,网络中重新选举BDR;如果当前BDR发生故障,则DR不变,重新选举BDR。这种选举机制的目的是为了保持邻接关系的稳定,使拓扑结构的改变对邻接关系的影响尽量小。
OSPF开销
Cost=开销值=参考带宽/接口带宽 默认参考带宽为100M
整段路径cost值之和最小为最佳路径;
若接口带宽大于参考带宽,度量值为1;将可能导致选路不佳;故在接口带宽大于参考带宽的网络中,可以人为修改参考带宽。
OSPF区域
划分OSPF区域可以缩小路由器的LSDB规模 ,减少网络流量。区域内的详细拓扑信息不向其他区域发送,区域间传递的是抽象的路由信息,而不是详细的描述拓扑结构的链路状态信息。每个区域都有自己的LSDB,不同区域的LSDB是不同的。路由器会为每一个白己所连接到的区域维护一个单独的LSDB。由于详细链路状态信息不会被发布到区域以外,因此LSDB的规模大大缩小了。
•
Area 0为骨干区域,为了避免区域间路由环路,非骨干区域之间不允许直接相互发布路由信息。因此,每个区域都必须连接到骨干区域。
•
运行在区域之间的路由器叫做区域边界路由器ABR ( Area Boundary Router ),它包含所有相连区域的LSDB。
自治系统边界路由器ASBR ( Autonomous System BoundaryRouter)是指和其他AS中的路由器交换路由信息的路由器,这种路由器会向整个AS通告AS外部路由信息。
在规模较小的企业网络中,可以把所有的路由器划分到同一个区域中,同一个OSPF区域中的路由器中的LSDB是完全一致的。OSPF区域号可以手动配置,为了便于将来的网络扩展,
推荐将该区域号设置为0,即骨干区域。
OSPF配置篇
[r1]ospf 1 router-id 1.1.1.1
启动协议时,需要定义进程号,仅具有本地意义;建议同时定义RID值;使用IPV4地址,全网需要唯一;手工---环回最大数值—物理接口最大数值
[r1-ospf-1]
宣告:1、激活 2、路由或拓扑 3、区域划分
[r1-ospf-1]area 0
[r1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0
注意:在具体宣告时,OSPF必须使用反掩码,0表示此位置严格执行,1表示该地址任意。
[r1]display ospf peer 查看详细的邻居关系
[r1]display ospf peer brief 查看邻居关系简表
[r1]display ospf lsdb 查看数据库表的目录
OSPF的扩展配置:
修改接口优先级
在MA网段中,若所有的设备间均为邻接关系,将可能出现大量的重复更新;
故进行DR/BDR选举;所有的非DR/BDR设备间维持为邻居关系;
选举规则:
1、先比较参选接口的优先级,默认1;0-255,大优;
2、若参选接口的优先级相同,比较参选设备的RID,数值大优;
[r2]interface GigabitEthernet 0/0/0
[r2-GigabitEthernet0/0/0]ospf dr-priority ?
INTEGER<0-255> Router priority value
[r2-GigabitEthernet0/0/0]ospf dr-priority 3 修改接口优先级
切记:DR/BDR选举是非抢占;故所需要网段内部重新选举,需要重启该网段内所有参选设备的ospf进程;若参选接口的优先级为0,将放弃选举;一个网段内只是应该存在一台DR;
OSPF的扩展配置:一般都要配置
手工认证
在邻居间的接口上定义安全秘钥
[r1]interface GigabitEthernet 0/0/1
[r1-GigabitEthernet0/0/1]ospf authentication-mode md5(模式)1(编号) cipher 123456(秘钥)
OSPF的扩展配置:
手工汇总
1.区域汇总:OSPF只能在区域间将基于拓扑计算所得的路由进行汇总,不支持接口汇总,因为接口间传播的是1、2的拓扑信息
[r2]ospf 1
[r2-ospf-1]area 0
[r2-ospf-1-area-0.0.0.0]abr-summary 1.1.0.0 255.255.252.0
注:此时R2设备同时连接区域0和其他的区域;在将区域0的部分路由共享到其他区域时,进行了汇总的配置,汇总网段为1.1.0.0/22;
2.2)域外路由汇总 ASBR上配置
[r4]ospf 1
[r4-ospf-1]asbr-summary 10.1.0.0 255.255.252.0
OSPF的扩展配置:
被动接口-沉默接口—仅接收不发送路由协议信息,只能用于连接用户PC的接口;不得用于连接其他路由器OSPF邻居的接口;除此之外处于swi的接口也需要静默。
[r2]ospf 1
[r2-ospf-1]silent-interface GigabitEthernet 0/0/2
OSPF的扩展配置:
加快收敛—修改计时器
Hello time 10s dead time 为hello time的4倍;
修改一台路由器某个接口的hello time,该接口的dead time将自动4倍关系匹配;
切记:邻居间直连的接口hello和dead time若不一致,将不能建立邻居关系;
修改时也不建议修改的过小;
[r2-GigabitEthernet0/0/1]ospf timer hello 10
拓展配置:
缺省路由:在连接外网的边界路由器上配置,一条缺省信息后;该设备将向内网发送信息;使得内部的其他的OSPF路由器自动生成缺省路由,下一跳指向边界路由器方向;
5类缺省
OSPF协议需要边界路由器先拥有一条到达ISP的缺省路由(静态、动态均可);
然后将其重发布到OSPF域内
[r1]ospf 1
[r1-ospf-1]default-route-advertise
若边界路由器上没有缺省路由,也可以强制向内部发布一条缺省
[r1-ospf-1]default-route-advertise always
7类缺省
由普通NSSA可以自动产生,也可以管理员手工在NSSA区域进行配置.
[r1-ospf-1-area-0.0.0.1]nssa default-route-advertise
注:在定义特殊区域时,若需要手工再配置一些缺省,务必一定注意不要出现环路.
若ISP处于骨干,那么相对安全,若在某个非骨干,或其他协议,那么该非骨干,或连接其他协议的非骨干务必保持为普通区域.