1
OSPF的基本概念
OSPF(Open Shortest Path First)
OSPF(Open Shortest Path First)是一个内部网关协议(Interior Gateway Protocol,简称IGP)。与RIP相对,OSPF是链路状态路有协议,而RIP是距离向量路由协议。 链路是路由器接口的另一种说法,因此OSPF也称为接口状态路由协议。OSPF通过路由器之间通告网络接口的状态来建立链路状态数据库,生成最短路径树,每个OSPF路由器使用这些最短路径构造路由表。
OSPF分为OSPFv2和OSPFv3两个版本,其中OSPFv2用在IPv4网络,OSPFv3用在IPv6网络。可用于大型网络。
基本概念和术语:
链路状态:
OSPF路由器收集其所在网络区域上各路由器的连接状态信息,即链路状态信息(Link-State),生成链路状态数据库(Link-State Database)。路由器掌握了该区域上所有路由器的链路状态信息,也就等于了解了整个网络的拓扑状况。OSPF路由器利用“最短路径优先算法(Shortest Path First, SPF)”,独立地计算出到达任意目的地的路由。
区域:
OSPF协议引入“分层路由”的概念,将网络分割成一个“主干”连接的一组相互独立的部分,这些相互独立的部分被称为“区域”(Area),“主干”的部分称为“主干区域”。每个区域就如同一个独立的网络,该区域的OSPF路由器只保存该区域的链路状态。每个路由器的链路状态数据库都可以保持合理的大小,路由计算的时间、报文数量都不会过大。
2
OSPF的数据包
1. hello包 发现、维持和创建邻居关系 10s 40s
2. dbd 包 数据库摘要
3. lsr 链路状态请求
4. lsu 链路状态更新 回应 lsr 承载lsa
5. lsack 链路状态确认包
3
OSPF的四种路由器类型
OSPF把自治系统划分成逻辑意义上的一个或多个区域,所有其他区域必须与区域0相连。
- 内部路由器(Internal Router):所有端口在同一区域的路由器,维护一个链路状态数据库。
- 主干路由器(Backbone Router):具有连接主干区域端口的路由器。
- 区域边界路由器(ABR):具有连接多区域端口的路由器,一般作为一个区域的出口。ABR为每一个所连接的区域建立链路状态数据库,负责将所连接区域的路由摘要信息发送到主干区域,而主干区域上的ABR则负责将这些信息发送到各个区域。
- 自治域系统边界路由器(ASBR):至少拥有一个连接外部自治域网络(如非OSPF的网络)端口的路由器,负责将非OSPF网络信息传入OSPF网络。
4
DR和BDR
指派路由器(DR)和备份指派路由器(BDR)
在多路访问网络上可能存在多个路由器,为了避免路由器之间建立完全相邻关系而引起的大量开销,OSPF要求在区域中选举一个DR。每个路由器都与之建立完全相邻关系。DR负责收集所有的链路状态信息,并发布给其他路由器。选举DR的同时也选举出一个BDR,在DR失效的时候,BDR担负起DR的职责。
点对点型网络不需要DR,因为只存在两个节点,彼此间完全相邻。 协议组成OSPF协议由Hello协议、交换协议、扩散协议组成。本文仅介绍Hello协议,其他两个协议可参考RFC2328中的具体描述。
当路由器开启一个端口的OSPF路由时,将会从这个端口发出一个Hello报文,以后它也将以一定的间隔周期性地发送Hello报文。OSPF路由器用Hello报文来初始化新的相邻关系以及确认相邻的路由器邻居之间的通信状态。
对广播型网络和非广播型多路访问网络,路由器使用Hello协议选举出一个DR。在广播型网络里,Hello报文使用多播地址224.0.0.5周期性广播,并通过这个过程自动发现路由器邻居。在NBMA网络中,DR负责向其他路由器逐一发送Hello报文。
5
OSPF的邻居建立过程
Down(关闭状态)开始发送hello但是没有收到邻居发来的hello 当收到对方发来hello 进入下一状态
Init(初始化状态)当收到对方发来的hello中有自己的Router-ID 进入下一状态
Two-way 邻居关系建立完成--进行选举--选举结束--进入下一状态--DR-other之间的稳定状态Exstart--选举主从关系--master先发DBD (Router-ID大的优先)
Exstart 预启动状态
Exchange 交换DBD
Loading 交换LSA 通过LSR去要LSA 对方通过LSU更新LSA
Full 邻接关系建立 启动SPF算法 计算路径
6
OSPF支持的网络接口类型
OSPF根据链路层协议类型将网络分为下列五种类型:任何二层链路,都会有一种网络接口类型来适应;根据拓扑和需求变化,可以改变网络接口类型来与之适应。
①点到点(P2P)网络
当链路层协议是PPP、HDLC时,缺省情况下,OSPF认为网络类型是P2P。在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。
Hello Time和Dead Time:10s/40s
是否选举DR和BDR:否
是否主动发现邻居:是
②广播(Broadcast)网络
当链路层协议是Ethernet、FDDI、以太网或者令牌环网时,缺省情况下,OSPF认为网络类型是Broadcast。在该类型的网络中,通常以组播形式发送Hello报文、LSU报文和LSAck报文。其中,224.0.0.5的组播地址为OSPF路由器的预留IP组播地址;224.0.0.6的组播地址为OSPF DR的预留IP组播地址。以单播形式发送DD报文和LSR报文。
Hello Time和Dead Time:10s/40s
是否选举DR和BDR:是
是否主动发现邻居:是
③NBMA(Non-broadcast multiple access)网络
术语解释:非广播网络是指支持两台以上路由器互连,但是不具有广播能力的网络。在非广播网络上,OSPF有两种运行方式,非广播多路访问和点到多点。非广播多路访问(NBMA):在NBMA网络上,OSPF模拟在广播型网络上的操作,但是每个路由器的邻居需要手动配置,而且只能与NBMA类型的网络接口建立邻居关系。NBMA方式要求网络中的路由器组成全连接;点到多点:将整个非广播网络看成是一组点到点网络。每个路由器的邻居可以使用底层协议例如反向地址解析协议(Inverse ARP)来发现。对于不能组成全连接的网络应当使用点到多点方式,例如只使用PVC的不完全连接的帧中继网络。
当链路层协议是ATM,FR或X.25时,缺省情况下,OSPF认为网络类型是NBMA。在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。
Hello Time和Dead Time:30s/120s
是否选举DR和BDR:是
是否主动发现邻居:否
④点到多点(Point-to-Multipoint)网络
没有一种链路层协议会被缺省的认为是Point-to-Multipoint 类型。点到多点必须是由其他的网络类型强制更改的,即工程按需。常用做法是将非全连通的NBMA改为点到多点的网络。在该类型的网络中以组播形式(224.0.0.5)发送Hello报文,以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)。
Hello Time和Dead Time:30s/120s
是否选举DR和BDR:否
是否主动发现邻居:是
⑤虚连接(Virtual Link)网络
从上面的文章可以看出,OSPF的骨干区域必须是连续的,但是在物理上无法连续的时候,我们可以采用虚连接使得骨干区域在螺髻山连续。那么虚连接就是可以在任意两个区域边界路由器上简历,但是要求这两个区域边界路由器都有端口连接到一个共同的非骨干区域。这个非骨干区域就是Transit区域。虚连接其实是属于骨干区域的一条虚拟链路。注意:实际组网的时候不推荐虚连接,要尽可能在规划网络的时候就避免虚连接的出现。
7
OSPF报文的目的地址
网络 类型 | hello | DD | LSR | LSU | LSAck |
Broadcast | 组播 | 单播 | 单播 | 组播 | 组播 |
P2P | 组播 | 组播 | 组播 | 组播 | 组播 |
NBMA | 单播 | 单播 | 单播 | 单播 | 单播 |
P2MP | 组播 | 单播 | 单播 | 单播 | 单播 |
8
OSPF邻居故障排除
- MA网段的掩码需要一致
- 相邻设备RID相同不能建立
- area id 相同
- hello间隔时间和死亡间隔都要一致
- MTU的问题(华为来讲默认情况不检测DBD报文中的MTU,思科默认检测)int g0/0/0
ip add 34.1.1.14 24 ospf mtuenable (两端都开启)使能OSPF针对DBD的MTU检测,如果不相同会卡到exstart/exchange
- 认证类型(0、1、2)和认证数据的一致性
- 可选字段的一致性特殊区域(stub——E 比特=0,即能否接收外部路由和NSSA区域NP)