OSPF
OSPF(开放最短路径优先协议)
- 基本信息:
- 版本:OSPFV1(实验室版本)、OSPFV2(先投入商用的服务于IPV4的)
- IGP协议 LS算法(SPF最短路径算法,ISIS也采用此算法)
- 协议传递网络掩码(无类别路由协议)
- 基于IP封装,协议号89
- 采用基于带宽算得的Metric值:接口开销=带宽参考值/接口带宽。其中参考带宽值是可以配置的,其缺省值为100M
- 协议特点
- OSPF是一种典型的链路状态型路由协议(在传递路由信息的同时传递拓扑信息)
- 通过LSA传递路由及拓扑信息,LSA称作链路状态通告(LSA分为六种)
存在1、2、3、4、5、7类LSA
路由LSA:用来描述本路由器接口上的路由信息
拓扑LSA:描述区域内路由器之间的链接关系
-
- 更新方式:OSPF采用触发更新+30分钟的链路状态刷新方式进行路由信息更新
(同一LSA可能刷新很多次,为了区分LSA的新旧需要对LSA进行序号标识,30s的路由状态刷新是为了刷新***,在更新数据过大时保证可靠性)
-
- 更新地址:采用组播和单播更新,组播地址:224.0.0.5(所有运行OSPF的路由器都能够采用此地址进行更新)224.0.0.6(OSPF网络中所有的DR路由器才能够采用此地址进行更新)
- 协议支持路由认证(支持链路认证、区域认证、虚链路认证,认证方式分为明文认证和MD5认证)
- 支持手工汇总(仅在某些特殊的路由器上支持汇总,同时支持VLSM和CIDR)
- OSPF支持区域划分(为了减少LSA数量和传输范围)
- OSPF是一种非常消耗路由资源的协议,在一个cisco设备上最多只能运行31个OSPF路由进程(华为路由器同样)
- 支持等开销负载均衡
- OSPF区域
- 区域划分的意义:
减少LSA的数量(LSA信息十分庞大,LSA过多会增加路由器的开销)
减少LSA的传播范围(不同的LSA有不同的传输范围,控制LSA的传输范围可以)
防环
-
- 区域的划分是基于接口的(或者可以说是基于链路的)
- 区域的标记:
使用了32个二进制进行标记,可采用十进制或类似于IP地址的方式进行表示
-
- 区域的分类:
骨干区域:区域标记为0或者0.0.0.0的区域称为骨干区域
非骨干区域:区域标记不等于0或0.0.0.0的区域称为非骨干区域
-
- 区域设计原则:
向日葵型网络结构
1.OSPF网络中必须存在并唯一的骨干区域(单区域除外)
2.若存在非骨干区域,非骨干区域必须与骨干区域直接相连
-
- OSPF中路由器的角色:
骨干路由器:一个路由器上所有的接口都在骨干区域的路由器称为骨干路由器(临一中说法为所有的ABR、ASBR路由器称为骨干路由器,因为这部分路由器承担的工作量更大,需要具备更加强大的转发能力)
非骨干路由器:一个路由器上所有接口都在非骨干区域中的路由器
ABR:区域边界路由器,能够产生3类LSA的路由器
ASBR:自制系统边界路由器,能够产生5、7类LSA的路由器
- OSPF消息数据包
OSPF有五种消息数据包:
hello数据包、DBD数据包、LSR数据包、LSU数据包、LSACK数据包
OSPF数据包封装格式:
OSPF数据包头部:
头部字段解释:
版本(Version):
指OSPF的版本号,IPV4下的OSPF V2、IPV6下的OSPF V3
数据包类型(Message Type):
指出跟在头部后面的数据包类型
类型代码 |
描述 |
1 |
HELLO包 |
2 |
数据库描述包(DBD) |
3 |
链路状态请求数据包(LSR) |
4 |
链路状态更新数据包(LSU) |
5 |
链路状态确认数据包(LSACK) |
数据包长度(Packet Length):
指OSPF数据包的长度,包括数据包头部的长度,以八位组字节计
源Router-id(Soource OSPF Router):
发送该数据包的路由器的ROUTER-ID
区域id(Area ID):
发送该数据包的路由器所在的区域ID,若该数据包是在虚链路上发送的,则此数据包的area-id为0.0.0.0(骨干区域id 虚链路被认为是骨干区域的一部分)
校验和(Checksum):
对该OSPF数据包的标准IP校验和,用来确保数据的完整性
认证类型(Auth Type):
正在使用的认证方式
认证类型代码(Au Type) |
认证类型 |
0 |
空(无认证) |
1 |
简单的明文认证 |
2 |
加密的MD5认证 |
认证数据(Auth Date):
启用明文认证的认证密码信息
若认证类型为2,OSPF数据包头部结构会增加以下内容:
**ID(Key id):
标识认证算法和创建消息摘要使用的安全**
认证数据长度(Data Length):
指明附加在OSPF数据包尾部的消息摘要的长度,单位为一个八位组
加密***(Sequence Number):
加密***只加不减,用来防止重现攻击
hello数据包:更新地址224.0.0.5
Hello数据包用来建立和维持邻居关系,在建立邻居时有邻居建立条件,当相连的两路由器之间发送的Hello数据包中的相关信息满足建立邻居关系的条件时方可建立邻居关系。
Hello数据包字段解释:
Network Mask(网络掩码):发出数据包的接口的网络掩码,在MA网络中,若路由器接收该数据包的接口对应网络掩码与此掩码不一致将丢弃数据包
Hello Interval(Hello时间间隔):接口上发送的Hello包的时间间隔,默认BMA和P2P网络为10S,NBMA网络中是30S
Options(可选项):
DN |
MPLS v*n使用 |
O |
用于Opaque LSA |
DC |
需按链路上使用 |
L |
接受和转发具有外部属性的LSA的能力 |
N |
是否支持NSSA LSA |
MC |
MOSPF中使用 |
E |
是否支持五类LSA |
MT |
MT-OSPF中使用 |
Router Priority(接口优先级):用于选举DR/BDR,默认为1
Router Dead Interval(死亡时间):默认为Hello时间的4倍
Designated Router(指定路由器):MA网络中DR接口的IP地址,若不存在则为0.0.0.0
Backup Designated Router(备份指定路由器):MA网络中的BDR接口的IP地址,若不存在则为0.0.0.0
Active Neighbor(有效邻居):发出路由器的所有有效邻居的Router-ID
DBD:数据库描述数据包
1.主从选举DBD
(比较双方的router-id,router-id大的一方为主master,小的一方为从slave主要用于控制LSA的交互)
Interface MTU(接口MTU):发送DBD包的路由器接口的MTU值
Options(可选项):同Hello包的Options
DB Description:
I(初始位) |
发送第一个DBD时置为1,后续为0 |
M(后继位) |
发送不是最后一个DBD包时置为1,最后一个DBD包置为0 |
MS(主从位) |
置为1代表时Mater路由器,为0代表是Slave路由器 |
DD Sequence(数据库描述***):DBD包的***
2.携带LSA头部信息的DBD
LSA-type 1:LSA头部信息
LSR链路状态请求数据包,按照DBD报文中描述的未知LSA头部进行请求
LS Type(链路状态类型):包含的是一个链路状态类型号,用来指出LSA的类型;
Link State ID(链路状态ID):LSA描述的内容
Advertising Router(通告路由器):发出LSA的路由器的Router-ID;
LSU链路状态更新数据包,针对LSR的请求发送对应的LSA进行响应。携带LSA详细信息
Number of LSAs(LSA数量):数据包内的LSA的数量
LSA(链路状态通告):用来传递路由信息和拓扑信息
LSACK链路状态确认数据包
列出的LSA为确认的LSA条目
- OSPF基本工作过程
1.在路由器上运行OSPF协议后,进行network宣告(**接口,宣告路由)
2.路由器运行OSPF且进行接口宣告后,若未收到Hello数据包,则通过进行network宣告后的接口向外发送仅包含本路由器信息的Hello数据包
3.当一台路由器接收到来自其他路由器的Hello数据包时,解析Hello数据包中的数据,若Hello数据包中无其他信息,则记录发送该Hello数据包的路由器对应的R-ID,在下次发送Hello数据包时,会将记录的所有R-ID信息加入Hello中发出
4.当一台路由器接收到的Hello数据包中包含有自己的R-ID同时其中包含的某些信息符合某些条件(邻居关系建立条件)时,两路由器之间成功建立邻居关系(neighbor)
5.当建立邻居关系的路由器满足某些条件(邻接关系建立条件)时,两路由器进入邻接关系状态
6.进入邻接关系状态的路由器之间发送链路状态通告(LSA),其描述了路由器的一些详细信息(路由信息、拓扑信息),路由器在接收到LSA后会将其保存在自己的链路状态数据库中,最终同一区域的所有路由器会具有相同的链路状态数据库
7.当同一区域内的所有路由器具有相同的链路状态数据库时,每台路由器都会以其自身为根运行SPF算法,生成一个无环的拓扑图(用来描述到达他所知道的每台路由器的最短路径),此拓扑图就是SPF算法树
8.每台路由器都会基于SPF算法树构建出自己的路由表
9.当路由器成功构建路由表时,邻居之间交换的Hello数据包被称之为keepalive数据包(每隔Hello时间间隔周期性发送),并且每隔30分钟进行一次链路状态刷新
- 名词及状态解释
邻居关系建立条件
1.Area-ID一致
2.Router-ID不一致
3.区域认证类型及认证数据一致
4.hello时间和dead时间一致
5.特殊区域标识(E、N、P)一致
6.MA网络中掩码一致
7.更新地址同为单播或组播
8.更新源检测
DR选举
选举原因:
在MA网络中若构建邻居关系会产生多个邻居关系,造成邻居关系混乱,同时会发送大量的LSA,增加链路负载、产生大量重复LSA。为了解决此问题,OSPF协议在MA网络中进行指定路由器(DR)的选举
DR的工作:
管理该MA网络中LSA的传输过程、邻居关系,描述该MA网络和区域中其他路由器的连接关系
指定路由器是路由器接口的特性,而不是整个路由器的特性
在MA网络中,若DR路由器失效后,网络需要重新进行DR选举,在此阶段中网络处于无法发送有效信息的状态,为了避免此现象的发生,OSPF协议在MA网络中会在选取DR的同时再选取一台备份指定路由器(BDR)在MA网络中,所有的路由器会同时和DR、BDR建立邻居关系,DR、BDR之间也会建立邻接关系,这样在DR路由器失效时,MA网络可以保证正常通信
DR、BDR选举过程:
1.MA网络中的路由器接口都会有一个路由器优先级,用一个八位组数表示(范围0-255),cisco及huawei设备中缺省值为1,接口优先级可通过命令修改,优先级为0的路由器不参与DR、BDR选举
2.路由器在发送Hello数据包交互时,会携带自己的R-ID
3.MA网络中进入Two-way状态的路由器会检查每台邻居路由器发送的Hello信息,生成具有DR、BDR选取资格的路由器表项。然后所有的路由器会宣告自己同时为DR、BDR(接口优先级为0的路由器除外)
4.路由器在具有选取资格的路由器表项的基础上,生成还未宣告成为DR路由器的所有路由器集,若集中存在多台林距离路由器,则具有最高接口优先级的邻居路由器被宣告为BDR路由器,在接口优先级相同的情况下,选举R-ID最大的邻居路由器作为BDR路由器。
5.在所有的BDR中,接口优先级最大的称为DR,接口优先级相同则选择R-ID最大的为DR
当DR、BDR选举过程完成后,MA网络中在添加其他路由器,DR、BDR不变(默认抢占关闭),当DR无效时,BDR称为新的DR,然后在重新选举BDR。当DR、BDR同时失效时,重新进行DR、BDR选举。
当MA网络中只有一台路由器的接口运行了OSPF,则此接口等待选举时间后成为网络中唯一的DR,后续添加的路由器都无法抢占
若MA网络中所有的路由器都不具备DR、BDR选取资格,则所有路由器的邻居状态会卡在Two-way状态
DR、BDR选取成功后,所有路由器只和DR、BDR建立邻居关系。所有路由器都能够通过组播方式(地址224.0.0.5)发送Hello数据包,所有的DRothers路由器会通过组播方式(地址224.0.0.6)发送更新数据,只有DR、BDR可以读取。DR通过组播(地址224.0.0.5)向所有路由器泛洪更新数据
主从选举
1.路由器在进入Exstart状态后,开始进行主从关系协商,两台路由器都会发送一个MS位(主从选举位)置为1的、没有携带LSA信息的DBD报文(DBD中包含了MTU值,默认思科直接启用,华为中默认不包含MTU,可以使用命令**传递MTU值的功能,若双方的MTU值不值则卡在exstart 状态)来宣告自己为主路由器
2.具有较低R-ID的路由器将成为从路由器,并回复一个MS位置为0的、携带LSA头部摘要信息的DBD
3.对方收到该DBD时,标志着主从关系选举完成,两路由器进入下一阶段(Exchange状态)
数据包的确认
Hello数据包周期性发送,不需要被确认
主从选举DBD由携带LSA头部摘要信息的DBD进行确认
LSR由LSU进行确认
LSU由LSACK进行确认
LSACK进行隐式确认
Router-ID:路由器标识符
用于表示路由器在OSPF网络中的唯一性
选举规则:
1.手工指定最优先
2.选举逻辑接口中IP地址最大的
3.选举物理接口中IP地址最大的
华为中: 若以上三点都不满足,则可以创建router-id 为0.0.0.0 ;在使用逻辑或物理接口IP地址时,接口可以是关闭状态;若一台路由器启用了多个OSPF进程,不同进程可以使用相同的router-id(不推荐);
思科中:若以上三点都不满足,则无法启用OSPF;在使用逻辑或物理接口时,接口必须双 up ,该接口可以不通过在OSPF中;同一路由器上多个OSPF进程必须router-id必须不同;
全局模式下可以选择针对所有的OSPF进程修改router-id ;(若同时在接口部署时,接口优先生效)
FA规则:
- OSPF邻居状态机制
Down、Init、Attempt、Two-way、Exstart、Exchange、Loading、Full
1.路由器接口运行了OSPF协议并通告后,路由器开始发送Hello数据包,一旦路由器发送Hello数据包后,路由器接口进入初始化状态(Init)
2.路由器接收到包含自己R-ID的、由对方路由器发送的Hello数据包后,路由器对应接口进入双向通信状态(Two-way)也称为邻居状态(若在初始化状态下,从邻居路由器那里接收到一个数据库描述数据包,也可以引起邻居状态直接转换为Two-way状态)
3.在Two-way状态下,若接口网络类型为MA网络类型时,路由器之间会进行DR、BDR选举,具备DR、BDR选举资格的路由器会进入Attempt状态
4.当路由器完成了DR、BDR选举后,会进行主从关系选举(通过发送DBD报文进行主从关系选举)一旦路由器发送了DBD报文,则路由器进入预启动状态(Exstart)
5.主从关系选举完成后,两路由器会发送携带LSA头部信息的DBD报文,此时路由器会进入与交换状态(Exchange),此状态下会发送LSR数据包,但不会发送LSU数据包
6.当路由器发送了LSR后,其他邻居路由器会针对LSR回复LSU,一旦路由器开始发送LSU则进入加载状态(Loading),此状态路由器会进行大量的LSA学习
7.双方路由器的LSA同步之后,两路由器完成数据交换,进入最终的邻接状态(Full)
- OSPF基础配置
启用OSPF并指定R-ID
Network通告
1.创建区域后,在区域中**接口
2.创建区域后,在接口模式下将接口**至对应区域
**携带MTU
修改接口MTU(此命令会同时修改二层MTU及三层MTU)
查看二层接口信息
查看三层接口信息
OSPF邻居表
1.查看邻居详细信息
2.查看邻居总表
OSPF链路状态数据库表(LSDB)
OSPF路由表
- OSPF六种LSA
一条LSA由 LSA类型、Link-ID(链路标识符)、ADV router(产生路由器)来标识LSA的唯一性
1类LSA(router LSA)
1类LSA只在本区域内传输、携带本区域内路由器的路由信息及拓扑信息
Link-ID:产生者的router-id
ADV router:产生者的router-id
当接口为MA类型网络时,1类LSA不完整,需要借助2类LSA来传递路由信息和拓扑信息此时的1类LSA类型为transnet(传输网络)
1类LSA有四种类型:
Stubnet(末节网络)
Transnet(传输网络)
Point-to-point(点到点网络)
Virtual-link(虚链路)
2类LSA(network LSA)
在MA网络中1类LSA不完整,无法传递完整的路由信息和拓扑信息,故需要借助2类LSA来完成
2类LSA用来描述本MA网络路由器的数量,及本MA网络的网络掩码
Link-id:DR接口的IP地址
ADV router:DR所在路由器的router-id
3类LSA(summary LSA)
3类LSA又称汇总LSA,在域间进行路由信息的传递,产生于区域边界ABR,当穿越其他区域时,将由其他ABR重新产生
Link-id:传递路由的网络号
ADV router:默认为所在区域ABR的router-id
5类LSA(ase 外部LSA)
5类LSA用于传递不属于OSPF协议,并被重发布到OSPF协议中的路由,5类LSA在整个OSPF中传输(信息不变)
5类LSA标记的路由信息不携带拓扑信息,当5类LSA进入OSPF中后,其他路由器无法判别拓扑信息,故引入了4类LSA传输ASBR位置(拓扑信息)来配合5类LSA完成域外路由的传递
5类LSA存在两种类型
类型1 在传递过程中计算总度量值但不显示
类型2在传递过程中计算总度量值并显示
Link-id:所传递的外部路由的网络号
ADV router:产生该LSA的router-id
4类LSA(summary ASBR LSA)
4类LSA用于通告ASBR的位置(拓扑信息)来保证5类LSA可达,其产生于产生该5类LSA的ASBR所在区域的边界ABR,在除了本区域外的所有OSPF区域中传输,(在穿越不同的区域时,由新的ABR重新产生)
Link-id:ASBR的router-id
ADV router:默认ASBR所在区域的ABR的router-id
7类LSA(NSSA LSA)
- OSPF接口网络类型
Loopback
(cisco设备中存在,一般环回接口为该网络类型)该网络类型的接口所通告的路由默认为32位主机路由且cost值为1,cost值不会根据接口带宽或参考带宽的改变而改变,无法将其他接口网络类型修改为loopback
此网络类型下不发送Hello数据包、不建立邻居、无DR BDR选举
Point-to-Point
当物理接口采用串口(HDLC、PPP封装格式)时接口网络类型为此类型
此网络类型下Hello时间间隔10s、自动建立邻居、无DR BDR选举
BMA(broadcast multi access)
当物理接口为以太网接口时,接口网络类型默认为此类型
此网络类型下Hello时间间隔为10s、自动建立邻居、存在DR BDR选举
此接口网络类型下的路由器产生的1类LSA不完整,会产生2类LSA进行补充
NBMA
当物理接口为FR帧中继 ATM异步传输网络时,接口默认网络类型为此类型
此网络类型下Hello时间为30s、自动建立邻居、存在DR BDR选举
Point-to-Multipoint
该网络类型下会将物理接口IP地址以32位主机路由的形式宣告进入OSPF
此网络类型下Hello时间为30s、自动建立邻居、不存在DR BDR选举
- 限制LSA的数量
1.区域划分2.特殊区域3.LSA汇总4.LSA过滤
特殊区域:
Stub区域(末节区域)
能够拒绝4、5类LSA,并向区域内下发一个3类缺省LSA
Stub区域内不允许进行重发布、不能存在ASBR路由器、不能使用虚链路
Totally Stub区域(完全末节区域)
在stub区域的基础上在ABR上过滤3类LSA,仅保留3类缺省LSA
NSSA(非完全末节区域)
过滤4、5类LSA,在区域ABR上产生一个7类缺省LSA,NSSA区域允许进行重发布(允许存在ASBR)不能够使用虚链路
7类缺省LSA只能存在于本NSSA区域内,同时还会携带FA地址,
Totally NSSA(完全NSSA)
在NSSA区域的基础上再次过滤3类LSA,ASBR会向下发送一个3类缺省
- OSPF认证
OSPF同样存在两种认证方式(明文、MD5)
链路认证
区域认证
虚链路认证
- OSPF不规则区域
OSPF双进程重发布
在不规则区域连接非骨干区域的路由器上,启用多个OSPF进程,通过OSPF进程之间双向重发布解决不规则区域问题
虚链路(virtual-link)
通过配置虚链路可以延长0区域,在virtual-link两端建立OSPF邻居
配置虚链路后,默认只在邻居建立过程中发送Hello报文,邻居关系建立后会抑制Hello报文的发送,通过虚链路学习到的路由不会老化
Tunnel(建议使用方式)
在两个骨干区域连接非骨干区域的路由器上建立tunnel隧道,然后将tunnel宣告进入骨干区域