OSPF路由协议是非常流行的IGP路由协议, 被广泛使用, 协议负责知识点多, 所以先搭建个框架,便于快速学习和记忆, 也方便回顾, 无需深入每个细节, 但要清楚哪些是关键的点;
Rip协议: 适用于小型网络,使用跳数进行最优路径选择无法选出最佳路径.
Osfp协议: 每台路由器都拥有完整的拓扑信息, 基于带宽选路, 适合于大型网络;
在一个区域内,网络的变化(导致一类,2类LSA发生变化)会触发整个区域内SPF协议的重新计算, SPF计算过程中会影响业务的转发, 如果一个区域内有足够多的路由器, 那影响就会更大.
区域出现后1,2类LSA的变化只会在区域内引发ospf的重新计算, 不会影响其他区域, 大大降低了网络变化对整网的影响.
参考下图:
ABR: R1,R3
骨干路由器: R1,R2,R3
ASBR: R11 (R11引入外部路由)
Stub区域:
不接收外部路由, ABR只需要产生一条默认路由发送给stub区域的路由器即可, 降低了对stub区域路由器的资源消耗;
Totally Stub区域:
既不接收外部路由,也不接收区域间路由, 进一步降低了对区域内路由器资源的消耗, 现实网络中有很多老旧的路由器路由规格比较低, 为了兼容它们, 所以就有了这两种区域的出现;
NSSA区域:
NSSA其实是Stub区域的一个变形,它和Stub区域有许多相似的地方。NSSA区域不允许存在5类LSA。Type7 LSA由NSSA的ASBR产生,仅在本NSSA内传播。当Type7 LSA到达NSSA的ABR时,由ABR将Type7 LSA转换成Type5 LSA,传播到其他区域,负责转换LSA的ABR也称为转换路由器。
1类LSA:
通告路由器 : 生成LSA的router id
链路状态id: 生成LSA的router id
2类LSA:
通告路由器 : DR
链路状态id: DR的IP
3类LSA:
通告路由器id: ABR
链路状态id: 通告的网络地址
4类LSA:
通告路由器 : ABR
链路状态id: ASBR的router id
5类LSA:
通告路由器 : ASBR
链路状态id: 外部的网络地址
7类LSA:
通告路由器 : NSSA区域中的ASBR
链路状态id: NSSA区域外部的网络地址
LSA通过三个字段进行唯一标识 : LS-TYPE, Advertising-Router, Link State Id.
流量方向上出接口的成本之和就是累计的成本.
如下图:
R1 访问 6.6.6.6,
累计成本 = R1_0/1(cost=10) + R2_0/1(cost=10)+R3_0/1(cost=10) = 30
5类LSA E1和E2 路由的区别: E2路由计算累计成本时不计算自治系统内的成本; E1路由的累计成本需要加上自治系统内的成本.
DR产生的背景:
在广播型网络中,为了避免所有路由器full-mesh的建立邻接关系,导致交换路由信息时耗费过多的带宽资源, 引入了DR/BDR/DROther 角色;
DR和BDR建立邻接关系;
DR和所有DR-Other建立邻接关系;
BDR和所有DR-Other之间建立邻接关系;
DR-Other之间建立two-way关系;
当DR故障了,BDR接替DR的角色,DR-Other中再重新选举BDR;
新增的路由器即使优先级优于已有DR, 也不会重新计算DR, 保证了网络的稳定, 具体做法是: 新增的路由器发送的hello报文会在一个dead-time时间内不去宣称自己是DR, 在这个时间段内收到hello报文中已有DR存在了, 它就会接收这个DR的存在, 不去重新参与DR选举;
为什么要了解邻居状态机?
可以帮助你在邻居建立发生异常的情况下快速定义问题, 特别是不同厂家的设备对接时更容易出现一些问题.
以广播型网络为例:
two-way状态协商过程
注: 此过程会比较hello-interval,dead-time, 认证等参数是否一致;
(1) A发送hello报文到B, 邻居为空;
(2) B收到hello后,将1.1.1.1存入邻居字段,发送hello到A, 并将邻居状态设为init;
(3) A收到携带自己router-id的hello, 将2.2.2.2加入到邻居字段, 发送hello到B,
并将邻居状态设为two-way;
(4) B收到系带自己router-id的hello, 将邻居状态设为two-way;
邻接关系协商过程
1. 主从关系协商,DD交换
首先进行DD主从关系写上, 每队邻接关系的两台路由器都要进行主从关系协商,
I =1: 表示是第一个DD报文;
M=1: 表示不是最后一个DD报文;
MS=1: 表示自己是Master;
第一个DD报文不携带LSA摘要
(1) A发送DD报文[Seq=X, I=1,M=1,MS=1] , 宣称自己是主;
(2) B收到A的DD后,发现自己的Router-Id更大, 认为自己是Master, 发送序列号为Y的DD报文给A;
(3) A收到后,认可B为主, 将自己设置为slave状态, 并将邻居状态改为Exchange, 使用序列号Y发送DD报文, 这个DD报文开始携带了LSA摘要信息;
(4) B收到A的DD后, 将邻居状态改为Exchange状态; 发送DD报文,序列号改为Y+1, 发送的DD报文开始携带LSA摘要信息, 如此A,B之间进行多轮的DD交换;
2. LSDB同步:
(1) A收到最后一个DD报文(M=0)后,发现B的很多LSA自己没有,将邻居状态改为Loading, B也收到了最后一个DD报文,发现A的所有LSA自己都有, 将邻居状态设置为Full;
(2) A发送LSR请求,B使用LSU回应, A使用LsAck确认;
(3) A完成全部的LSDB同步后, 将邻居状态改为Full;
LSA有个Age字段, LSDB默认30分钟更新一次, 3600秒老化,删除LSA;
当你在一台OSPFDR-Other路由器上undo network 一条路由时, DR-Other会向DR发送一条LSU更新,将那条LSA的age设置为3600秒, DR再通告给所有邻接对象去删除这条LSA;
问: R1作为ABR生成一条3类LSA, 通告路由器时1.1.1.1; 在R31上看到这条3类LSA的通告路由器id是多少呢?
答: 因为R31不认识谁是R1, 它只认识R3, 所以当R3收到这条3类LSA时, 会更新通告路由器为3.3.3.3才行.
作为网络工作从业者来说要学习的技术协议非常的多,特别像OSPF协议这样,细枝末节多如牛毛, 我们如何才能做到可以长期的记住他们,而不是像熊瞎子掰苞米呢? 一定要有自己的记忆方法, 从宏观到微观, 抓重点, 这样即使多年之后,你只要稍微看看就能捡起来.