OSPF整理

OSPF

最短路径优先协议(Open Shortest Path First,OSPF)是一个内部网关协议(Interior Gateway Protocol,IGP),其路由信息是用于描述属于同一个自制系统(Autonomous System,AS)中的路由器。基于被称为SPF的链路状态路协议,从属于传输层使用端口号89。

一些其他定义:

1、 OSPF转发路由时遵从最佳匹配(最长掩码匹配),即使用最精确的路由条目。
2、当有路由器向外发送汇总路由条目时,所发布的路径为子路由条目中路径的最大值。
3、虚链路不能配置在骨干区域中。
4、外部路由信息不能被洪泛进末节区域,ASBR的位置要由非存根的ABR来汇总。

一些概念

1、自制系统自制系统(Autonomous System,AS):
一组使用相同路由协议交换路由信息的路由器,一个有权自主地决定在本系统中应采用何种路由协议的小型单位。

2、内部网关协议(Interior Gateway Protocol,IGP):
一个AS内的路由器所使用的路由协议(每个AS内互不相同)。

3、连接状态宣告(Link state advertisement,LSA):
描述路由器或网络自身状态的数据单元(包含有路由器的接口和邻接状态)。所有路由器和网络连接状态宣告的集合形成了协议的连接状态数据库。

4、指定路由器(Designated Router,DR):
除P2P网络外都有一台作为指定路由器(通过Hello协议选举)。大大减少路由器所需邻接关系,降低路由协议所耗流量,减少连接数据库的大小。

5、路由器标识(Router-ID,RID)是路由器的唯一标识。是用点分十进制表示的32位数字
优先级:手动配置>所有Loopback口中最大的IP地址>所有物理接口中最大的IP地址。
RID只有在OSPF进程重启时才会改变(更改IP并不会改变)。

6、区域标识/Area ID:
一个32bit数值用于识别区域(一般表现为IP地址形式),必须由手动配置。

7、虚拟链路(Virtual Link,VL):
被视为骨干区域的一部分,配置虚拟链路的路由器必须是ABR,用另一端ABR的RID标识并用区域内路径来转发数据包(metric值等于所有链路开销之和)。

8、代价(Cost):
指从该接口发送出去的数据包的出站代价,使用16位无符号的整数表示,范围在1-65535之间。
思科默认Cost为10的8次方/BW(BW:100Mbit/s时Cost值为1),当计算出现分数时四舍五入,当计算结果小于1时默认为1。

两种版本

OSPF Verison2:很快被替代,RFC1131。
OSPF Verison2:工作在IPV4,RFC2328。
OSPF Verison3:工作在IPV6,RFC2740、RFC5340。

四种网络类型

1、点对点网络(Point-to-point networks,P2P):
仅有一对路由器互联的网络(PPP、HDLC默认为P2P),不选举DR\BDR。以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。
2、点到多点网络(Point-to-Multipoint,P2MP):
只能由其他的网络类型强制更改所得(通常是NBMA),不需要选举DR\BDR。以组播形式(224.0.0.5)发送Hello报文,以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)。
3、NBMA类型(Non-broadcast multiple access,NBMA):
有大于两台路由器接入的无广播能力网络(ATM、FR默认为NBMA)需要一些额外配置以帮助发现邻居。以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。
4、广播网络(Broadcast networks,BMA):
有大于两台路由器接入的有广播能力网络(Ethernet、FDDI、令牌环默认是BMA)。
通常以组播形式发送(DR用224.0.0.6,其他路由器用224.0.0.5)Hello报文、LSU报文和LSAck报文,以单播形式发送DD报文和LSR报文。

四种路由器类型

1、内部路由器(Internal routers,IR):所有直接连接的网络都属于同一个区域。这些路由器只运行路由算法的一个副本。

2、区域边界路由器(Area Border Router,ABR):接入多个区域的路由器(至少有一个区域为骨干区域,可直连或通过虚拟链路Virtual Link逻辑直连)。ABR为每个接入区域运行一个路由算法的多个副本。ABR会将所接入区域的拓扑信息汇聚后发布到骨干区域。骨干区域再将这些信息发布到其他区域。

3、骨干路由器(Backbone Router,BR):至少有一个接口属于骨干区域,所有的ABR和位于Area0的内部路由器都是骨干路由器。

4、自治系统边界路由器(Autonomous System Boundary Router,ASBR):与其他AS交换路由信息的路由器,可以存在在任意位置,并由非存根区域的ABR来汇总发布到达ASBR的路由信息。

五种区域

1、标准区域: 可以接收链路更新信息和路由总结。
2、骨干区域(Backbone传输区域):
每个OSPF网络有且只有一个骨干区域(Area 0,区域ID 0.0.0.0),其余区域必须同骨干区域直接相连(或通过配置虚拟链路Virtual Link实现逻辑直连)。
骨干区域包含所有的ABR,区域间流量均通过区域间路由(inter-area routing)由ABR发送。域内流量则只是用区域内路由(intra-area routing)直接域内传输。
骨干区域收发所有类型的LSA。
3、存根区域(Stub Area):
当一个OSPF区域处于整个自治系统边界且不包含其他路由协议时可配置为OSPF Stub区域。存根区域内的路由器拥有ABR通告的本区域内所有路由器的完全路由表,和一条指向本区域ABR的默认路由用于外部通讯。
由外部路由参数ExternalRoutingCapability决定,TRUE时表示存根区域,不接收Type-5(除ABR外)。
4、完全Stub区域(Totally Stub):
该区域内路由器(除ABR外)的路由表中只有与之直连的路由器,和一条指向存根区域ABR的默认路由用于外部通讯(ABR不进行域内路由表宣告)。
完全存根区域(除ABR外)不接收Type-3、Type-4、Type-5型LSA。
5、非纯存根区域(No Stotal Stub area,NSSA):
该区域内可以在存根区域的基础上增加连接到(通过Type 7 LSA)运行外部路由协议的路由器。
因为该区域外部可能会有不支持Type 7 LSA的老式路由器,所以非完全存根区域的ABR会将Type 7 LSA转换为Type 5 LSA后对外宣告,并且更改LSA的发布者为ABR自己(正常外部路由协议的发布者为外部路由器)。

报文类型及格式

OSPF报文运行于应用层(端口号89),其5种报文的头部格式均相同。除Hello报文外,其它的OSPF报文都携带LSA信息。

防火墙默认只检查单播报文,组播报文均予以放行。

报文头部:
所有的OSPF数据包均有相同的报文头部。
1、Version(版本号,1字节):标识OSPF的版本号。
(1)OSPF Version2:2
(2)OSPF Version3:3
2、Type(类型,1字节):标识不同的OSPF报文类型。
(1)1:Hello报文
(2)2:DD报文
(3)3:LSR报文
(4)4:LSU报文
(5)5:LSAck报文
3、Packet length(报文长度,2字节):OSPF报文的总长度(包括报文头在内)。
4、Router ID(路由器标识,4字节):发送该报文的路由器标识。
5、Area ID(区域号,4字节):发送该报文的路由器所属区域。
6、Checksum(校验和,2字节):包含除认证字段(Authentication)外整个报文的校验和,用于确认对端路由器校验报文的完整性和正确性。
7、AuType(认证类型,2字节):指定所采用的认证类型(Authentication)。
(1)0:不验证
(2)1:简单认证
(3)2:MD5认证
8、Authentication(认证,8字节):鉴定字段,其数值根据验证类型(AuType)字段而定。
(1)认证类型为0时,此字段无意义(暂未定义,预留用)。
(2)认证类型为1时,此字段为认证密码信息。
(3)认证类型为2时,此字段为MD5摘要消息(包括Key ID、MD5验证数据长度和序列号的信息),MD5完整验证数据添加在OSPF报文后面,不包含在Authentication字段中。

Hello:
负责建立和维持邻居关系以及选举DR。广播和点对点网络上从所有路由器的所有接口周期性地发出。非广播网络上则从DR的所有接口周期性发出。
1、Network Mask(网络掩码,4字节):发送Hello报文接口的子网掩码。
2、Hello Interval(Hello间隔,2字节):发送Hello报文的时间间隔(默认10s,10-30s),虚链路上默认间隔为30s。
3、Options(选项,8比特):可选项(1为允许,0为不允许)。
(1)DN:用于在MPLS VPN中避免BGP和OSPF重复通告产生的环路。上述情境中,在Type3、5、7的LSA中置为1后,接收路由器就不能将该条LSA用于计算SPF。
(2)O:表明始发路由器是否支持Type9-11 Opaque LSA。
(3)DC:表明始发路由器是否为虚链路。
(4)L:本地链路信息(Link-Local_Signaling,LLS)是否开启平滑重启(Graceful Restart,GR)技术。
(5)NP:N置位仅用于Hello,表示是否有能力接收和发送Type7 LSA(NSSA External LSA),如果N置位为1则E置位必须为0。P置位仅用于NSSA的LSA中,表示Type7 LSA是否转换为Type5 LSA。
(6)MC:是否为IP组播OSPF。
(7)E:是否有能力接收和发送Type5 LSA(区域外部LSA,AS-External-LSA)所有末节区域该值为0,骨干区域、非末节区域和所有的外部lSA该值为1。如果设置错误,将无法形成邻接关系。
(8)MT:表明始发路由器是否支持多拓扑OSPF(MT-OSPF),多拓扑OSPF暂未广泛应用。
4、Rtr Pri(路由器优先级,1字节):发送Hello报文的接口的Router Priority,用于选举DR和BDR。
5、Router Dead Interval(路由失效时间。4字节):如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效(默认为40s,即4倍Hello时间)虚链路上默认间隔为120s。
6、Designated Router(DR路由器的IP地址,4字节):指定DR的接口IP地址,未选举时为0.0.0.0。
7、Backup Designated Router(BDR路由器的IP地址,4字节):指定BDR的接口IP地址,未选举时为0.0.0.0。
8、Neighbor(邻居,4字节):包含该路由器所有邻居路由器的Router ID列表。

数据库描述(Database Description,DD):
向邻居路由器描述本地链路状态数据库摘要,使邻居路由器识别出数据库中的LSA是否完整。
1、Interface MTU(接口MTU,2字节):在数据包不分段的情况下,始发路由器接口可以发送的最大IP数据包大小。(虚链路为0x0000)。
2、Options(选项,1字节):同Hello报文。
3、I(I位,1比特):用于帮助路由器识别连续发送的多个DD报文,第一个置1,后续置0。
4、M(M位,1比特):用于帮助路由器识别连续发送的多个DD报文,如果是最后一个则置0,其余置1。
5、M/S(M/S位,1比特):用于判断DD报文双方的主从关系(RID大的一方为主),本端为Master(主)置1,Slave(从)置0。
6、DD Sequence Number(DD报文序列号,4字节):标识所发送的的DD报文序列号,由Master随机生成初始值(每组通讯中Slave使用Master发送的序列号进行应答),每组加1。
7、LSA Header(LSA头部信息,4字节):标识DD报文中包括的LSA头部,可包含多个头部。

连接状态请求(Link State Request,LSR):
需要请求的详细LSA清单。如果路由器根据邻居的DD报文判断本地数据库不完整,则路由器会把不完整的LSA清单写入一个LSR中,发送给邻居。
1、Link state Type(链路状态类型,4字节):标识所请求的LSA类型。
2、Link State ID(链路状态ID,4字节):
(1)LSA1时为产生LSA1的路由器ID。
(2)LSA2为DR的接口IP。
(3)LSA3为目的网络的网络地址。
(4)LSA4为ASBR的RID。
(5)LSA5为目的网络的网络地址。
3、Advertising Router(通告路由器,4字节):发出LSA通告的路由器RID。

连接状态更新(Link State Update,LSU):
用于响应邻居路由器发来的LSR。根据LSR中的请求列表,发送对应LSA给邻居路由器以实现LSA的泛洪与同步。
1、Number of LSAs(LSA数量,4字节):标识该数据包中包含的LSA数量。
2、LSA(链路状态通告): LSA更新信息(包含一条一条具体的LSA信息)。

连接状态确认(Link State Ack,LSAck):
对收到的LSU进行确认。
1、Header of LSA(LSA头部):LSA头部信息(包含一条一条具体的LSA信息)。

各LSA详解

链路状态宣告(Link State Advertisement,LSA)路由器之间链路状态信息的载体,是LSDB的最小组成单位。如有多条不等值路径,则只接受和发送度量值最优的一条。如有多条等值路径,则负载均衡。
各区域允许通过的LSA
区域类型 Type1 Type2 Type3 Type4 Type5 Type7
骨干区域 允许 允许 允许 允许 允许 不允许
非骨干区域 允许 允许 允许 允许 允许 不允许
非末梢区域 允许 允许 允许 允许 允许 不允许
末梢区域 允许 允许 允许 不允许 不允许 不允许
完全末梢区域 允许 允许 不允许 不允许 不允许 不允许
NSSA 允许 允许 允许 允许 不允许 允许

LSA头部:
所有LSA具有相同类型的头部。
类型、链路状态ID和通告路由器3个字段可唯一的标识出每个LSA。
老化时间、序列号和校验和3个字段可唯一的标识出一个LSA最新实例。
1、Age(老化时间,8字节):默认3600s,没经过一台路由器会额外加1s,老化时间过后该LSA会作废,默认每1800s会泛洪刷新一次。
2、Options(可选项,4字节):同Hello中的可选项。
3、Type(类型,4字节):标识LSA的类型。
4、Link State ID(链路状态ID,4字节):
(1)LSA1时为产生LSA1的路由器ID。
(2)LSA2为DR的接口IP。
(3)LSA3为目的网络的网络地址。
(4)LSA4为ASBR的RID。
(5)LSA5为目的网络的网络地址。
5、Advertising Router(通告路由器,4字节)发出该LSA的路由器ID。
6、LS sequence number(LSA序列号,4字节):此字段用于检测旧的和重复的LSA。
7、Checksum(校验和,2字节):包含除Age字段外(如包含Age 则每次Age时间变化后都需重新计算)关于LSA所有信息的校验和。
8、Length(长度,2字节):表示包含LSA头部在内的LSA报文长度。

TYPE 1:Router LSA (路由器LSA)
由每台路由器产生,只在本区域内传播(目的地址255.255.255.255),列出了路由器自己的所有链路及其Cost,以及该链路上所有已知的邻居。
1、Link State ID(链路状态ID,4字节):始发路由器的RID。
2、V(Virtual Link Endpoint bit,虚链路端点位,1比特):当始发路由器为虚链路时置为1。
3、E(External bit,外部位,1比特):当始发路由器是ASBR时置为1。
4、B(Border bit,边界位,1比特):当始发路由器是ABR时置为1。
5、Number of Links(链路数量,2字节):该条LSA所包含的链路信息数量。
6、Link ID(链路ID,4字节):随着Link Type字段的不同表示含义也不同。
(1)Link Type为1:邻居路由器的RID。
(2)Link Type为2:DR路由器的接口IP。
(3)Link Type为3:网络地址。
(4)Link Type为4:邻居路由器的RID。
7、Link Data(链路数据,4字节):随着Link Type字段的不同表示含义也不同。
(1)Link Type为1:始发路由器的接口IP。
(2)Link Type为2:始发路由器的接口IP。
(3)Link Type为3:网络地址。
(4)Link Type为4:始发路由器接口的MIB-H ifIndex值(MIB为信息管理库)。
8、Link Type(链路类型,1字节):表明该链路的类型。
(1)Link Type为1:点到点连接到另一台路由器(较常用)。
(2)Link Type为2:连接到一个传输网络(即非末梢网络)。
(3)Link Type为3:连接到末梢网络。
(4)Link Type为4:虚链路。
9、Number of TOS(TOS号,1字节):TOS为OSPF V1中的内容,现基本弃用(Cisco只支持TOS=0)。
(1)0000(0):正常的服务。
(2)0001(2):最小成本代价。
(3)0010(4):最大可靠性。
(4)0100(8):最大吞吐量。
(5)1000(16):最小延迟。
10、Metric(度量值,1字节):路由器Cost。
11、TOS Metric(TOS度量,2字节):依赖于TOS号,表示一些附加的TOS信息。

TYPE 2:Network LSA(网络LSA)

只由DR/BDR发送和接收(在本区域内广播255.255.255.255),用于描述DR/BDR所连接的链路信息(不含度量值)。
1、Link State ID(链路状态ID,4字节):始发DR的接口IP。
2、Network Mask(网络掩码,4字节):始发DR的接口掩码。
3、Attached Router(相连的路由器,长度可变,为4字节的倍数):所有与DR形成邻接关系的路由器ID,也包括发送者自身的RID。

TYPE 3:Network Summary LSA(网络汇总LSA)

始发于ABR,用来告知区域内部的路由器(每次只能告知一个内部区域)如何到达区域外部(常见为缺省路由)。
1、Link State ID(链路状态ID,4字节):所通告网络的网络地址。
2、Network Mask(网络掩码,4字节):所通告网络的网络掩码。
3、Metric(度量,3字节):到达所通告网络的路由代价。
4、TOS(TOS,1字节):含义同TYPE1 LSA。
5、TOS Metric(TOS度量值,3字节):含义同TYPE1 LSA。

TYPE 4:ASBR Summary LSA(ASBR汇总LSA)

始发于ABR,用来告知区域内部的路由器(每次只能告知一个内部区域)如何到达ASBR。
1、Link State ID(链路状态ID,4字节):所通告ASBR的RID。
2、Network Mask(网络掩码,4字节):该环境下无意义,为0.0.0.0。
3、Metric(度量,3字节):到达所通告ASBR的路由代价。
4、TOS(TOS,1字节):含义同TYPE1 LSA。
5、TOS Metric(TOS度量值,3字节):含义同TYPE1 LSA。

TYPE 5:AS External LSA(自制系统外部LSA)

始发于ASBR,用来告知AS内部的路由器如何到达外部AS(配置时不建议将ASBR的外部地址也宣告进OSPF中,和Forwarding Address关联)。
1、Link State ID(链路状态ID,4字节):外部AS的IP地址。
2、Network Mask(网络掩码,4字节):外部AS的网络掩码。
3、E(1比特):表示这条路由使用的外部度量类型。
(1)E置为1:度量类型为E1(AS外部的开销+OSPF内部的开销)
(2)E置为0:度量类型为E2(只计算AS外部的开销),默认为E2。
4、Metric(度量,3字节):到达所通告网络的路由代价。
5、Forwarding Address(转发地址,4字节):到达目的网段的数据包应该被转发到的地址(一般是0.0.0.0,会直接转发到ASBR上)。
6、Extermal Route Tag(外部路由标志,4字节):该字段由外部路由协议控制,OSPF本身并不使用。
7、TOS(TOS,1字节):含义同TYPE1 LSA。
8、TOS Metric(TOS度量值,3字节):含义同TYPE1 LSA。

TYPE 6:Group Membership LSA(组成员LSA)

使用在OSPF的增强版本MOSF中,使用组播技术增强,暂未使用。

TYPE 7:NSSA External LSA(NSSA外部LSA)
始发于ASBR,用来告知非完全末节区域内部的路由器如何到达外部AS。只存在于非完全末节区域(因为TYPE 5 LSA无法在该区域传播),到达ABR后ABR会将其转换为TYPE 5 LSA后再进行广播。
1、Forwarding Address(转发地址,4字节):
(1)ASBR引入的外部路由为广播网络,且接口未启用passive-interface(被动接口,不发送接收Hello,不建立邻居关系)时该字段为到达外部路由的下一跳地址。
(2)如不满足条件一则为到达外部路由的下一跳RID。
2、Extermal Route Tag(外部路由标志,4字节):该字段由外部路由协议控制,OSPF本身并不使用。

TYPE 8:External Attributes LSA(外部属性LSA)
允许BGP的信息穿过OSPF自治区域,未广泛使用。

TYPE 9:Opaque LSA((链路本地范围LSA,link-local scope)
主要用于MPLS多协议标签交换协议。
1、Grace Period TLV(4字节):Type为1,表示邻居设备保持GR Helper的最长时间(超时则不再担任)。
2、Grace Restart Reason TLV(1字节):Type为2,用于告知邻居设备Grace Restart的原因。
(1)value置0:未知原因
(2)value置1:软件重启
(3)value置2:软件重新加载
(4)value置3:主备切换
3、Interface Address TLV(4字节):Type为3,用于唯一标识发送Grace LSA的设备。

TYPE 10:Opaque LSA(本地区域范围LSA,area-local scope)
主要用于MPLS多协议标签交换协议。

TYPE 11:Opaque LSA(AS范围LSA,AS scope)
主要用于MPLS多协议标签交换协议。

建立邻居关系 (Neighbor)

有两个端口连接到同一个网段且都为2-way时就为邻居关系,由Hello发现建立并维护。
端口状态:Down->Init->2-Way
状态机(常用):
1、Down:表示没有从任何邻居收到任何信息的初始状态。
2、Init:路由器已经从邻居收到了Hello报文,但是自己的Router ID不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。
3、2-Way:路由器发现自己的Router ID存在于收到的Hello报文的邻居列表中,已确认可以双向通信。

状态机(其他):
1、Attempt:此状态只存在于NBMA(非广播多路访问)网络,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文(发送间隔为HelloInterval)。如果Router DeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。
2、1-Way Received:表示路由器发现自己没有在邻居发送Hello报文的邻居列表中,通常是由于对端邻居重启造成的。
3、2-Way Received:路由器发现与邻居的双向通信已经开始(自己在邻居发送的Hello报文的邻居列表中)。Init状态下进入该状态后如果需要和邻居建立邻接关系则进入ExStart状态,不需要则进入2-Way。

建立过程:
RTA(RID:1.1.1.1)、RTB(RID:2.2.2.2)
1、 RTA/RTB互发Hello报文,此时邻居列表为空DR/BDR为0.0.0.0
(Down-> Attempt)。
2、RTA/RTB收到对方发送的Hello,发现其中邻居列表为空,于是将对方的RID写入自己的邻居列表中继续互相发送带有邻居ID的Hello(Attempt->Init)。
3、 RTA/RTB收到对方发送的Hello ,检查发现其中的邻居列表中有自己的RID,认为对方已知道自己的存在,邻居关系建立完成(Init->2-way)。

其他:
1、Hello均使用组播地址224.0.0.5发送,对不支持组播的需手动配置邻居(RTA:ospf 1 peer 2.2.2.2,RTB:ospf 1 peer 1.1.1.1)。
2、如果在死亡时间(默认4倍Hello时间,即40s)内未接收到邻居的Hello,则认为邻居已死亡,并将接口置为Down。

选举指派路由器(DR)和备份指派路由器(BDR)

选举前:

1、每台路由器的每个接口都有一个独立的路由器优先级(Router Priority),范围0-255(0代表不参与选举,越大越优先且默认为1)。
2、在选举过程未结束前,路由器的DR/BDR地址为0.0.0.0。
3、广播网络中所有路由器建立双向通信(2-way communication)关系后触发WatingTime计时器(40s)即开始选举,在计时器超时后选举出DR/BDR。

选举过程:
1、收集信息:
在WatingTime内对外收发Hello报文,并宣告自己为DR和BDR。
(1)如果新加入路由器接收到的Hello中有其他路由器宣告DR/BDR不是其他路由器自己,说明网络中已存在有DR/BDR,此时新接入的路由器会直接接受而不进行选举。
(2)如果在该时间内未收到其他Hello,则路由器认为自己就是DR。
2、选举BDR:
WatingTime超时后汇总出所有不宣告成为DR(网络中的DR others)的路由器子集并选举出BDR(依次比较:优先级最高>路由器ID最大)。
3、选举DR:
汇总出所有宣告成为DR的路由器子集并选举出DR(依次比较:优先级最高>路由器ID最大)。
4、如果没有路由器宣告自己是DR,则第2步选举出的BDR会成为DR,并转至第二步重新选举BDR。

选举后:
1、关系建立后如果有新的路由器加入进来会进入选举过程步骤1,直接接受当前DR/BDR(即DR/BDR不会被抢占)。
2、如果只有一台路由器有选举资格,那他将成为DR。
3、如果没有路由器有选举资格,那所有的邻居关系都会停留在2-way状态。
4、如果当前DR发生故障,则BDR会立即成为DR,并重新选举BDR。
5、如果当前BDR发生故障,则会重新选举BDR,当前DR不变。
6、DRother只与DR/BDR建立完全邻接关系。DR与BDR之间建立完全邻接关系。
7、关系建立后DR Others用224.0.0.6向DR/BDR发送更新报文,DR用组播224.0.0.5向全网更新。所有路由器以组播224.0.0.5发送Hello以维持邻接关系。

建立邻接关系(Adjacency)

1、邻居关系(2-Way)建立后,如果有需要建立邻接关系,端口就会进入ExStart状态,最终LSDB同步接口达到Full状态时才成为邻接关系。
2、P2P(点到点)网络、P2MP(点到多点)网络相邻路由器会建立邻接关系。
3、BMA(广播)网络、NBMA(广播)网络DR/BDR-DR/BDR、DR/BDR-非DR/BDR会建立邻接关系。
4、BMA(广播)网络、NBMA(广播)网络非DR/BDR-非DR/BDR只会建立邻居关系。

状态机:
1、ExStart:该状态用于确认Master/Slave关系与初始DD序列号(此时DD报文LSA内容均为空)。
2、Exchange:双方交互包含链路状态摘要的DD报文(正常DD报文)。
3、Loading:双方交互LSR、LSU、LS Ack报文用于同步LSDB。
4、Full:LSDB同步与邻接关系建立完成。

简要建立流程:
1、互发随机序列号的空DD确认主从(ExStart)->互发包含LSA摘要的DD(ExChange)->互发LSR、LSU、LSAck同步数据库(Loading->Full)。
2、如果其中一方的LSDB无需更新,则会在收到含有摘要的DD后直接进入Full状态。

详细流程:
RTA(RID:1.1.1.1)、RTB(RID:2.2.2.2)
1、RTA向RTB发送第一个DD报文(ExStart)。
(1)I位置1:这是第一个DD报文。
(2)M位置1:后续还有DD报文。
(3)MS置1:我是Master。
(4)序列号随机生成为X。
2、RTB向RTA发送第一个DD报文,序列号随机生成为Y(ExStart)。
(1)I位置1:这是第一个DD报文。
(2)M位置1:后续还有DD报文。
(3)MS置1:我是Master。
(4)序列号随机生成为Y。
3、RTA收到RTB发送的序列号为Y的空DD,发现对方的RID比较大,因此确定自己为Slave,产生一个Negotiation-Done事件变更状态。然后发送包含LSDB摘要信息的DD给RTB(ExStart->Exchange)。
(1)I位置0:这不是第一个DD报文。
(2)M位置0:后续没有DD报文。
(3)MS置0:我是Slave。
(4)序列号为Y。
4、RTB收到RTA发送的序列号为X的空DD,发现自己的RID比较大,因此确定自己为Master,产生一个Negotiation-Done事件变更状态。然后发送包含LSDB摘要信息的DD给RTA(ExStart->Exchange)。
(1)I位置0:这步是第一个DD报文。
(2)M位置1:后续还有DD报文。
(3)MS置1:我是Master。
(4)序列号为Y+1。
5.1、RTA收到RTB包含LSA的DD后因为自己是Slave,所以需要向RTB回复一个空的DD报文表示确认收到(序列号为Y+1)。
5.2、RTA发现5.1中收到的DD包含自己没有的LSA,于是向RTB发出LSR来请求这些信息,并产生一个Exchange-Done事件变更状态(Exchange->Loading)。
6、RTB收到RTA包含LSA的DD后,发现其中包含自己没有的LSA,于是向RTA发出LSR来请求这些信息,并产生一个Exchange-Done事件变更状态(Exchange->Loading)。
7、RTA收到RTB的LSR请求后,将RTB没有的LSA打包成LSU回复给RTB(Loading)。
8、RTB收到RTA的LSR请求后,将RTA没有的LSA打包成LSU回复给RTA(Loading)。
9、RTA收到RTB的LSU后,将其放入自己的LSDB数据库中,并回复LSAck给RTB(Loading->Full)。
10、RTB收到RTA的LSU后,将其放入自己的LSDB数据库中,并回复LSAck给RTA(Loading->Full)。

OSPF计时器

以下时间均为默认配置时的时间。
1、有关Hello的时间
(1)HelloInterval(Hello间隔,广播/非广播网络10s/30s):
路由器基于接口定时向邻居路由器发送Hello报文的间隔时间。
(2)DeadInterval(路由死亡间隔,4倍Hello间隔):
若在该指定时间内(默认4倍Hello间隔)未侦听到来自邻居的Hello报文,则认为邻居已死亡。
(3)WaitTime(等待时间):
开始选举DR/BDR前(2-way)路由器等待邻居Hello通告DR/BDR的时长,该时间总是等于DeadInterval。
(4)PollItervalTime(调查间隔,60s)
NBMA(非广播多路访问)网络专用基于接口定时向邻居路由器发送Hello报文(均为单播)的间隔时间。

2、有关LSA的时间
(1)MaxAge(老化时间,3600s):
LSA(每条LSA独立计时,全局配置)可保留在LSDB中的最长时间,超时后对应的LSA将从LSDB中删除。
(2)LSRefreshTime(LSA定时刷新时间,1800s):
LSA定时泛洪的时间间隔,每台路由器的每条LSA都会泛洪。
(3)MaxAgeDiff(最大寿命差值,900s)
用于帮助路由器判断先后收到的LSA新旧程度,由两条LSA的MaxAge时间相减得到。
(4)Retransmit Interval(邻接重传LSA的间隔时间,5s):
在LSU发出后规定时间内没有收到LSAck的情况下,重传LSU所等待的时间。
(5)MinLSInterval(LSA最短生成时间,5s):
禁止因不同事件触发的相同LSA在短时间内重复生成,可避免LSA频繁震荡对网络带来的冲击,但因LSA生成速度的降低导致无法尽快将网络拓扑变化向外通告。
(6)MinLSArrival(LSA最短到达时间,1s):
设备将会忽略掉较短时间内收到的相同LSA(多因网络频繁震荡导致)。
(7)InfTransDelay(传导延迟,1s):
LSA泛洪时每经过一台转发设备MaxAge所增加的时间。

触发更新机制

DR/BDR监控224.0.0.5和224.0.0.6,DRother只监控224.0.0.5。当Route发现自身拓扑有任何变化,便会立即向外发送更新。

区域内路由传递:
DR触发更新:
(1)DR发送一类LS Update(224.0.0.5)给所有路由器。
(2)BDR收到后回复一类LS Ack(224.0.0.5)给DR。
(3)DRoter收到后回复一类LS Ack(224.0.0.6)给DR。

BDR触发更新:
(1)BDR发送一类LS Update(224.0.0.5)给所有路由器。
(2)DR收到后回复一类LS Ack(224.0.0.5)给BDR。
(3)DRoter收到后回复一类LS Ack(224.0.0.6)给BDR。

DRother触发更新:
(1)DRother发送 一类LS Update(224.0.0.6)给DR/BDR。
(2)DR收到DRother的更新后发送二类LS Update(224.0.0.5)给BDR和所有DRother。
(3)BDR收到DR的二类LS Update(224.0.0.5)后回复二类LS Ack(224.0.0.5)给DR。
(4)DRoter收到DR的二类LS Update(224.0.0.5)后回复二类LS Ack(224.0.0.6)给DR。

其他路由器收到LSU后处理如下:
(1)如果LSDB中没有该LSA或LSU中包含的信息较新则按上述流程正常进行。
(2)如果LSDB中有与之相同的条目,则丢弃。
(3)如果LSDB中有这样的条目,但LSU中包含的信息较旧,则接收方会将一个包含较新信息的LSU发送给发送方。

区域间路由传递:
(1)依照区域内路由传递规则使用一类、二类LSA将更新信息传递到ABR。
(2)ABR(ABR一般就是DR)将该更新信息转换为三类LSA后依照区域内路由传递规则继续在ABR所在区域传播,直到下一个ABR。

LSA的老化机制

泛洪过程:
(1)LSA生成后会通过上述更新机制向外扩散,每通过一个转发节点,其MaxAge(初始为0)就会加1s,同时重新计算校验和。
(2)LSA被写入LSDB数据库后,MaxAge时间也会按时增加并且每5分钟重新计算校验和。
(3)直到LSRefreshTime后,该LSA会向外进行泛洪,泛洪会将MaxAge重新置为0,并将Seq(0x80000001到0x7fffffff)加1。
(4)Seq到达最大值时会立即触发一次泛洪,并将序列号和LSRefreshTime都置为初始值。

    识别新旧LSA:

OSPF通过LSA类型、LSA标识和宣告路由器来唯一识别一条LSA,当收到相同的LSA的多个实例时依次比较以下各项确定LSA新旧。
(1)序列号越大越新。
(2)校验和越大越新。
(3)如果有且只有1条LSA拥有MaxAge(3600秒)的老化时间,它就为最新。
(4)如果LSA老化时间差值(MaxAgeDiff)相差大于15分钟则MaxAge越小的越新(保留收到并丢弃自身的LSA)。
(5)如果寿命相差值小于MaxAgeDiff,则认为这些LSA是因为网络延迟等原因导致的同一LSA(保留自身并丢弃收到的LSA)。
(6)如果上述都无法区分,则认为这2个LSA是相同的。

选路机制

默认Cost=100,计算公式为Cost/(链路带宽Mbit/s),结果小于1时按照1计算。
这个公式也可以表示为“10^8/(链路带宽bit/s)。

选路依照以下规则依

路由指示符 路由类型
O OSPF区域内路由
O IA OSPF区域间路由
O E1 1类外部路由
O E2 2类外部路由

OSPF选路依照以下规则依次匹配选路。
1、域内(Intra-Area)>域间(Inter-Area)/域外(External)路由,且无论cost值大小。
2、域间(Inter-Area)>域外(External)路由。
3、域外(External)路由中,1类外部路由(E1)>2类外部路由(E2)。
4、域内ASBR通告的域外路由(E1/E2)优于其他Area ASBR通告的路由。
5、根据Cost值对比E1路由,E1 Cost=External Cost(ASBR指定)+Internal Cost。
6、根据External Cost值对比E2路由,若存在多个相同的E2路由,则对比其Internal Cost。
7、NSSA路由(Type-7 LSA)优于域外路由(Type-5 LSA)。
8、优选在LSDB中存在时间最长,即最“稳定”的LSA。

平滑重启(Grace Restart,GR)

在设备重启时通知周边设备(Type9 LSA),使其邻居关系和路由在一定时间内保持稳定,并在协议重启完毕后通过周边设备协助其恢复LSDB(重启过程中不会产生震荡,路由拓扑也不会改变)。

工作流程:
1、RTA重启后向RTB发送Grace LSA。
2、RTB收到后会在一定时间内维持与RTA的邻居关系。
3、RTA与RTB建立邻居关系并同步LSDB,此时RTA会将从RTB收到的由自己产生的LSA直接放入本地数据库中并置Stale(陈旧)标志。
4、LSDB同步完成后,RTA发送Grace LSA(Grace Period TLV)告知RTB结束GR流程(双方关系进入Full并正常转发数据)。
5、RTA进入正常OSPF LSA同步流程,重新生成LSA以替换掉置有Stale标志的LSA。
6、RTA恢复所有路由信息后会重新计算路由表与转发表。

配置方法:
1、在GR restarter设备上配置:
opaque-capability enable \开启扩展lsa识别
graceful-restart ietf \指定现有标准是ietf
2、在RG helper设备上配置:
acl number 2000 \配置ACL匹配监视链路
rule 0 permit source 10.1.1.0 0.0.0.3
opaque-capability enable \开启扩展lsa识别
graceful-restart help 2000 \配置设备是help设备
graceful-restart ietf \指定现有标准是ietf

特殊配置

一、主备线路配置
公司有两条ISP专线接入OSPF 100主干区域(电信1.1.1.1.1,联通2.2.2.2),希望默认使用电信专线,联通做备用(当metric 值相等时,两条链路负载均衡)。
配置如下:

Primary Router(电信)
Router ospf 100
Network 1.1.1.2 0.0.0.0 area 0
Default-information originate metric 10
!
Ip route 0.0.0.0 0.0.0.0 1.1.1.1.1

Backup Router(联通)
Router ospf 100
Network 2.2.2.1 0.0.0.0 area 0
Default-information originate metric 10
!
Ip route 0.0.0.0 0.0.0.0 2.2.2.2

二、重发布静态路由
将本设备的静态路由注入路由协议里面,让所有运行相同路由协议的路由器都能学到这条静态路由。
配置方法:
redistribute static subnets (OSPF模式下)。

三、引入缺省路由
当设备的路由表中有缺省路由时,会通过路由协议向邻居通告说自己有一条缺省路由,之后邻居会产生一条指向这台设备的缺省路由,配置如下:
default-information originate

如果想不论设备的路由表中是否有缺省路由都通告,配置如下:
default-information originate always

四、静默接口
禁止指定接口向外发送路由更新,该命令可应用于除BGP外所有基于IP的路由协议。
1、Passive-interface type number[default](指定不发送路由更新的协议号,可选)
2、passive-interface default(指定接口为静默状态)
3、no passive-interface Port-channel17(取消指定接口的静默状态)
4、no passive-interface Vlan2000(取消指定接口的静默状态)

五、配置实例
router ospf 100
router-id 10.56.29.117
area 10.56.31.128 stub
area 10.56.31.192 stub
redistribute static subnets
passive-interface default
no passive-interface Port-channel17
no passive-interface Port-channel18
no passive-interface Vlan2000
network 10.56.29.0 0.0.0.3 area 10.56.30.0
network 10.56.29.4 0.0.0.3 area 10.56.30.64
default-information originate always metric-type 1

常见故障

停留在各种状态原因
1、down状态:ospf没有运行,互不发包
2、init状态:一方收不到另一方的hello包,如卡在认证
3、two way状态:没有做出选举
4、exstart状态:mtu不匹配,exstart中的dbd携带mtu
5、exchange状态:包的交互有问题
6、loading状态:lsa加载不完全会卡在loading

邻居建立失败原因
1、 相同route-id
2、 认证问题
3、 区域ID不同
4、 特殊区域标示不一致
5、 优先级都为0,无法选举
6、 MTU不匹配卡住
7、 包的交互不完整,网络中丢包等
8、 lsa加载不完整
9、 hello时间不一致
10、 ma网络掩码不一致(不在一个子网)
11、 虚链路建邻abr的两个出接口不通
12、 shame-link建邻要保证源和目的单播能通

报错原因

一般性错误(General packet errors)

1、Router id confusion(错误的RID)
释义:收到一个含有和本机相同Router-ID的报文。
原因:一般由于错误配置或发送该报文的设备故障产生。
解决办法:
1、检查所有设备,看是否有错误配置的Router-ID。
2、打开Debugging ospf packet调试,并拍错。

2、OSPF bad packet
释义:收到一个Type域非法的OSPF报文。
原因:一般由于发送报文设备故障。
解决办法:
1、若问题不再出现,可置之不理。
2、打开Debugging ospf packet调试,并排错。

3、OSPF bad version
释义:收到一个带有错误版本号的OSPF报文。
原因:一般由于发送报文设备故障。
解决办法:
打开Debugging ospf packet调试,并排错。

4、OSPF bad checksum
释义:收到一个带有错误校验和的OSPF报文。
原因:一般由于发送报文设备故障。
解决办法:
1、若问题不再出现,可置之不理。
2、打开Debugging ospf packet调试,并排错。

5、OSPF bad area ID
释义:收到一个Area-ID与本地不匹配的报文。
原因:一般由于本地或对端Area-ID配置有误。
解决办法:
1、检查所有设备,看是否有错误配置的Area-ID。
2、打开Debugging ospf packet调试,并排错。

6、OSPF drop on unnumber interface
释义:在Unnumber接口上收到一个OSPF报文。
原因:在Unnumber接口(IP复用接口)上收到一个不是P2P网络类型的OSPF报文。
解决办法:Unnumber接口上网络类型必须为P2P。

7、OSPF bad virtual link
释义:收到一个单播OSPF报文,但找到相关的虚拟链路。
原因:一般是本地或对端的virtua-peer配置有误。
解决办法:
1、检查本地与对端的virtua-peer配置。
2、打开Debugging ospf packet调试,并排错。

8、OSPF bad authentication type
释义:收到一个带有非法authentication type域的OSPF报文。
原因:一般是发送报文设备故障。
解决办法:打开Debugging ospf packet调试,并排错。

9、OSPF packet too small
释义:收到的OSPF报文IP头长度域有错。
原因:一般是本地或对端的底层软件故障。
解决办法:
1、若问题不再出现,可置之不理。
2、打开Debugging ospf packet调试,并排错。

10、OSPF Neighbor state low
释义:收到一个在当前邻居状态下不应该收到的OSPF报文。
原因:一般对端的设备故障。
解决办法:
1、若问题不再出现,可置之不理。
2、打开Debugging ospf packet调试,并排错。

11、OSPF transmit error
释义:发送OSPF报文失败。
原因:一般是本地的底层软件故障。
解决办法:
1、若问题不再出现,可置之不理。
2、打开Debugging ospf packet调试,并排错。

12、OSPF interface down
释义:OSPF对应接口Down状态的次数。
原因:接口Down。
解决办法:该信息并不为报错信息。

13、OSPF unknown neighbor
释义:收到了不存在的邻居发来的update报文。
原因:一般是对端的设备故障。
解决办法:
1、若问题不再出现,可置之不理。
2、打开Debugging ospf packet调试,并排错。

HELLO报文错误(HELLO packet errors)

1、Netmask mismath
释义:在广播或NBMA网络上收到一个和本地接口掩码不相等的Hello报文。
原因:配置错误。
解决办法:检查本地和对端所有接口。

2、Netmask mismath
释义:在广播或NBMA网络上收到一个和本地接口掩码不相等的Hello报文。
原因:配置错误。
解决办法:检查本地和对端所有接口,检查有没有两个广播网络类型的接口出现掩码不相等的情况。

3、Hello timer mismath
释义:收到一个hello interval(hello发送周期)和本机hello interval不相等的Hello报文。
原因:配置错误。
解决办法:检查本地和对端所有接口上配置的ospf timer hello,看是否有hello时间不相同的情况。

4、Dead timer mismath
释义:收到一个dead interval(超时时间)和本机dead interval不相等的Hello报文。
原因:配置错误。
解决办法:检查本地和对端所有接口上配置的ospf timer dead,看是否有时间不相同的情况dead interval。

4、Extern option mismath
释义:收到一个外部属性不匹配的的Hello报文。
原因:外部属性(E-bit),用于表示当前区域是否可以传播ASE LSA,该问题属于配置错误。
解决办法:检查本地和对端的stub或nssa区域属性是否匹配。

5、NBMA neighbor unknown
释义:从网络类型是NBMA的接口上收到一个邻居发来的Hello报文。
原因:常见原因是该邻居未在配置为本机的peer中。
解决办法:检查本地的peer配置。

DD报文错误(DD packet errors)

1、MTU option mismatch
释义:收到一个和本机接口MTU不匹配的DD报文。
原因:因本机和对端的MTU配置不匹配导致。
解决办法:
1、打开Debugging ospf packet调试,并排错。
2、display ospf interface检查本地和对端接口的MTU,确保其相同。
3、在本端或对端接口上undo ospf mtu-enable

2、DD Unknown LSA type
释义:收到一个包含非法LSA的DD报文。
原因:发送该报文的设备故障。
解决办法:
1、若问题不再出现,可置之不理。
2、打开Debugging ospf packet调试,并排错。

LS ACK报文错误(LS ACK packet errors)

1、Bad ack
释义:收到一个ACK报文,但本地没有向对端发送过相应的LSA。
原因:发送该报文的设备故障。
解决办法:
1、若问题不再出现,可置之不理。
2、打开Debugging ospf packet调试,并排错。

2、UnKnown LSA type
释义:收到一个包含非法LSA类型的报文。
原因:发送该报文的设备故障。
解决办法:
1、若问题不再出现,可置之不理。
2、打开Debugging ospf packet调试,并排错。

LS REQ报文错误(LS REQ packet errors)

1、Empty request
释义:收到一个空的request报文。
原因:发送该报文的设备故障。
解决办法:
1、若问题不再出现,可置之不理。
2、打开Debugging ospf packet调试,并排错。

2、Bad request
释义:收到一个request报文,但这个报文所请求的LSA在这个邻居的request队列中。
原因:发送该报文的设备故障。
解决办法:
1、若问题不再出现,可置之不理。
2、打开Debugging ospf packet调试,并排错。

LS UPD报文错误(LS UPD packet errors)

1、LSA checksum bad
释义:收到一个包含错误校验和的update LSA报文。
原因:发送该报文的设备故障。
解决办法:
1、若问题不再出现,可置之不理。
2、打开Debugging ospf packet调试,并排错。

2、Received less recent LSA
释义:收到一条比LSDB中已记录更老的LSA。
原因:出现该情况大部分为正常现象。
解决办法:
1、若问题不再出现,可置之不理。
2、打开Debugging ospf packet调试,并排错。

3、Unknown LSA type
释义:收到一个包含非法类型的update LSA。
原因:发送该报文的设备故障。
解决办法:
1、若问题不再出现,可置之不理。
2、打开Debugging ospf packet调试,并排错。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枝心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值