2016-08-17-OSPF-2
帧中继环境
Hub-and-spoke,帧中继默认不转发组播报文。
首先让帧中继环境下能正常通信(DLCI映射表),然后让帧中继接口能产生组播hello或者单播hello;组播hello则再要让底层帧中继环境能转发组播报文,最后组播hello需要双方的hello时间一致、修改一方hello时间;单播不再阐述。
R(config-if)#encapsulateionframe-relay(配置封装格式,默认动态获取)
R(config-if)#frame-relaymap ip host 帧中继号broadcast(静态配置,broadcast参数表示可以支持转发组播报文)
ip ospf networkbroadcast //修改接口网络类型
frame-relay mapip 192.168.1.3 203 broadcast //做DLCI封装表,去往IP地址192.168.1.3使用DLCI标签203;手动静态映射(帧中继路由)
no frame-relayinverse-arp(关闭DLCI动态映射学习,静态配置更加稳定)
show frame-relaymap //查看映射表
★帧中继没有建立邻居的原因
① OSPF路由器没有产生组播hello
② OSPF路由器产生组播hello,但是底层环境不能转发组播报文
③ 底层可以根据DLCI转发,可能是网络类型导致的hello时间间隔不匹配
Ⅰ组播报文不能实现,可以手动修改成单播指邻居
ⅡOSPF在帧中继环境中是希望建立邻居关系的。如果某一台路由器收到组播的hello包,则会记住邻居的源IP地址,会以hello的时间间隔发送单播报文给邻居,以维持邻居关系。(就是一方修改,另一方不修改;前提是OSPF头部匹配)
★组播Hello包的TTL=1,而DBD的TTL=1(除P2P是组播外,其他网络类型都是单播形式)。在虚链路的情况下,单播hello和单播DBD的TTL=255;因为做了虚链路的两端路由器并不知道对方和我隔了多远,所以设置成255保证包可以到达对方。
★Exstart状态的1%的情况,在帧中继环境下,一方DLCI值有误(例如:R1去R2和R1去R3的DLCI对调了,而R2去R3没有错误),则R1组播发送hello包给R2的时候,会添加上DLCI;帧中继会查看识别DLCI值后转发给R3,由于R3又有去R2的路径,通过Hello包的(TTL-1)并转发给R2路由器。但是在建立邻居关系之后,DR和BDR选举主从路由器的时候,会发送空的DBD包,然而会像转发hello包的情况下,会先发送给R2让R2转发,但是DBD的TTL=1,所以(TTL-1)之后默认TTL=0不发送出去,直接丢包;所以DR、BDR一直建立不起主从路由器的关系,一直处于Exstart状态。
★Exstart状态的99%的情况,双方之间的MTU不匹配,从路由器一方可能会处于Exchange状态,主路由器一方会处于Exstart状态;或者主从路由器都处于Exstart状态。(从路由器收到主路由器的空的DBD包的时候,会自动对比RID的大小;而此后发送的DBD包就带有LSA摘要了,所以从路由器默认发送了DBD包,认为自己处于Exchange状态。)
※EXP5:测试Exstart的1%的情况???(√)
Forwarding address
用于防止次优路径(在5类和7类LSA中出现)
FA是ASBR通告的外部LSA中的字段,它的作用是告诉OSPF域内的路由器如何能够更快捷地到达LSA 5所通告路由的下一跳地址。以免OSPF 内部路由器在广播网络上以ASBR为下一跳,再由ASBR自己转发到正确的下一跳,而产生额外的路由。简单来说,FA字段的作用类似于BGP协议中的“第三方下一跳”概念,主要在广播共享网络中起作用。FA字段可以为全0或者非0两种选择。
FR是如何影响OSPF的路由选择的?
1、计算外部路由时,首先检查通告TYPE 5 LSA的ASBR是否存在,否则忽略该LSA;
2、检查TYPE 5 LSA的FA地址是否为0。如为0,说明路由必须经过ASBR转发,那么优选到ASBR metric最短的路径。
3、如果FA非0,那么优选到FA地址 metric最短的路径。
⑴ 一般情况下5类LSA的FA地址为0.0.0.0;
① 当FA地址全为0时,去往外部路由条目直接找ASBR;
a) 同个区域直接找,不同区域通过4类LSA找ASBR位置;
b) 在NSSA区域的ABR上开启了FA地址抑制功能,则在7类转5类LSA的时候FA地址也全为0;(只有在ABR上配置有效)
area 1 nssa translate type7 suppress-fa //ABR配置FA地址抑制
② 当FA地址不为0时,去往外部路由条目找FA地址。
a) 且要求FA地址可以通过O或者O IA或者是直连(该条目被自己通告进OSPF)的路由可达;
b) 如果FA地址不能通过O或者O IA 或者直连的路由可达,而是更为精确的可达性路径(比如通过静态去往FA地址,由于查找覆盖了O的条目),则属于该FA地址的所有5类LSA都将只出现在数据库中但不会出现在路由表中;
c) 如果FA地址本身就不可达,那么外部条目O E1和O E2也不会出现在路由表中;
d) FA地址不全为0的条件:(FA=x.x.x.x,即数据不需要经过ASBR路由器转发)
i. 在ASBR上,与外部相连的出接口必须通告进OSPF路由进程,也就是可以算作别的路由器O或者O IA的条目,即位于Network命令范围内;(√)
ii. 在ASBR上,与外部网络相连的出接口不能设置为被动接口;
//前两个规则是确保LSA能够被通告。
iii. 在ASBR上,与外部相连的出接口的OSPF网络类型不能是P2P或者P2MP(因为点到点链路不会出现次优路径)。
//确保网络类型是Broadcast或NBMA 的共享网络。
→注:5类LSA的FA地址一般是ASBR去往目标网段的下一跳地址。
⑵ 7类LSA的FA地址一定不为0.0.0.0;
★当NSSA区域有多个的连接骨干区域的ABR路由器,只有RID更大的路由器会进行7类LSA转5类LSA,RID小的路由器不会进行7类转5类。
① NSSA区域有多个ABR时,会进行7类LSA转5类LSA只会由最大的RID的路由器去转发,所以很有可能产生次优路径;为了避免这种情况,所以每个7类LSA都会生成FA地址,地址一般为ASBR上最后一个通告进OSPF的接口。那么一般推荐如果发现可能有次优路径的环境,会在ASBR上新加一个lookback口且最后通告进OSPF用来作为7类LSA的FA地址。
→注:lookback最后一个通告的比物理接口通告的优先级更高。
Ⅰ有环回口,优先选择最后通告的回环口地址;
Ⅱ没有环回口,选择最后通告的活动的物理接口地址。
② 特例:如果产生7类LSA的ASBR也满足产生5类LSA的FA地址规则,即连接外部路由的接口被通告进OSPF且没有被配置成被动接口,而且接口网络类型为多路访问,那么此时7类LSA的FA地址生成的方式和5类LSA一致,为外部路由下一跳的地址。
→注:7类LSA的FA地址一般是ASBR最后通告的OSPF接口地址;或者在满足5类FA地址规则时,为ASBR去往目标网段的下一跳地址(5类FA地址产生规则比7类LSA更优)。
前缀抑制功能
路由器互联的前缀抑制。
在router ospf 1这样的ospfv2进程内,如果配置了OSPF前缀抑制功能,能对本台设备产生的1类LSA的stub link是有影响的,会使自己点对点网络类型(stub network)的接口网段不在1类LSA内通告(而对lookback接口无影响),只会表示自己的点到点对端邻居的接口信息;但是prefix-suppression对transit network不会产生影响。
也会对本台设备产生的2类LSA(用来搭建网络拓扑)有影响,使得2类LSA的掩码长度变成32位;虽然这个2类LSA能够被传递出去,但是不会用来进行路由计算,使得这个2类LSA不可用。
→注:所以推测最终结果是:前缀抑制功能使得路由器的互联网段条目不被学习,但是由于这是一个链路状态路由协议,对于lookback接口这样的路由条目,还是能正确地计算出下一跳,以及能够正确的进行路由。
如果要使用这个功能,需要相关设备都要开启。
→注:多路访问网络发送在1类的LSA只会表述自己的接口状态、用2类LSA建立维持拓扑网络。P2P网络通过1类LSA发送自己的接口状态和邻居关系,直接可以知道拓扑网络,可以不用2类LSA来建立拓扑网络关系。
prefix-suppression //开启前缀抑制功能,较早的IOS不支持这项功能
部署和排错OSPF建立邻接的过程
1、 是否产生和发送hello包
a) 特殊的网络类型是不会产生组播hello包
i. 通告错误;
ii. 物理接故障;
iii. 被动接口(既不接收也不发送hello包);
b) 底层不支持转发组播
i. 使用单播建立邻居(可以单边做);
ii. 过滤优先级为6的协议报文;
2、 是否接收hello包
a) 被过滤了不会接收;
b) 参数不匹配也不会认为有效;
c) Hello报文内容匹配(区域号,认证,RID等);
3、 是否只是停留在two-way
a) 优先级设置为0,都是DRother;
4、 是否进入邻接关系
a) 判断接口优先级;
b) DBD参数;
i. TTL=1;
ii. MTU;
5、 传递有内容的DBD
6、 查看本端口和对端设置是否存在链路故障
XXXGrateful Restart
9类LSA,non-stop forwarding(nsf)。
GR(GracefulRestart,平滑重启)是一种在主备切换或协议重启时保证转发业务不中断的机制。
其核心在于:设备进行协议重启时,能够通知其周边设备,使到该设备的邻居关系和路由在一定时间内保持稳定。在协议重启完毕后,周边设备协助其进行信息(包括支持GR的相关协议所维护的各种拓扑、路由和会话信息)同步,在尽量短的时间内恢复到重启前的状态。在协议重启过程中不会产生路由振荡,报文转发路径也没有任何改变,整个系统可以实现不间断运行。
OSPF GR可以保证运行OSPF协议的路由器在进行主备切换或OSPF协议重启时,转发业务正常进行。
如何能使协议重启而不引起网络振荡和转发中断呢?
由于分布式设备的控制与转发是分开的,主控板负责整个设备的控制与管理,包括协议运行和路由计算,而接口板则负责数据转发。这样当发生主备倒换或协议重启时,数据转发仍然可以不中断进行。同时,如果在重启期间周边设备能维持邻居关系不变并保持路由稳定,并且在设备重启后能协助设备进行路由信息同步,在尽量短的时间内使得本设备的路由信息恢复到重启前的状态,那么就可以保持网络拓扑稳定,不引起网络路由振荡。
GR概念
1. GR Restarter:发生协议重启事件且具有GR能力的设备。
2. GR Helper:和GR Restarter具有邻居关系,协助完成GR流程的设备。
3. GR Session:OSPF邻居建立时进行关于GR能力的协商,一般把GR能力协商过程称为GRSession。协商的内容包括双方是否都具备GR能力等。一旦GR能力协商通过,当协议重启时就可以进入GR流程。
→注:分布式设备可以充当GR restarter和GR helper;而集中式设备只能充当GRhelper,协助GR restarter完成GR流程。
GR的LSA
9类Opaque LSA,即Grace LSA,用以在GR Restarter重启时,通知周边邻居进入GR Helper流程。
报文格式
Don’t Age Flag(1bit) |
LS Age (15bit,单位seconds) |
Options(8bit) |
0x09 |
|
Link State ID(32bit)
|
||||
0x08 |
0
|
|||
Advertising Route(32bit)
|
||||
LSA Sequence Number(64bit)
|
||||
Checksum(16bit)
|
Length(16bit) |
|||
TLVs
|
||||
TLVs:
i. Grace Period TLV:Type取值为1,长度为4字节,表示邻居设备进入GR Helper处理流程的最长保持时间。如果超过这段时间GR Restarter还没有完成GR处理流程,则周边邻居不再担任GR Helper角色。
→注:该TLV是Grace LSA必须携带的。
ii. Graceful Restart Reason TLV:Type取值为2,长度为1字节,告知邻居设备GRRestarter的重启原因。Value取值为0表示原因未知,取值为1表示软件重启,取值为2表示软件重新加载(升级),取值为3表示GR Restarter进行主备倒换。
→注:Grace LSA中必须携带该TLV。
iii. IP Interface Address TLV:Type取值为3,长度为4字节,用来告知发送Grace LSA的接口的IP地址,在网络上需要用该IP地址来唯一标识一台重启设备。
OSPF GR运行过程
IETF标准
具体流程如下:
(1) Router A重启之前向Router B发送Grace LSA;
(2) Router B收到Router A发出的Grace LSA后,会维持与Router A的邻居关系不变;
(3) Router A 与Router B进行Hello报文与DD报文交互和LSDB同步。由于GR过程中不能生成LSA,所以在LSDB同步过程中,如果Router A从Router B收到自己产生的LSA,直接存储下来并置上Stale标志;
(4)完成LSDB的同步之后,Router A发送Grace LSA(Grace Period TLV的Type值为0)通知Router B结束GR流程。Router A进入正常OSPF流程,然后Router A重新生成LSA,并删除那些置了Stale标志而又没有被重新生成的LSA;
(5) Router A在恢复所有路由信息后重新进行路由计算,重新刷新FIB表。
非IETF标准
非IETF标准GR主要是通过下面两个能力扩展来支持OSPF GR:
1. Link-Local Signaling(LLS):OSPF本地链路通告扩展,用来标识当前路由器和其他路由器进行一些可选信息的通信。
2. Out-of-band LSDB Resynchronization(OOB):带外的LSDB重新同步,完成无邻接关系变化的LSDB重新同步。
具体流程:
(1) Router A重启后向Router B发送LR和RS都置位的Hello报文,向Router B通告自己只是暂时断开马上就会恢复正常,并且自己具备OOB能力;
(2) Router B收到Hello报文后,也会向Router A回复一个LR仍保持置位但是RS位已经清除的Hello报文,向Router A通告自己已经知道它是要短暂离开,并且自己也具备OOB能力;
(3) Router A向Router B发送R置位的DD报文,向Router B发起LSDB同步请求,在LSDB同步期间,Router B不会将Router A从自己的邻居列表中删除,在自己生成的Router LSA(Network LSA)中,与Router A的邻居关系仍然为Full。由于GR过程中不能生成LSA,所以在LSDB同步过程中,如果Router A从Router B收到自己产生的LSA,直接存储下来并置上Stale标志。
(4)完成LSDB的同步之后,Router A结束GR流程,进入正常OSPF流程,然后Router A重新生成LSA,并删除那些置了State标志而又没有被重新生成的LSA。Router B在和Router A的邻居关系重新达到Full状态后退出GR流程,进入正常OSPF流程。
(5) Router A在恢复所有路由信息后重新进行路由计算,重新刷新FIB表。
配置命令
Router(config-router)#nsfcisco helper //开启优雅重启功能(链路的两端配置才有效)
▲根据不同厂商设备不一样,配置的命令会有所差异。有的是graceful restart、enable什么之类的。
Cisco NSF is supported by the BGP, EIGRP, OSPF, and IS-IS protocols for routing andby Cisco Express Forwarding (CEF) for forwarding。能使用快速转发机制的路由协议都应该可以配置优雅重启,需要一个主设备和多台辅助设备。