最近系统的学习了下ospf路由协议,ospf较rip还是复杂很多,很多状态变迁,区域划分,不同的报文交互。每当拓扑发生变化,每台路由器都重新计算数据库,单个区域的ospf势必会导致拓扑过大,重计算消耗cpu的时间,以及存储完整地链路状态数据库消耗大量内存,所以在拓扑复杂情况下一般建议划分多个区域。
ospf下路由器有以下几种角色:主干路由器、内部路由器、区域边界路由器、自主系统边界路由器。链路状态通告(LSA)描述了路由器及其连接的网络。路由器彼此交换LSA以获悉完整地网络拓扑,这让所有路由器的拓扑数据库都相同。建立拓扑数据库后,OSPF使用Dijkstra
算法找出前往每个远程网络的最佳路径,再将它们加入到路由选择表。
1.DR和BDR
DR和BDR:在OSPF网络中,各路由器之间不直接两两发链路状态信息,而是通过选举DR/BDR,DR为主,BDR为备份DR,把链路状态信息发给DR/BDR,由DR在组播给所有非DR/BDR的DROTHER路由器。
2.建立邻居
发现邻居后,必须建立邻居关系,这样才能与邻居交换路由选择信息(LSA)。相邻OSPF路由器要建立邻居关系,需要经过两个步骤:
- 双向通信。使用Hello组播。
- 数据库同步。在此期间路由器将交换三种分组:数据库描述(DD)分组、链路状态请求(LSR)分组、链路状态更新(LSU)分组。
两台路由器的DB同步后,他们就建立了邻居关系。要建立邻居关系,以下方面必须一致:
- 区域ID
- 子网
- Hello定时器和失效定时器
- 身份验证方法(如果配置了)。
具体何时建立邻居关系取决于网络类型。如果链路是点对点的,只要两台路由器正确配置了Hello分组包含的信息,它们就将建立邻居关系。在广播多路访问网络中,OSPF路由器只与DR和BDR建立邻居关系。
3.OSPF路由器类型
OSPF下必须有一个区域为0,这种区域称为主干区域。其他所有区域都必须与区域0直接相连。以下介绍了OSPF下几种路由器的类型。
位于边界的路由器,即它的接口分属于多个区域,这种路由器被称为区域边界路由器(ABR)。ABR是属于多个OSPF区域的路由器,它在拓扑表中维护来自所有直连区域的信息,但不在区域之间分析拓扑信息。ABR分隔LSA洪泛区,是主要的区域地址汇总点,通常提供默认路由,同时维护其他连接的每个区域的链路状态数据库(LSDB)。
内部路由器是这样的路由器:它们的所有接口都属于同一个区域。
自主系统边界路由器(ASBR)是这样的OSPF路由器:至少有一个接口连接到外部网络(其他AS)。ASBR并不会自动在其OSPF路由选择进程和外部路由选择进程之间交换路由选择信息。这种路由交换是通过路由重发进行的。具体内容可以参考网上资料。
4.链路状态通告
路由器的链路状态数据库由链路状态通告(LSA)组成。其一共有以下5种:
- 1类LSA。被称为路由器链路通告(RLA)或路由器LSA。由每台路由器向其所属区域的其他路由器发送。这种通告包含路由器连接的属于当前区域的链路的状态。如果路由器属于多个区域,则它分别发送针对各个区域的1类LSA。
- 2类LSA。被称为网络链路通告(NLA)。是由指定路由器(DR)生成的。DR使用2类LSA来发送网络中其他路由器的状态信息。2类LSA被洪泛到当前区域的所有路由器,而不会传到区域外部。
- 3类LSA。被称为汇总链路通告(SLA)。是由区域边界路由器(ABR)产生的。ABR将3类LSA发送到它连接的其他区域。3类LSA通告网络,还通告前往主干区域(区域0)的区域间路由。
- 4类LSA。由区域边界路由器生成(ABR)。ABR将4类LSA发送到它连接的其他区域。与3类不同的是,专门用于告诉其他OSPF区域如何前往ASBR。
- 5类LSA。被称为外部链路通告。由ASBR发送,用于通告前往OSPF自主系统外部的路由,将传遍整个OSPF自主系统。每通告一个外部网络,ASBR都将生成一个5类LSA。
注意,在OSPF中,汇总链路通告并不一定包含网络汇总。除非管理员手动创建汇总,否则LSA通告的将是区域内所有的网络。
5.OSPF Hello
Hello采用组播报文,使用224.0.0.5
和224.0.0.6
分别表示所有OSPF路由器和DR/BDR路由器。默认10秒交换一次该消息,包括如下内容。
- 路由器ID(RID)。如果配置了环回地址,则采用这个;否则,选择使用最大的物理接口地址。
- Hello间隔和失效间隔。Hello默认10秒,失效为Hello4倍。
- 邻居列表。发送Hello分组的路由器的所有邻居的路由器ID。
- 区域ID。
- 路由器优先级。
- DR的IP。
- BDR的IP。
- 身份验证信息。(如果有)
6.邻居状态
以下两个图是关于ospf的状态变迁图,图来自RFC2328。
各个状态的简单说明:
- Down为初始状态。
- Attemp为非广播多路访问(NBMA)专用。该状态下,必须手动指定邻居。
- Init为接收Hello报文后额状态,此状态下邻居可见。
- 2-Way已建立双向通信。在广播多路访问网络中,此时将开始选举DR和BDR。
- ExStart状态下,DR和BDR已与网络中其他路由器建立邻居关系。在每台路由器和DR(BDR)之间建立主备关系。交换DBD分组后,进入ExChange。
- ExChange时,使用数据库描述(DD或DBD)分组来交换路由选择信息,还可能发送LSR分组和链路更新状态。此状态下有能力接收/发送所有OSPF报文。路由器开始发送LSR后,进入Loading。
- Loading状态为LSA DD交互完毕,发送LSR分组,收到LSU。
- Full为全连接建立。
注意,点到点链路默认不选举DR和BDR。路由器ID默认为路由器的最大IP,但也可手动指定。配置OSPFv2时,不能将具体的网络和接口加入OSPF进程,必须用network命令指定,而OSPFv3支持对接口指定进程ID和区域号。
最近碰到的问题是ospf在交互时阻塞在一端阻塞在exstart状态,另外一端阻塞在exchange状态,上网查了一些资料,普遍都说是MTU不同造成的,然后我这查看了下报文交互中的MTU字段,还真不是这个原因。真实原因在于报文只是单向能通,另外一向的报文由于种种原因被中断了,导致状态一直阻塞在exstart/echange状态。
参考
http://www.cisco.com/c/en/us/support/docs/ip/open-shortest-path-first-ospf/13685-13.html
http://www.cisco.com/c/en/us/support/docs/ip/open-shortest-path-first-ospf/13684-12.html
《CCNA路由和交换认证》
说明
装载请注明地址: http://vinllen.com/ospf