OSPF邻居:
Router-ID设置方式:
自动选举:
- 优先选取本地逻辑接口IP地址大的一个。
- 如果没有逻辑接口,会选择本地活动的物理接口IP地址最大的一个。
手动设置.
哪些条那件会影响OSPF的邻居建立?
- hello interval 和 dead interval 不一致。(1)如果只调整hello interval,dead interval也会随着改变。(2)如果只调整dead interval ,hello interval 不会自动改。配置:需要在接口下修改。
- 网络类型不一致。(主要原因由于timer不一致导致的,比如:一边是broadcast,另一边是非广播。如果一边是带点到点,另一边是广播,是可以建立邻接关系,但收不到路由条目。)
- 认证不一致。(1.认证类型不一致。2.认证类型一致,密码不同。)
- 区域ID不一致。
- router-ID冲突(直连设备冲突无法建立邻居关系)
- OSPF版本不一致
- 不在同一网段。(只在广播,非广播,点到多点网络类型中有问题,因为在这些网络类型中存在源检测机制(源检测:收到报文后需要检测报文发送源和接收接口的地址是否在是否在同一网段),P2P,虚链路中是没有源检测机制的)。
- 掩码长度不一致。(在广播网和非广播中,如果两端掩码长度不一致,无法建立邻居关系(2类LSA中会携带子网掩码)。而在点到点,点到多点,和虚链路中不检测掩码长度。)
- silent接口。(被silent的接口不会再发送和接收hello报文。)
- 区域类型不一致。
- ACL(人为原因导致)
OSPF报文可靠性机制:
- 由于OSPF议是通过IP承载的,而IP是不可靠协议,所以OSPF需要自己的可靠机制来保证报文交互的可靠性。
- 在OSPF中有两种确认报文:1、显式确认报文(LSACK)2、隐式确认报文(hello\DBD\LSU).
- 可以建立邻接关系的设备,从2-way状态过渡到exstart,开始发送DBD报文,为了保证DBD交换的可靠性,需要选举主(Master)从(slave)关系。主从关系的选举是通过第一个DBD报文来选举的。第一个DBD报文用来选举主从,不携带任何的LSA摘要信息。从第二个开始携带摘要信息。
DBD报文中的主要内容:
- seq number 第一个DBD报文的序列号是随机生成的,而后续的序列号会由master端加1做累加。
- I(init):初始位。如果为1代表第一个DBD报文,如果为0,表示非第一个。
- M(More):更多位。如果为1代表后续还有更多的DBD报文,如果为0代表是最后一个DBD报文。
- M/S (Master/slave):主从位。如果为1 代表master,为0代表slave。
- MTU:携带报文发送端口的MTU值。
如何选取主从?
通过比较router—id选举主从,大的一端成为主,小的成为从。
什么情况下两端都是exstart状态?
从的MTU值小于主的,从不能接收到这的DD报文,主可以接收从的。
什么情况下一端是exstart,另一端是exchange状态?
从的MTU大于主的,从可以接收主的DD报文,状态从exstart过度到exchange,但是主不能接受从的。
ospf mtu-enable \接口下开启MTU检测,如果不配置,从接口发送的DD报文中的MTU字段填充为0,如果开启则填充该接口的MTU值。如果收到的DBD报文MTU值大于接口的MTU值,则丢弃该报文。
有哪些条件会影响邻接(Adjacency)关系的建立?
- MTU
- 链路状态请求列表或链路重传列表不为空(Loadding)
- DR优先级为0
OSPF接口状态机:(根据接口网络类型判定)
- DOWN->loopback(Loopback网络类型)
- DOWN->P2P(点到点,虚链路,点到多点)
- DOWN->waitting-> ?(DR,BDR,DRother)(广播,非广播)
DR和BDR的概念
为什么需要有DR?
选举DR的目的是为了避免在广播网和非广播网中LSA的重复通告而带来的带宽浪费问题。
在广播网和非广播网中需选举一个DR和BDR(注:DR必须要有,而BDR只是DR的备份,可以没有),其他的非DR设备叫DRother,DRother需要和DR、BDR建立邻接关系,同时和DR和BDR之间也需要建立邻接关系,而DRother之间只能建立邻居关系。DRother只会发送LSA通告给DR和BDR,后续由DR和BDR通告给其他的DRothter。
DR和BDR的选举比较顺序:
- 比较优先级,优先级越大越优。默认优先级为1,如果游优先级为0没有选举权。
- 如果优先级一致,比较router-id,越大越优。
DR和BDR的选举流程:
- 如果同一网段中的DR和BDR为空,首先选举BDR。将所有优先级大于0的设备放入到候选列表中(优先级为0的不参与选举),比较优先级,优先级越大越优。如果优先级一致,比较router-id,越大越优。BDR选举后,由BDR升级为DR并重新选举BDR。
- 如果同一网段中已有设备通告自己是BDR,但DR为空,则BDR升级为DR,重新选举BDR。
- 如果同一网段中已有设备通告自己是DR,但BDR为空,则选举BDR。
- 如果同一网段中只有唯一的一台设备通告自己为DR或BDR,则通告者为DR或BDR,DR或BDR角色不抢占。
- 如果在同一网段中存在多台设备同时通告自己为DR或BDR,则DR或者BDR需从新选举。
LSA
LSA报文关键字段:
- LS age: 此字段表示LSA已经生存的时间,单位是秒。 默认老化时间为3600s,时间是正向计时。LSA通过间隔时间为1800s。如果LSA在老化时间范围内都没有收到更新,则LSA会从老化并从LSDB中被清除。
- 序列号范围(0x80000001 - 0x7FFFFFFF)第一个比特位为符号。代表正负。
- LS type :次字段标识了LSA的格式和功能。常用的LSA类型有五种。
- Link State ID: 此字段是该LSA所描述的那部分链路的标识。例如Router ID。
- Asvertisting Router:此字段是产生此LSA的路由器的Router id。
- LS sequece number :此字段用于检测旧的和重复的LSA。
OSPF中如何判断LSA的新旧?
- 比较序列号,序列号越大越新(将接收到的LSA和本地保存的LSA做比较)。
- 如果序列号一样,比较checksum值,越大越新。
- 如果checksum值一样,需要看LSA age 时间是否等于Max age。如果等于则为最新。
- 如果LSA age 不等于 max age,需要执行Maxage diff算法,比较两个LSA age 的时间差,如果时间差大于15分钟,则LSA age越小越新,如果小于15分钟,则认为一样,忽略。
LSA名称 | Link state id |
---|---|
Router-LSA | 生成这条LSA的路由器的Router-id |
Network-LSA | 所描述网段上的DR的端口IP地址 |
Netword-Summary-LSA | 所描述的目的网段地址 |
ASBR-Summary-LSA | 所描述的ASBR的Router-id |
External LSA | 所描述的目的网段的router-id |
Router-LSA中有三个flag位:
- V(Virtual link): 置1标识本地配置了vlink,为0标识不存在。
- E(ASBR):置1标识本地是ASBR,为0不是ASBR。
- B(ABR):置1标识本地是ABR,为0不是ABR。
LSA中Link ID和date区域在不同类型中的意思:
type | link id | date |
---|---|---|
P2P | 邻居的Router ID | 该网段上本地接口的IP地址 |
TransNet | DR接口的IP地址 | 该网段上本地接口的IP地址 |
StubNet | 该Stub网段的IP地址 | 该Stub网段的网络掩码 |
VIrtual | 虚连接邻居的Router ID | 去往该虚连接邻居的本地接口的IP地址 |
过滤3类LSA的方式(ABR上操作):
- 在ABR上通过filter-policy过滤路由间接影响ABR通过3类LSA。
- 在ABR上通过在区域下配置filter过滤3类LSA,针对3类LSA的起源区域是出方向,针对3类LSA接收区域是入方向。
- 在ABR上通过区域下配置汇总不通告3类LSA。
- 在ABR的接口下这配置ospf fliter-lsa-out summary过滤从该接口通告的3类LSA。
虚链路:
虚链路的特点:
- 虚链路永远属于区域0.
- 虚链路通过单播的方式发送报文,TTL为255.
- 虚链路只能配置在普通区域中,不能配置在特殊区域中,同时也不能配置在骨干区域中。
- 虚链路只能在同一个区域建立,不能跨区域建立。
- 虚链路属于按需电路,需要将option字段中的DC位置置位(华为除外,华为的虚链路是通过点到点的方式来维护的,而不是按需电路)。
- 虚链路配置是需要指定邻居的Router-id,通过两次SPF算法确定目标地址和源地址,建立单播连接。
OSPF中的路由类型:
- O:域内路由
- OIA:域间路由
- OE/ON:外部路由(外部路由还分两种类型,分别是类型1和类型2)
- 如果在OSPF中通过不同的路由类型收到同一条路由,O>OIA>OE1>OE2.
虚链路有哪些问题?
- 虚链路中不能针对来自区域0的路由条目做汇总。
- 虚链路会引发环路问题。
- RID冲突或者修改RID会造成虚链路不稳定。
虚链路的好处:
- 可以解决网络设计问题。
- 可以当做后门链路使用,避免次优路径。
虚链路的应用场景:
场景一、骨干区域被分割 (A0—A1—A0)
ABR从非骨干区域接收到3类LSA后需要判断在骨干区域中是否存在活动的邻接关系,如果存在,则从非骨干区域接收的3类LSA,只接收不选路。如果不存在,则接收并选路。
注1:从虚链路收到的1类或者3类LSA所生成的3类LSA不会在通告回虚链路的始发区域(虚链路的创建区域),可以理解为虚链路的水平分割
注2:在存在虚链路的ABR上不能对来自于区域0(骨干区域)的路由做汇总。无效)(因为在MPLS VPN中会造成标签不连续问题)
注3:ABR如果从虚链路接收到一条3类LSA,但是在虚链路的始发区域中并不存在这条3类LSA,那么ABR不会针对这条3类做路由计算。(华为不会有路由,而思科会有路由,但是不通)
场景二、通过非骨干区域连接到骨干区域 (A0—A1—A2)
场景三、非骨干区域间互联,没有骨干区域 (A3—A1—A2)
注:(华为可以,思科不可以,思科规定虚链路必须建立在ABR上。)
场景四、充当后门链路使用,避免次优路径
华为中的虚链路引发的环路问题
外部路由
外部路由类型:
- 类型1:计算外部路由度量值,累加到达ASBR或者FA地址的链路cost值。
- 类型2:计算外部路由度量值,不累加到达ASBR或者FA地址的链路cost值。
注意:如果3类LSA中的FA地址被填充,则只计算到达FA的距离,如果FA地址不可达,则路由无效。
FA(forwarding address):为了避免次优路径。
在5类LSA中什么情况下会填充FA的地址?
- 引入外部路由下一跳的出接口被宣告进OSPF
- 出接口的网络类型不能是点到点或者点到多点
- 出接口不能是一个OSPF的silent接口
- 如果外部路由没有下一跳不会填充FA
注:如果引入外部路由的下一跳不是直连可达地址,需要通过迭代查询找到直连接口的下一跳并填充FA接口。
FA地址如何填充?
填充为引入外部路由下一跳的地址。
计算FA地址的条件?
到达FA地址必须是OSPF域内或者域间路由可达。
注:
- 如果5类LSA中FA地址被填充,计算外部路由只计算到达FA的距离,并且需要保证本地路由表中存在到达FA地址的域内或者域间路由。如果不存在路由条目,该5类LSA不能参与路由计算。
- 如果5类LSA中没有填充FA地址,计算外部路由只计算到达ASBR的距离。
外部路由选路:
- 如果都是类型2的外部路由,首先比较外部度量值,外部度量值越小越优,如果外部度量值一样,则比较到达ASBR或者FA的内部度量值,内部度量值越小越优。如果内部度量值一样,负载分担。
- 如果外部路由类型不同,类型1优先于类型2。不同类型的外部路由不会比较度量值。
- 注:如果存在多条前缀相同,但掩码长度不同的外部路由,需要通过通告子网的广播地址来区分不同的外部路由。原因是在LSA的头部中不携带子网掩码,如果前缀相同是无法区分路由条目的。
- 注:如果配置多个进程,外部路由计算需要优选度量值小的,如果度量值一样负载分担。(华为)
路由汇总:
- 域间路由在区域下汇总。
- 域外路由在进程下汇总。
注:如果不指定汇总路由的cost值,则继承明细路由的最大COST值。
外部路由过滤(只能在ASBR上过滤):
- 重分发的同时使用filter-policy实现外部路由过滤
- 冲分发的同时调用route-policy实现外部路由过滤
- 在ASBR上配置汇总不通过
- 在ASBR的接口下过滤5类LSA
OSPF中通告默认路由的方式:
- 在进程下配置 default-router-advertise 通过默认路由,前提是本地存在一条从其他(不包含从同一个进程的OSPF学到的默认路由)路由协议学的的默认路由。默认路由会以5类LSA进行通过。
- 在进程下配置deafult-route0advertise always 通过默认路由,不需要本地存在默认,可以直接通告
- 注:如果自己是默认路由的通告着,同时也从同一个进程的OSPF邻居学到默认路由,那么这条默认路由不选路。
特殊区域
Stub区域:
- 不能包含ASBR。
- 不接收5类LSA
Tollay Stub区域:
- 不接收3类和5类LSA
- 不能包含ASBR
NSSA区域:(非末节区域,在该区域中可以包含ASBR)
- 可以包含ASBR
- NSSA区域中的ASBR重分发的外部路由会以7类LSA的方式在NSSA区域泛洪,为了让其他的设备也可以接收到外部路由,会由ABR将7类转换位5类通过。
- 注:如果在区域中包含多个ABR,通过比较RID,由RID大的ABD进行7转5.
- 配置nssa区域后ABR会向NSSA区域通告一条默认路由,默认路由以7类LSA的方式通告。
Toallay Stub区域:
- 配置后ABR会向NSSA区域通告一条3类LSA的默认路由。
NSSA区域中过滤外部路由的方式:
- 重分发的同时通过route-policy过滤
- 重分发的同时通过filter-policy过滤
- 在NSSA区域的ASBR的接口上通过ospf filter-list-out nssa过滤7类
- 在NSSA区域的ASBR上配置汇总不通告。
- 在NSSA区域的ASBR上重分发路由时配置no-import-route参数,不会生成7类LSA,只有默认的7类LSA路由。
注:在华为中如果ABR设备从NSSA区域中收到一条7类的默认路由,不会做选路同时以不会进行7转5,因为如果选择了NSSA区域的默认路由会造成环路问题。(思科中会)
NSSA-LSA的Forwarding Address设置规则如下:
- 如果Options字段显示此LSA不可以被转换成为五类LSA,则Forwarding Address可以被设置成0.0.0.0;
- 如果Options字段显示此LSA可以被转换成第五类LSA,则Forwarding Address不能被设置成0.0.0.0;
- 如果所引入的外部 路由的下一跳在OSPF路由域内,则Forwarding Address直接设置为所引入尾部路由的下一跳;
- 如果所引入外部路由的下一跳不在OSPF路由域内,则Forwarding Address设置为该ASBR上某个OSPF路由域内的Stub网段(例如Loopback0接口)的接口IP地址,有多个Stub网段时选IP地址最大者。
7类LSA中FA地址的填充规则:
- 如果将引入外部路由下一跳的出接口宣告进OSPF,则FA地址填充为外部路由下一跳地址,并且该接口的网络类型不能是点到点或者点到多点,同时不能是一个silent接口。
- 优选宣告进OSPF中逻辑接口IP地址大的一个,如果没有逻辑接口,选择物理接口宣告进OSPF物理接口IP地址大的一个。
- 如果抑制FA地址可能会出环。配置:nssa no-summary suppress-forwarding-address
- 配置:zero-address-forwarding //通告7类LSA的时候将FA地址设置0,只有在ABR上配置才会有效果。
注:如果从外部路由可以同时通过OE和ON学到,首先比较外部路由类型,类型1>类型2. 如果类型相同,比较Metric值,metric值越小越优,如果metric值也一样,负载分担(华为的实现)。
OSPF故障排除流程
如果邻居关系处于Down状态:
- 检测物理接口是否正常
- 检测掩码、认证、区域ID等是否匹配
- 相应的接口是否在OSPF中宣告
如果邻居关系处于Init状态:
- 检测本端口和对端设备是否发生故障
如果邻居关系处于2-way状态:
- 查看接口优先级是否为0
如果邻居关系处于Exstart状态:
- MTU值是否匹配
如果邻居关系处于Exchange/Loading状态:
- 查看本端接口和对端设备是否发生故障