OSPF协议(单区域)
0x0 WHY OSPF?
RIP面对越来越复杂的网络已经不适用了
0x0.1 RIP的缺陷
- 距离矢量的路由选择协议,衡量标准为跳数,并非带宽
- 最大跳数为16,局域网的范围太小
- 收敛慢
- 更新发送全部路由器的浪费网络资源
- RIP路由学习不可靠,RIP为传言路由,不考虑路由是否正确
- 容易产生环路,解决环路的方法治标不治本
0x0.2 OSPF的优点
- 链路状态路由选择协议,基于带宽
- 采用的SPF算法,从算法上保证无环
- OSPF通过邻居关系来维护路由
- OSPF路由更新效率高,网络收敛快,适用于大中型网络
- OSPF先收集网络拓扑信息,在自己根据拓扑信息进行路由计算
- OSPF可靠,虽然OSPF基于IP,但是OSPF有自己的一套确认机制
0x1 HOW OSPF?
0x1.1 OSPF的工作框架
- 建立邻居;通过hello报文探测发现邻居——>交换hello报文
- 发起路由;
- 描述直连网段和直连拓扑(LS:链路状态)
- 描述成LSA(链路状态通告,按一定格式封装后的LS)(有6种LSA)
- 把LSA存放到自己的LSDB(链路状态数据库:OSPF画的拓扑图,用于存储着自己收集到的全部LSA)
- 传播路由;LSA洪范(通过LSR LSU LSACK洪范)——>区域内路由器的LSDB达到一致
- 计算路由;以自己为根进行SPF计算,算出最优路由(算出OSPF路由表)
- 以自己为根
- 每个OSPF路由器单独进行SPF计算
0x1.2 OSPF的四张表
- 邻居表:记录有哪些邻居,自己和邻居的状态 ——–>对于工作框架的建立邻居
- 路由计算完毕后;OSPF只需要维护邻居关系;就能维护路由
- LSDB:存储自己收集到的全部LSA ——–> 对应工作模型的发起路由和传播路由
- OSPF路由表:在LSDB收集到了整个区域的LSA后,进行计算出来的路由,会被存进OSPF路由表 ——–> 对于工作框架的计算路由
- 全局路由表;如字面
0x1.3 OSPF的基本概念
- Router ID
- 用来做标识作用
- 要求独一无二 类似IP地址,但不是IP地址(RID只和RID冲突、IP和IP冲突)
- 手工配置,可以自动生成(要么全部手工,要么全部自动)
- 自动生成顺序
- 选取最大的Loopback接口(环回接口在路由器本地不能接网线,不能绑定vlan,无法当网关,只用来测试连通性)
- 选取最大的IP地址(要求接口UP)
- 自动生成顺序
0x1.4 OSPF的网络类型
OSPF是一种动态路由协议、动态的学习路由
- 局域网;使用以太网技术 ethernet,
- 广域网;帧中继网络 P2MP PPP、HDLC
不同的网络都需要学习路由,所以OSPF为自己在不同的网络类型种,设计了不同工作方式的OSPF
- 数据链路层不一样,默认用的OSPF类型不一样
- 广播多路访问Broadcast型OSPF——->以太网技术(可以是点到点,也可以是多路) 224.0.0.5和224.0.0.6
- P2P型OSPF——>PPP HDLC(点到点) 只用224.0.0.5
P2P最多只能建立一个邻居 Broadcast每个路由器可能建立多个邻居
0x1.5 OSPF的五种报文
- HELLO;建立并且维护邻居关系,比较HELLO包判断能否建立邻居(周期发送)
- DD;数据库内容汇总(类似目录,描述整个LSDB的汇总信息)
- 收到DD报文后,判断自己需要哪些LSA
- LSR;请求自己需要的完整的LSA(只携带LSA的头部信息)
- LSU;收到了LSR后,发送响应LSU报文,携带对方需要的完整的LSA (携带LSU)
- LSAck;收到了LSU后,回复LSACK作为确认
OSPF被IP封装,IP不可靠,OSPF需要保证自己的可靠性,所以有确认机制(显示确认机制LSAck,隐式确认机制DD、LSR、LSU)
详情请见OSPF报文格式详解
0x1.6 OSPF的DR/BDR的选举
- 为什么选DR?
- 在广播多路访问中减少建立邻接关系的数量,从而节省开销
- P2P需要选DR吗?
- 不需要,P2P对端只有1台机器,没有多路型的拓扑 DR;类似班长 BDR;类似副班长(DR的备份)
- 选举方式
- 比较Hello报文中携带的优先级 越高越好
- 比较Router ID 越大越好 选举完成后采用不抢占的方式——>DR、BDR选举完毕后,就算加入了优先级更高的路由器,也不会立刻成为DR
- 上位过程
- DR down后 BDR上位 新加入的优先级高的路由器被指定位BDR
what OSPF?
- OSPF是一种典型的链路状态(LS)的路由协议,是工作在网络层用来动动态学习路由表,指导IP报文转发一种协议为什么工作在网络层