目录:
1、前言:
2、RIP在大型网络中遇到的问题:
3、OSPF概述:
4、OSPF协议工作过程:
5、OSPF基本概念
6、OSPF的网络类型
7、OSPF的7个邻居状态机:
8、OSPF的5种报文:
9、OSPF的DR与BDR
10、OSPF邻居与邻接的建立:
1、前言:
RIP是基于距离矢量算法的协议,应用在大型网络中收敛慢、度量值不科学、可扩展性差
IETF提出基于SPF算法的链路状态路由协议,在大型网络中弥补rip协议的不足
2、RIP在大型网络中遇到的问题:
1.逐跳收敛
R1-R2-R3组网,当R1出现故障后,R1向R2发出更新,R2收到后进行本地计算完成计算后向R3发送更新,如此逐跳收敛导致了网络收敛缓慢的问题
2.路由更新
RIP计算路由完全依赖于邻居发过来的路由信息,导致缺乏对全局网络拓扑的了解
计算路由:RIP为:收到更新–计算路由–发送更新,ospf为:收到更新–发送更新–计算路由
3.最远15跳
最远只能达到15跳
4.以跳数为度量
以跳数度量最优路径,不会走带宽大的路径只走最小跳数的路径
3、OSPF概述:
开放式最短路径优先(Open Shortest Path First,OSPF)是广泛使用的一种动态路由协议,它属于链路状态路由协议,具有路由变化收敛速度快、无路由环路、支持变长子网掩码(VLSM)和汇总、层次区域划分等优点。在网络中使用OSPF协议后,大部分路由将由OSPF协议自行计算和生成,无须网络管理员人工配置,当网络拓扑发生变化时,协议可以自动计算、更正路由,极大地方便了网络管理。但如果使用时不结合具体网络应用环境,不做好细致的规划,OSPF协议的使用效果会大打折扣,甚至引发故障。 [1]
OSPF协议是一种链路状态协议。每个路由器负责发现、维护与邻居的关系,并将已知的邻居列表和链路费用LSU(Link State Update)报文描述,通过可靠的泛洪与自治系统AS(Autonomous System)内的其他路由器周期性交互,学习到整个自治系统的网络拓扑结构;并通过自治系统边界的路由器注入其他AS的路由信息,从而得到整个Internet的路由信息。每隔一个特定时间或当链路状态发生变化时,重新生成LSA,路由器通过泛洪机制将新LSA通告出去,以便实现路由的实时更新。 [2]
4、OSPF协议工作过程:
工作过程:建立邻居、同步数据库、计算最优路由、路由维护
1、邻居表:记录所有建立了邻居关系的路由器,包括相关描述和邻居状态。会定期的相互发送hello报文来维护,若在一定的周期内没有收到领居回应的hello报文,则认为邻居路由器失效,将它从邻居表中删除
2、链路状态数据库表(LSDB):邻接路由器间发送update报文,传播网络拓扑中链路状态的通告(LSA),路由器学习到的所有的LSA形成一张链路状态数据库表(LSDB)。每台路由器在同一个区域内LSDB表一样。
3、路由表:在获得完整LSDB表后,进行SPF算法,形成最优路由加入路由表
5、OSPF基本概念
1)OSPF内部网关路由协议:用于在单一自治系统(Autonomous System-AS)内决策路由;
2)自治系统(AS):执行统一路由策略的一组网络设备的组合,如一组使用相同路由协议交换路由信息的路由器,缩写为 AS;
3)Router ID:是在OSPF自治系统内唯一标识一台路由器的IP地址
Router ID选取规则:
1.手工指定 (任意唯一)
2. 路由器选取它所有loopback接口上数值最高的IP地址
3.如果没有loopback接口,就在所有物理端口中选取一个数值最高的IP地址IP大小:100.1.1.1 >1.1.1.1
4、router-id被选定后不会再变,除非重启ospf进程,为了稳定,命令或环回接口被推荐
4)OSPF区域:
为了适应大型的网络,OSPF在AS内划分多个区域
每个OSPF路由器只维护所在区域的完整的链路状态信息
1、降低CPU的负担;2、减小LSDB的内存开销;3、LSA相关计算和Flooding负担均降低。
区域号(Area ID)为0的区域通常被称为骨干区域。骨干区域负责区域之间的路由,非骨干区域之间的路由信息必须通过骨干区域来转发。对此,OSPF有两个规定:
1.所有非骨干区域必须与骨干区域保持连通;
2.骨干区域自身也必须保持连通。
4)路由器分类:
内部路由器(IR):所有接口都在一个区域内的路由器
区域边界路由器(ABR):连接于同一自治系统但其接口不在同一区域内的路由器
骨干路由器(BR)该类路由器至少有一个接口属于骨干区域。因此,所有的 ABR 和位于 Area0 的内部路由器都是骨干路由器。
自治系统边界路由器(ASBR):充当网关的作用,从一个AS到另一个AS重分配路由信息。只要一台 OSPF 路由器引入了外部路由的信息,它就成为 ASBR。
5)路由类型
OSPF 将路由分为四类,按照优先级从高到低的顺序依次为:
1.区域内路由(Intra Area):本区域内就可以到达的路由
2.区域间路由(Inter Area):需要跨区域才能到达的路由
3.第一类外部路由(Type1 External):这类路由的可信程度较高(rip、ISIS),并且和 OSPF 自身路由的开销具有可比性,所以到第一类外部路由的开销等于本路由器到相应的 ASBR 的开销与 ASBR 到该路由目的地址的开销之和
4.第二类外部路由(Type2 External):这类路由的可信度比较低(BGP),所以 OSPF 协议认为从 ASBR 到自治系统之外的开销远远大于在自治系统之内到达 ASBR 的开销。所以计算路由开销时将主要考虑前者,即到第二类外部路由的开销等于 ASBR 到该路由目的地址的开销。如果计算出开销值相等的两条路由,再考虑本路由器到相应的 ASBR 的开销。
6、OSPF的网络类型
OSPF有4种网络类型或模型:
广播型
点到点
NBMA网络(非广播多路访问)
点到多点网络
OSPF有4种网络类型或模型:
广播型
点到点
NBMA网络(非广播多路访问)
点到多点网络
1.广播型
需要选举DR/BDR。
OSPF路由器之间的hello数据包每10秒钟发送一次,邻居的死亡间隔时间为40秒。
2.点到点
E1线路,是连接单独一对路由器的网络。这种网络上的邻居间总是可以形成邻接。OSPF路由器之间的hello数据包每10秒钟发送一次,邻居的死亡间隔时间为40秒
适用于不支持全连通而是部分连通的网络
不需DR,只使用单独的一个子网
自动发现邻居
LSU 包被发送到每个邻居路由器的接口
3.NBMA网络(Non-Broadcast Multi-Access网络)
OSPF路由器要指定DR和BDR,
支持全连通,但不支持组播,邻居关系需要手工配置,所有的OSPF报文为单播
OSPF路由器之间的hello数据包每30秒钟发送一次,邻居的死亡间隔时间为120秒
4.点到多点网络
点到多点网络是NBMA网络的一个特殊配置可以看成是点到点链路的集合。不选举DR/BDR。需要使用命令neighbor手工指定近邻。OSPF路由器之间的hello数据包每30秒钟发送一次,邻居的死亡间隔时间为120秒。
7、OSPF的7个邻居状态机:
1.down:邻居状态机的初始状态,是指在过去的Dead-Interval时间内没有收到对方的Hello报文。
2.init:本状态表示已经收到了邻居的HELLO报文,但是该报文中列出的邻居中没有包含我的Router ID(对方并没有收到我发的HELLO报文)。
3.2way:本状态表示双方互相收到了对端发送的HELLO报文,建立了邻居关系。在广播和NBMA类型的网络中,两个接口状态是DROther的路由器之间将停留在此状态。其他情况状态机将继续转入高级状态。
4.exstart:在此状态下,路由器和它的邻居之间通过互相交换DD报文(该报文并不包含实际的内容,只包含一些标志位)来决定发送时的主/从关系。建立主/从关系主要是为了保证在后续的DD报文交换中能够有序的发送。
5.exchang:路由器将本地的LSDB用DD报文来描述,并发给邻居。
6.loading:路由器发送LSR报文向邻居请求对方的DD报文。
7.full:在此状态下,邻居路由器的LSDB中所有的LSA本路由器全都有了。即,本路由器和邻居建立了邻接(adjacency)状态。
OSPF邻居交互过程:
8、OSPF的5种报文:
1.HELLO报文:
Hello数据包是编号为1的OSPF数据包。Hello包通过组播地址224.0.0.5发送OSPF路由器使用,运行OSPF协议的路由器每隔一定的时间发送一次Hello数据包,用以发现、保持邻居(Neighbors)关系并可以选举DR/BDR
2.DBD(DD)报文:
链路状态数据库描述数据包(DataBase Description,DBD)是编号为2的OSPF数据包。两台路由器在邻接关系初始化时,用DD报文(Database DescriptionPacket)来描述自己的LSDB,进行数据库的同步。报文内容包括LSDB中每一条LSA的Header(LSA的Header可以唯一标识一条LSA)。LSAHeader只占一条LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据LSAHeader就可以判断出是否已有这条LSA。在两台路由器交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。
3.LSR报文:
链路状态请求数据包(LSA-REQ)是编号为3的OSPF数据包。两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA是已经失效的,这时需要发送LSR报文(Link State Request Packet)向对方请求所需的LSA。内容包括所需要的LSA的摘要。
4.LSU报文:
用来向对端Router发送其所需要的LSA或者泛洪自己更新的LSA,内容是多条LSA(全部内容)的集合。LSU报文(Link State UpdatePacket)在支持组播和广播的链路上是以组播形式将LSA泛洪出去。为了实现Flooding的可靠性传输,需要LSAck报文对其进行确认。对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。
5.LSACK报文:
用来对接收到的LSU报文进行确认。内容是需要确认的LSA的Header(一个LSAck报文可对多个LSA进行确认)。LSAck(Link State Acknowledgment Packet)报文根据不同的链路以单播或组播的形式发送。
9、OSPF的DR与BDR
DR:在一个广播性的、多接入的网络中,存在一个指定路由器与所有其他邻居建立相邻关系,同步链路状态数据库,节省网络开销
BDR:做为DR的备份,在DR失效时接管它。运行OSPF进程的网络中,既不是DR也不是BDR的路由器为DROther。DROther仅与DR和BDR之间建立邻接关系,DROther之间不交换任何路由信息。
DR与BDR的选举过程
DR 和 BDR 是由同一网段中所有的路由器根据路由器优先级、Router ID 通过 Hello 报文选举出来的,只有优先级大于 0 的路由器才具有选举资格。
注意:
某台路由器在一个接口上可能是 DR,在另一个接口上有可能是 BDR,或者是 DR Other。
路由器的优先级可以影响 DR/BDR 的选举过程,但是当 DR/BDR 已经选举完毕,就算一台具有更高优先级的路由器变为有效,也不会替换该网段中已经存在的 DR/BDR 成为新的DR/BDR。DR 并不一定就是路由器优先级最高的路由器接口;同理,BDR 也并不一定就是路由器优先级次高的路由器接口。
具有最高OSPF优先级的路由器会被选为DR
如果OSPF优先级相同,则具有最高Router ID的路由器会被选为DR
10、OSPF邻居与邻接的建立:
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是DRother发报文给DR和BDR时用)
b、两台路由器根据收到的报文,进行参数协商,如果验证、区域、Network mask、hello定时器和邻居失效时间都一致是才能建立邻居关系
c、发现邻居后,进行维护。邻居之间周期性(10s)的交互hello报文,在一定时间内,内收到邻居发来的报文,认为邻居正常,反则认为失效。
d、ospf定时器:
hello定时器(10s):接口向邻居发送hello报文的间隔。邻居之间定时器要保持一致,且与路由的收敛速度、网络负荷大小成反比
邻居失效时间 (40s):在邻居失效时间内,如果接口还没有收到hello报文,则宣告邻居无效
2、邻居和邻接
ospf路由器启动后,便会通过ospf接口向外发送hello报文。收到报文的ospf路由器且报文中参数一致,则双方形成邻居关系
形成邻居关系的路由器不一定都能形成邻接关系,要根据网络类型,只要双方成功交互DD报文,交换LSA并达到LSDB的同步之后,才能真正成为邻接关系
DR、BDR之间为邻接关系(full)(LSA和DD报文)
DR、BDR与DRother之间为邻接
DRother之间为邻居关系(2-way)(hello报文)