十一、OSFP扩展知识点
1、关于OSPF状态机的问题
(1)在MA网络中(要进行DR/BDR选举)存在7种状态机,init是路由器A收到邻居B的hello包,但该hello包中没有A的RID;
(2)在点到点网络init状态机在判断可以建立邻居后,直接进入exstart状态机;没有2way状态机,就是只有6种状态机
注:在点到点网络实际仅存在邻接关系;在MA网络(选举DR/BDR)网络中存在邻居和邻接关系;
(3)邻接间的数据库默认一致,将不需要进入loading状态机;直接进入Full状态机。
(4)在hello时间较大时,比如p2mp和nbma工作方式,默认hello time为30s;
hello包收发的间隔较大,从down状态到init需要很长时间的等待,故在两种状态机,存在一个尝试(Attempt)状态机;
(5)华为设备中ospf存在加速建邻机制,即在两台路由器进行过一次邻接关系建立后,双方存在对端的缓存信息后;二次建邻时将快速完成状态机的切换;前提是缓存未删除,认证或拥塞
2、关于OSPF的DBD包,排序问题(隐性确认问题)
首先在exstart状态机,邻接设备间会使用不携带LSA头部信息的DBD包进行主从关系的选举,该选举的作用决定了那台设备优先进入exchange状态机的顺序;同时在exchange状态时,邻接间将收发携带LSA头部信息的DBD包;可能由于LSA头部信息较多,将多次收发DBD,也需要进行排序;所以主优先进入exchange,主在exchange优先发送DBD,在发送一个DBD后,需要接收到对端的DBD后,才能发出下一个DBD;目的在于避免两端同时发送携带LSA的DBD报头,导致链路拥塞; 故为了顺序正常,DBD需要进行隐性确认;
隐性确认:
(1)从在收到主的DBD包后,复制该DBD包的序列号回复DBD;
(2)在主或从未完成所有LSA头部信息的共享前,对端设备需要使用空包(不携带LSA信息,但复制了对端序列号的DBD)来完成确认;
注:隐性确认可以让ospf协议在exchange状态机取消ACK的确认;
八位二进制中,前5位为保留位0,后三位判断信息,DBD报头中存在标记位来告知邻接,是不是本地第一个DBD和最后一个DBD,同时标记主从关系:
(1)I位:为"1"标识这个包是本地发送的第一个DBD数据包,为"0"标识这个包不是本地第一个DBD数据包
(2)M位:为"1"标识这个包不是本地最后一个DBD数据包,为"0"标识这个包是本地最后一个DBD数据包
(3)MS位:为"1"标识为主,为"0"标识为从,第一次收发的DBD两端均人为是主;
DBD包中将携带接口的MTU值,两端MTU不一致将卡在exstart或exchange状态机;
默认华为不检测接口的MTU;
[r7]interface GigabitEthernet 0/0/1
[r7-GigabitEthernet0/0/1]ospf mtu-enable 开启接口mtu检测
3、附录E(RFC(注解) 2328(编号))
OSPF标准文档RFC2328中,附录e中描述了OSPF在某些特定环境下会出现路由计算错误问题,从而给组网带来隐患。
OSPF是一种基于链路状态型路由协议,其中3类、5类、7类LSA传递的是路由信息,Link-id为传递路由条目网络号,并且不识别网络掩码;区别不同的3/5/7类LSA使用Link-id、ADV router-id、LSA序列号,若是接收,所有到IP网络号相同但网络掩码不同的3/5/7类LSA不能区别只能学习先学到的。
例如:若R5路由器通过EIGRP学习到AS 100中的10.1.0.0/16以及AS 200中的10.1.0.0/24两个网段,若先将EIGRP 100中通过进入OSPF产生5类或7类LSA,Link-id为10.1.0.0,此时再重发布EIGRP 200,则10.1.0.0/24路由无法重发布,导致不能与10.1.0.0/24网段通信。
出现了这样的问题是因为OSPF中使用路由信息LSA时不能识别网络掩码,所以在RFC文档2328中的附录e提出了解决方案:
(1)若先将网络掩码长度较短的路由重发布,则先产生正常LSA,后将网络掩码长度较长LSA重发布时,则后进入的使用其对应的定向广播地址;
即:短掩码网段先进入,link-id正常显示;长掩码进入时link-id加反掩码
20.1.0.0/16 --- link-id 20.1.0.0
20.1.0.0/24 --- link-id 20.1.0.255
(2)若先将网络掩码长度较长的路由重发布,则先产生正常LSA,后将网络掩码较短的LSA重发布进入时,则先删除源LSA,将网络掩码较短的LSA通告,并且sequenceNUM+1,再将网络掩码较长的使用定向广播地址进行通告;
即:若长掩码先进入,再短掩码进入时,长掩码的信息被刷新为反掩码;
注意:解决方案需要注意两点:
1、所有子网掩码都是连续的
2、不存在一条外部路由的网络号正好与上述子网定向广播地址相同
4、OSPF选路规则
1、AD(管理距离,优先级)无关的一种情况:
r2(config)#router ospf 1
r2(config-router)#distance 109 1.1.1.1 0.0.0.0
本地从RID为1.1.1.1的设备处学习到路由条目,管理距离修改为109;
一台路由器从两个OSPF邻居处学习到了两条相同的路由时,仅比较度量值,不关注管理距离;因为仅针对一台邻居进行管理距离修改的结果是要么两台都被改,要么是修改失败;一定要关注IOS版本,因为有时修改RID大路由器管理距离生效,有时需要修改RID小的设备;
2、AD(管理距离)无关的第二种情况 O IA 3类
O IA 与 O IA路由相遇,到达相同目标的两条3类路由,这两条路由均通过非骨干传递,仅关注cost(度量)值,不关注管理距离;
①若一条通过骨干区域传递,另一条同过非骨干区域传递,那么非骨干传递的路由无效
②OSPF的区域水平分割:区域标号为A的3类LSA,不能回到区域A;目的是为了避免环路产生
③先比类型(5/7的LSA才存在类型),然后是区域(骨干优于非骨干),最后是cost值(小优)
3、OE 与OE,E为5类,N为7类,默认所有重发布进入路由条目均为类型2,类型2在路由表中cost值不会显示沿途的累加,仅显示起始度量;
两条均为OE2或者均为N2,起始度量相同; 关注沿途的累加度量 (OE2路由在表中度量默认不显示内部度量,仅显示起始度量)
两条均为OE2或者均为N2,起始度量不同;优先起始度量小的路径;
注:以上设计是便于管理员快速干涉选路;
OE1路由仅比较总度量(起始度量+沿途累加),仅修改起始度量不一定能干涉选路,必须在修改后使得总度量产生区别才能干涉选路;
④拓扑优于路由:1/2LSA计算所得路由优于3/4/5/7类计算所得
⑤内部优于外部:3类优于4/5/7类
⑥类型1优于类型2:E1优于E2,N1优于N2,E1优于N2,N1优于E2;E1与N1相遇,或E2与N2相遇,先比总度量(起始+沿途)小优;度量一致5类优于7类
注:上面多的看不懂,只看①~⑥条即可
5、FA-转发地址
正常OSPF区域收到的5类LSA不存在FA值;
产生FA的条件:
(1)5类LSA:假设R2为ASBR,g0/0口工作的OSPF中,g0/1口工作在非ospf协议或不同ospf进程中;若g0/1也同时宣告在和g0/0相同的OSPF进程中,同时该接口的工作方式为广播型;将在5类LSA中出现FA地址,地址为R2连接R3网段中R3的接口ip;
(2)7类LSA:必然出现FA地址
假设R9为ASBR,S0/0口工作的OSPF中,S0/1口工作在非ospf协议或不同进程中;S0/1未运行OSPF--FA地址为R9上最后宣告的环回地址(个别IOS也可能是最大环回接口ip地址),若R9没有环回接口;FA地址为R9上最后宣告的物理接口地址(个别IOS也可能是最大的物理接口ip地址)
R9的S0/1也工作OSPF协议中,S0/1接口工作方式为广播,那么FA地址为R10接口ip;
S0/1的工作方式为点到点,那么FA地址为R9的s0/1口ip
切记:在FA地址出现后,4类LSA无效;人为过滤掉4类LSA后,依然可达域外;当4类LSA存在,却人为过滤了到达FA地址的路由,那么将无法访问域外;一旦出现FA地址,所有的选路计算均基于FA地址进行;
①针对存在FA的5/7类路由,4类LSA无意义,仅递归到FA地址;若FA地址被策略过滤导致不可达;
②路由表中的度量是到FA地址的度量,不是到ASBR的度量;
6、NP位+E位
P位被加密,故抓包时看不见P位;
正常NSSA区域内的1类LSA中,N=1-E=0,标识该区域转发7类LSA,不转发5类
非NSSA区域,E=1 N=0,标识可以转发5类LSA,不能转发7类LSA;P位为1,标识该区域将执行7类LSA转换为5类LSA; P位为0,不能进行7类转5类;
区域0连接到两个非骨干区域,这两个非骨干假设为区域1和区域2;区域1/2同时连接同一个外部协议,且同时进行了重发布配置;区域1为NSSA区域,区域2为非NSSA区域;那么此时的区域1,P位=0不能进行7类转5类;故骨干区域只能收到从区域2来的外部路由;
若NSSA和非NSSA均将同一条域外路由向内部传递,仅非NSSA区域可以实现;
若区域1和区域2均为NSSA区域,那么ABR的RID大区域进行7类转5类,另一个区域不转,故同一条域外路由,骨干区域只能收到从一个NSSA区域传递的外部路由;若以上条件中,两个区域均为非NSSA区域,那么P位无效,故两个区域的路由均回进入骨干区域;