OSPF的概述
OSPF是一种链路状态路由协议。不同于距离矢量路由协议依照传闻进行路由选择的工作方式,链路状态路由器从其他路由器那里获取第一手信息。
每台路由器会产生一些关于自己、本地直连链路、这些链路的状态和所有直连邻居的信息(LSA)。这些信息从一台路由器传送到另一台路由器,每台路由器都在一份信息拷贝,但绝不改动信息。最终目的是每台路由器都有一个相同的相关网络的信息,并且每台路由器以自己为根独立的计算各自的最优路径。
链路状态路由协议包括:
▶OSPF
▶IS-IS
OSPF正如它的命名一样,使用Dikstra的最短路径优先(SPF)算法,并且是一个开放的协议,即公有协议。
OSPF的特点
1、使用区域化的概念,这样可以有效的减少算法对 CPU和内存的占用,构建一个层次化的网络拓扑
2、支持无类路由,VLSM,CIDR
3、支持无大小限制、任意的度量值
4、局部更新
5、支持多条路径的等价负载均衡
6、使用组播地址更新(224.0.0.5和224.0.0.6)
7、支持认证
OSPF区域
Transit area(backbone area)传输区域或骨干区域
只有area 0属于传输区域
Regular areas(nonbackbone areas)常规区域或非骨干区域
非0区域都属于常规区域
所有的常规区域必须与骨干区域相连。
通过区域的划分减少链路状态信息的泛洪,链路状态信息只在同一区域内同步;通过手工汇总减少路由条目;构造一个层次化的网络。
路由器类型
ABR:区域边界路由器(Area Border Router)连接区域0和其他一个或多个区域的路由器
ASBR:自治系统边界路由器(Autonomous System Boundary Router)连接外部网络的路由器
内部路由器:R5、R6等
骨干路由器:R1
OSPF的数据报文
OSPF数据包承载在ip之上,协议号为89,分为OSPF数据包头部和OSPF数据包数据部分。
OSPF报头结构
OSPF报头详细描述
Router-ID
路由器ID是在OSPF区域内唯一标识一台路由器的ip地址。
Cisco路由器通过以下方式得到路由器ID:
1、使用命令router-id手工配置
2、如果没有手工配置,路由器选择最大的环回接口ip地址作为router-id
3、如果没有换回接口,则使用最大的物理接口ip地址作为router-id
OSPF hello报文
Hello包用于建立ospf邻居关系,并维护邻居关系,在两台路由器形成邻居之前,必须要相互认可几个参数:
hello报文详细描述
修改ospf的hello interval和dead interval
R1(config)#int s0/0
R1(config-if)#ip ospf hello-interval 10
R1(config-if)#ip ospf dead-interval 10
指定路由器(DR)
和备份指定路由器(BDR)
对于OSPF路由协议来说,在多路访问网络中LSA的泛洪存在两个问题:
1、构建相关路由器之间的邻接关系时,会创建很多不必要的LSA。
2、LSA的泛洪会比较混乱。
在OSPF网络中,如果要在每一台路由器和它的邻居路由器形成完全网状的OSPF邻接关系,5台路由器需要形成10个邻接关系,产生25条LSA通告
为了在多路访问的网络环境中避免这些问题的发生,可以在网络上选举一台指定路由器完成以下工作:
1、描述这个多路访问网络和OSPF区域内其余相连的路由器;
2、管理这个多路访问网络上的LSA泛洪。
DR描述一个多路访问网络,网络上的其他路由器都将和这个指定路由器形成邻接关系,而不是所有路由器都相互形成邻接关系。
关于指定路由器的一个重要问题:如果DR失效,就必须重新选举一台新的指定路由器。网络上的所有路由器也要重新的建立邻接关系。为了避免这个问题,网络上除了选举DR之外,还选举BDR。DR和BDR形成邻接关系,当DR失效,BDR将成为新的DR。并且BDR也和其他路由器形成邻接关系,所以当BDR成为新的DR时,无需重新建立邻接关系,将影响降低到最小。
DR和BDR的选举过程:
1、路由器和邻居路由器之间首先要建立two-way状态,接着查看hello包的优先级、DR、BDR字段,列出所有具有DR和BDR选举资格的路由器列表(即优先级要大于0)
2、所有路由器都宣称自己是DR和BDR
3、通过优先级高的选举为BDR,如果优先级相同选择RID最高的最为BDR
4、由于没有DR的存在,BDR成为DR,重新选举BDR。
在选举成功后,其他的路由器都叫做DRother。即使接入一台优先级更高的路由器,也不会成为新的DR,它只能等待DR失效,原来的BDR成为DR,它再成为BDR。
数据库描述数据包
(DBD)
DBD包用于正在建立的邻接关系。DBD包的主要目的是描述始发路由器数据库中的LSA摘要信息,以便接收路由器能够确定所收到的LSA在其数据库中是否已经存在这些LSA。LSA的摘要信息只需要列出该LSA的头部即可。
DBD报文详细描述
主从关系的选举:通过Router-ID的比较,Router-id大的为master
确认机制:
显式确认:通过ack明确的进行确认。
隐式确认:从路由器使用主路由器相同的序列号进行确认。
链路状态请求包(LSR)
在数据库同步过程中如果收到了DBD包,路由器将会查看DBD里有哪些LSA不在自己的数据库中,或者哪些LSA比自己数据库中的LSA更新。然后将这些LSA记录在链路请求列表中。接着路由器会发送LSR包向它的邻居请求完整的LSA。
LSR报文详细描述
链路状态更新包
(LSU)
用于LSA的泛洪和响应LSR请求包。
LSA数量(Number of LSA):支持这个LSR包中包含的LSA的数量。
链路状态通告(LSA):LSU数据包中携带的完整的链路状态通告信息,一个LSU可以携带多个LSA。
链路状态确认包
(LSAck)
保证LSA可靠的泛洪扩散。一台路由器从它的邻居路由器收到的每一个LSA都必须在LSAck包中进行明确的确认。被确认的LSA是根据在LSAck包里包含它的头部来辨别的,多个LSA可以通过单个LSAck确认。一个LSAck包的组成除了OSPF头部和一个LSA不透的列表之外,没有其他多余的内容了。