OSPF
Open Shorted Path First,开放最短路径优先,是 IETF 开发的基于链路状态的自治系统内部路由协议,直接工作于 IP 层之上,IP 协议号为 89;以组播地址发送协议数据包
优势:仅传播对端设备不具备的路由信息,网络收敛迅速,并有效避免了网络资源浪费
名词速览
1、DR,指定路由器
2、BDR,备选指定路由器
3、DRothers,相互之间虽然为邻居,却不会建立完全邻接关系,也不会直接共享链路状态信息
4、LSA,链路状态通告
5、ABR、区域边界路由器
RIP 自身缺陷
1、以跳数来评估的路由并非最优路由(并没有考虑线路的带宽)
2、最大跳数(16,为了避免环路的一种机制)限制网络直径不能超过 16 跳,导致网络尺度过小
3、收敛速度慢(抑制时间阻止了错误更新的同时也将阻止正确更新)
4、更新发送全部路由表浪费网络资源
OSPF 报文格式
区域
为解决拓扑和路由计算复杂度随网络规模增大而急剧增大的问题,OSPF定义了区域的概念,实现了路由网络的层级化
Authentication
其内容是根据 AuType 来定义的:
1、不认证(AuType=0)时 Authentication 为空;
2、简单认证(AuType=1)时 Authentication 为密码/口令信息;
3、MD5 认证(AuType=2)时 Authentication 包括 Key ID,MD5 验证数据长度和序列号的信息
Key ID:密钥是经常改变的,需要对其进行编号索引,使用索引去获取详细加密信息
序列号:针对每次发送的消息进行的编号(防重放),将序列信息和密钥进行离散编号后传输
OSPF协议工作过程
主要有四个阶段:寻找邻居、建立邻接关系、链路状态信息传递、计算路由
寻找邻居
维护邻居表(邻居 ID,邻居地址,邻居状态):
1、都广播 Hello 包,尝试寻找可交换路由信息的邻居(周边设备)
2、收到对方的 Hello 包后更新邻居表,邻居状态置为 init 状态
3、Hello 包中携带的参数开始协商,如果协商成功则将邻居状态置为 2-way 状态
邻居状态达到 2-way 状态后,RTA 与 RTB 之间开始建立邻接关系
建立邻接关系
DR,指定路由器,该路由器会与所有邻居建立可以相互共享链路状态信息的完全邻接(Full)关系
BDR,备选指定路由器,与 DR 一致,防止 DR 挂掉
DRothers,相互之间虽然为邻居,却不会建立完全邻接关系,也不会直接共享链路状态信息
1、初始的邻接关系为总线模型:完全图 (n(n-1)/2)
2、采用 DR / BDR 方式建立邻接关系:(2 * (n-2) + 1)
Q:为什么需要 DR 和 BDR ?
A:初始的全连接邻接关系存在着大量的性能浪费;所以通过选举 DR 与 BDR 的方式减少路由信息交换的数目,减少网络中传递路由信息的开销;
Q:如何选举?
A:Hello 包携带路由器优先级,优先级为 0 的路由器不具备选举资格;先选举 BDR,再选举 DR;
DR 和 BDR一旦选定,即使 OSPF 区域内新增优先级更高的路由器,DR 和 BDR也不重新选举,只有当 DR 和 BDR 都失效后,才参与选举 (保证网络的稳定)
链路状态信息传递
1、触发更新时,发送 RTA 具备的 LSA(链路状态通告,略) 概要给 RTB
2、RTB 分析比较 RTA 与 RTB 的链路信息
3、RTB 发送请求,要求获得 RTB 不具备的 LSA
4、RTA 将 RTB 请求的 LSA 发给 RTB
5、同理 RTA 也通过相同方式获取 RTB 的 LSA
6、双方邻居状态变更为完全连接关系
Tips:
1、OSPF 协议包具备超时重传机制,在规定时间内没有收到回应,认为包丢失,重发包!
2、OSPF 协议包具备序列号,对重复包不做处理
3、LSA(链路状态通告)更新携带掩码,支持 VLSM
路由计算
1、经过链路状态信息传递后,每台路由器中都存储了 LSDB
2、由 LSDB 生成带权有向图
权值会综合考虑时延,带宽,丢包率等
3、每台路由器分别以自己为根节点计算最小生成树
OSPF 安全机制
OSPF 认证机制
1、OSPF 支持对报文进行简单认证与 md5 认证(报文格式中),与 RIPv1 不一样,防范了路由欺骗攻击
2、OSPF 报文进行简单认证时,验证字段将保存一个明文口令,该口令很容易被获取,同样容易遭受路由欺骗攻击;因此引入了更加安全的 MD5 验证
3、MD5 认证:
a、在相邻路由器中配置相同的共享密钥
b、用共享密钥加密报文序列号
c、由共享密钥和路由消息共同生成 MAC(消息鉴别码),判断与发送来的 MAC 是否一致
Q:OSPF MD5 认证与 RIPv2 MD5 认证有何不同?
A:OSPF MD5 认证在 RIPv2 MD5 认证方式的基础上额外支持了加密认证的 HMAC 方式,将数据和秘钥一起计算得到 HMAC 值同数据一起发送,对方接到之后,使用自己手中的秘钥把消息计算一下 HMAC,如果接收到的 HMAC 一致,那么可以认为这个消息既没有被篡改也没有冒充;相比来说 OSPF 的认证方式更为安全
层次化路由
一个运行 OSPF 协议的自治系统可划分为骨干区域和若干非骨干区域,各非骨干区域通过区域边界路由器(ABR)与骨干区域相连
进行网络测绘的通信都会在边界路由器处被拦截,无法获取骨干区域内的 LSDB 信息
每个区域各自拥有自己的 LSDB,各自在本区域内执行链路状态路由算法,使得本区域内拓扑可对区域外网络屏蔽,同时不受其他区域错误路由信息的影响
可靠泛洪
泛洪:将从某个接口收到的数据流向除该接口之外的所有接口发送出去
OSPF 协议通过泛洪进行 LSA(链路状态通告) 传播,使用类似 TCP 的确认重传机制保证可靠性,确保同一区域内路由器有同样的 LSDB,从而计算路由一致
反击机制
当路由器收到自己发送或以自己名义发送的 LSA 比当前生成的实例新且描述信息与自身获知不一致时,将立即通告一个含有正确链路状态且大链路序号的 LSA 新实例,以纠正错误
反击机制使恶意用户伪造的 LSA 很难被其他路由器使用,从而很难影响路由选择
双向连接
只有当一条链接同时被连接两端的路由器通告时,才会考虑放入 LSDB
恶意用户向相邻路由器通告一条不存在的链接,不会对路由表产生影响,因无其他路由器同时通告该链接
OSPF 安全威胁
周期性注入
Backdrop:OSPF 协议规定路由器 LSDB 保存的 LSA 刷新间隔 ≥5S
,且具有反击机制,因此恶意用户注入的恶意 LSA 很快会被刷新和替换,无法产生持久效果
但恶意用户不断用恶意 LSA 更新路由器的 LSDB(周期性注入),可能会导致网络不稳定,消耗大量资源,造成拒绝服务攻击,从而可能更改路由表
然而恶意用户需不断发送更改的 LSA,实施恶意行为本身难度较大,且增加网络流量,易被发现
分块注入
如恶意用户控制的路由器所处位置将区域分为 2 个子区域,则该用户可以用一个子区域中某路由器身份向另一个子区域注入虚假 LSA,从而避开 OSPF 协议反击机制(另一个区域内的传播不会传递到官方路由器中 - 不在一个区域)
该威胁仅影响自治系统的一部分,且对恶意用户所处位置有限制,而现实中这种情况并不常见
幻影路由器
恶意用户虚构一个不存在的路由器,即幻影路由器,以幻影路由器身份注入大量虚假信息,则不会触发反击机制
但由于双向链接机制,注入的 LSA 不一定参与路由计算,除非该幻影路由器与某正常路由器形成邻接关系
该威胁需建立邻接关系,因而实施难度较大