深度解析OSPF(开放最短路径优先协议)
目录
OSPF基本概念
协议号:89
ospf head长度:24
ospf hello长度:20
组播地址:
- 224.0.0.5
- 224.0.0.6
泛洪时间:30分
老化时间:60分
路由器类型
- IR——内部路由器
- ABR——区域边界路由器
- BR——骨干路由器
- ASBR——自治系统边界路由器
邻接状态的建立
OSPF七种状态
- Down——没有给邻居发送任何报文,也没有收到邻居报文
- Init——向外发送hello并收到了邻居的hello,并且这个hello的邻居表中包含了自己的RID,此时双向通信还未建立
- Two-way——邻居收到一个hello包,在hello包中看到了自己的RID,说明之前曾交互过hello报文,此时一个双向通信已经建立
- Exstart——选举主从,并确定DBD包的序列号
- Exchange——主路由器带动从路由器交互描述整个链路状态的DBD报文,本地路由器会发送最新状态请求包给他的邻居路由器,用来请求最新的LSA
- Loading——根据交互的DBD报文可以得知双方的LSA信息,更新自己没有的LSA信息
- Full——最终状态,链路状态请求列表为空,邻接建立完成
邻接建立条件
RID的选举
- 如果有使用router-id命令手工配置RID,则最优先使用RID
- 如果没有手动配置,则选取环回口(loopback)口上数值最高的IP地址
- 如果并没有配置环回口,则选取路由器上物理IP地址最高的地址作为RID——作为RID的接口不一定非要运行ospf协议
报文头部中匹配字段
- 版本需要一致
- RID不能冲突——若冲突ospf会因为无法选择出主从而停留在Exstart/Exchange状态
- 一条链路的两端必须在同一个区域
- 区域类型和认证类型一致
Hello包中匹配的字段
- 掩码必须一致
- hello时间和dead时间需要一致
- option中的E位和N位必须要一致
- NBMA(非广播多路访问网络)中要对邻居指peer,双方要互指
- 建立邻居的接口不能是静默接口
- Router priority字段——优先级为0则没有资格进行DR/BRD的选举
DBD报文中要匹配的字段——MTU需要一致,需要根据数据库的大小来确定包的大小
DR与BDR的选举细节
Designated Router(DR):指定路由器
Backup Designated Router(BDR):备份指定路由器
DR/BDR的作用:减少LSA流量的泛洪
- 网络中先选出BDR,如果发现网络中并没有DR时,BDR会将自己变成DR,之后再选出BDR
- 非抢占性,当网络中存在DR和BDR时,如果加入一台优先级更高的路由器时,为保持稳定性,DR和BDR并不会重新选取。
虚链路
虚链路是指再通过一个非骨干区域连接骨干区域的链路,简单讲就是区域0要跨过区域1通往区域2的时候,需要在ABR路由器做一条虚链路,让路由器打通一条逻辑链路。
配置虚链路要注意:
- 虚链路必须配置在两台ABR路由器之间
- 配置虚链路经过的区域必须拥有所有路由选择信息
- 传送区域不能是末梢区域
虚链路的存在增加了网络的复杂性,所以一个网络中虚链路的永久存在是一个比较糟糕的网络标记。
注:R2环回口2.2.2.2,R3环回口3.3.3.3
虚链路配置
R2#configure t
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#router ospf 100
R2(config-router)#area 1 virtual-link 3.3.3.3
R2(config-router)#end
R3#configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
R3(config)#router ospf 100
R3(config-router)#area 1 virtual-link 2.2.2.2
R3(config-router)#end
OSPF常见六种LSA(链路状态数据库)
1号、路由器LSA(Router LSA)
每台路由器都会产生Router LSA,这个最基本的LSA通告列出了路由器上所有的链路或者接口。
作用:用来描述区域内部与路由直连链路信息
Age-length(LSA头部)
Link state ID:路由器本身ID
Advertising router:通告自己的RID
Flags:用于指明自己的身份
- (V)Virtual link endpoint:虚链路端点
- (E)AS boundary Router:ASBR
- (B)Area border router:ABR
2号、网络LSA(Network LSA)
每一个多路访问网络的指定路由器(DR)将会发出此LSA,其作用是用来描述广播型网络信息。
Link State ID:DR的接口IP
Advertising Router:DR的RID
A’t’r’t
3号、网络汇总LSA(Network Summary LSA)
此LSA是由ABR始发,用来发送网络汇总LSA到一个区域,用来通告该区域外的目的地址。其作用是:描述区域间信息。
4号、ASBR汇总LSA(ASBR Summary LSA)
此LSA是由ABR始发,ASBR汇总LSA目的是一台ASBR路由器,除此之外和其他网络汇总LSA都是一样的。
作用:描述ASBR可达信息。
5号、自主系统外部LSA
始发于ASBR,用于通告OSPF自主系统外部目的地,其作用是描述外部引入路由。
7号、NSSA外部LSA
其作用是在NSSA区域描述引入外部路由
路由认证
- 明文认证
- 暗纹认证——MD5
- 区域认证——全接口开认证
- 接口认证——接口配置密钥、接口区域进程开启认证、虚链路认证
末梢(Stub)区域
stub区域
stub是整个OSPF的边界,也是拓扑的边界,区域中不能存在ASBR,stub区域不接受LSA5,以一条缺省路由代替
完全stub区域
是OSPF的边界不接受LSA3、LSA4、LSA5,以缺省路由代替
NSSA区域
stub的扩展,OSPF的边界,但是不是拓扑的边界,过滤了LSA3、LSA4、LSA5但是存在LSA7,把外部路由汇总为LSA7,只存在于NSSA内部区域,并在ABR上将LSA7转化为LSA5。
OSPF数据包格式
Hello包
hello包是主要用来建立和维持邻接关系,既然要维持邻接关系,那hello包中的某些参数需要一致。在OSPF稳定之后,hello包将作为keeplive每隔30分钟重新泛洪一次。
Network Mask:子网掩码
Hello Interval:hello时间间隔
Router Priority:路由器优先级
Router Dead Interval:路由无效时间间隔
DR:指定路由器
BDR:备份指定路由器
DBD包
DBD包用来描述正在建立连接的邻接关系,主要是整合始发路由器数据库中的一些或者全部LSA信息。
Interface MTU::接口MTU
Options:可选项
LSR(LS Request)
在数据库同步的时候,如果收到自己数据库中没有的LSA,此时就会触发更新,将自己未拥有的LSA列表放入LSR中进行请求。
Link State Type:链路状态类型
Link State ID:链路ID
Advertising Router:通告路由器
LSU(LS update)
在收到LSR之后会触发更新,将LSA条目放入LSU以泛红扩散的方式发送。一个LSU可以携带一条或者多条LSA,但是这些LSA只能传送到始发路由器的直连邻居。收到LSA的邻居路由器在负责更新数据包中重新封装相关LSA,从而进一步泛洪扩散到他的邻居。
Number of LSAs:LSA数量
LSA名与长度
LSACK
路由器在收到邻居路由器收到的每一个LSA都必须在链路状态中进行明确的确认。