OSPF基本原理
概括首先需要建立邻居关系,这个期间的包是hello包
然后是看条件是否匹配,匹配则建立邻接关系。不匹配则利用hello包维持邻居关系。
如果无法成为邻接关系,则无法实现全网可达,ospf也就失去了作用
邻接关系建立后通过DBD/LSR/LSU/LSACK包来进行信息共享从而获取未知的LSA实现路由全网可达
OSPF --- 开放式最短路径优先协议
公共协议 普及较高
无类别(需要携带子网掩码) IGP协议
链路状态型协议(LS)
LSA更新量大(最大缺点)
面试题
那为什么要基于LSA进行收敛?
因为防环能力强。
由于LSA更新量大,所以占用资源较多,收敛速度较慢,但选路更佳(由于防环能力较强)。
基于LSA收敛,故更新量较大,为在中大型网络正常工作,需要进行结构化的部署 --- 区域划分(区域内部传拓扑,区域之间传路由)、ip地址规划。
面试题
在LS中的DV特征?
由于LS基于LSA收敛,所以更新量比较大,而为了在中大型网络中正常工作,所以需要在结构化的部署中进行区域划分,区域内部传拓扑,区域之间传路由(DV特征)。
.
组播更新 --- 224.0.0.5 224.0.0.6 支持等开销负载均衡
支持触发更新(拓扑结构发生改变时进行触发更新)、30min周期更新(保活hello和确认ACK)
RIP协议的周期更新就是因为RIP没有hello包和ACK确认机制所以需要一直更新
OSPF协议有hello包和ACK包,周期更新只是为了兜底,怕更新量太大出现一些没有收到的。
跨层封装协议,协议号89;OSPF没有传输层 RIP由于发明太早,没有跨层封装技术,所以有传输层并且基于UDP 520端口。
数据包 --- 5种
Hello --- 邻居的发现,关系的建立,周期保活
DBD --- 数据库描述包
LSR --- 链路状态请求
LSU --- 链路状态更新 -- 携带各种LSA
LSack--- 链路状态确认
OSPF包内容
OSPF状态机
相当于两人的关系
Down 一旦接收到hello包进入下一个状态机
Init 初始化 接收到的hello包中,若存在本地的RID,进入下一状态
2way 双向通讯 -- 邻居关系建立的标志
条件匹配:点到点网络直接进入下一个状态机 MA网络将进行DR/BDR选举(40S)
非DR/BDR之间不能进入下一个状态机
Exstart -- 预启动 使用不携带目录信息的DBD包进行主从关系选举,RID数值大为主,优先进入下一个状态机; 主从目的主要在于信息交互的有序性,避免同时收发造成网络拥塞
Exchange 准交换 -- 使用DBD携带目录信息,进行共享
Loading 加载 -- 查看完邻接的目录信息后,针对本地未知的LSA,使用LSR包进行查询,对端使用LSU进行应答, 本地接收到LSA后使用ack进行确认 --- 获取未知的LSA信息
Full --转发 邻接关系建立的标志
建立邻居关系
当路由器之间建立了ospf邻居后,会不停的收发hello包进行保活
AR2左边为区域0,右边为区域1。区域之内传拓扑,区域之间传路由。
启动配置完成后,邻居间组播收发hello包,建立邻居关系;生成邻居表;
[r2]display ospf peer 查看邻居信息
[r2]display ospf peer brief 查看邻居表
数据跨层封装到三层 通过IGP89协议
发送的是一个组播包,但ttl值为1,代表不经过别的路由器,相当于是一个广播。
OSPF包头内容,每个包都是这个头部
关于OSPFhello包内容
其中Router ID,Area ID,Authentication password是每个包中都有的参数,其他的是hello包独有的参数。
邻居间hello包中必须完全一致的参数:否则无法建立邻居关系
(1)hello 、dead time 2)区域ID --区域划分规则--ABR 3)认证字段
(2)末梢区域标记 -- 特殊区域 5)华为系还要求邻居间直连接口ip的子网掩码必须一致;(如果子网掩码不一致,例如12.1.1.1/23,12.1.1.2/24它也能通,但是不能建邻)
建立邻居关系后,我们需要考虑的问题是:
维持邻居关系还是进入邻接关系(概括)
邻居关系建立后,关注条件,条件不匹配设备间维持邻居关系,仅hello包周期保活即可;
条件匹配的设备间,进入邻接关系,将使用DBD/LSR/LSU/LSack来获取所有本地未知的LSA信息,完成数据库同步 --- 数据库表;
查看数据库中一条具体的链路状态通告
[r2]display ospf lsdb router 2.2.2.2
关于DBD包扩展内容
我们抓取一下DBD包,这时候需要重启ospf进程 ,让邻居关系重新建立的过程中才能抓到这些包。
命令:
查看DBD包内容
MTU Maximum Transmission Unit 最大传输单元
华为默认未开启MTU检测 MTU:0
开启MTU检测命令:r1-GigabitEthernet0/0/1]ospfmtu-enable 在直连邻接的接口上开启,必须两端均开启
DBD包中的标记位
I M MS I位为1标识该DBD包为本地发出的第一个DBD M位为1标识该DBD包不是本地发出的最后一个DBD包 MS 位为1标识本地为主,为0代表从
隐性确认
主从被选举后,从将使用主的序列号为确认接收到了主的DBD包,即使从设备已经不需要发送DBD,依然要使用未携带信息的DBD来进行隐性确认
第一波都不知道谁是主,谁是从,所以都发送了一个7的标记号
7 = 111 为本地发出的第一个DBD包,不是本地发出的最后一个DBD包,第一个都觉得自己为主
经过第一波之后选举出了主从,从标记号中可以看出
2 = 010 表示不是第一个从本地发出的DBD包,不是本地发出的最后一个DBD包,为从设备
并且发出包的序列号要与上一个主发出的序列号相同都为650
1 = 001 表示不是第一个从本地发出的DBD包,是本地发出的最后一个DBD包,为主设备
0 = 000 表示不是第一个从本地发出的DBD包,是本地发出的最后一个DBD包,为从设备
如果是从设备先发出最后一个DBD包,但是主设备还在发DBD包,那么从设备也必须跟着发一个与主设备序列号相同的空内容的包来完成确认效果。
详解邻接关系
邻接关系间数据库同步完成后,本地基于数据库生成---有向图 ---> 最短路径树--->将本地到达所有未知网段的最短路径加载于本地的路由表中;
默认优先级为10 ,度量为cost值;
Cost=开销=参考带宽/接口带宽 默认参考为100M 当接口带宽大于参考带宽时,cost值为1;OSPF优选整段路径cost值之和最小为最短路径
故当接口带宽大于参考带宽的网络可能导致选路不佳,建议修改参考带宽
[r1]ospf 1
[r1-ospf-1]bandwidth-reference?
INTEGER<1-2147483648> The reference bandwidth (Mbits/s)
[r1-ospf-1]bandwidth-reference1000 切记:全网设备参考带宽需要修改一致
[r1]display ospf routing 查看所有本地学习以及共享出去的OSPF路由
邻居关系(two-way)成为邻接关系的条件 --- 和网络类型有关
点到点 --- 所有邻居直接建立为邻接关系
MA---由于OSPF协议需要邻接关系间进行数据库对比,故不支持接口水分割;若两两间均为邻接关系,将可能出现大量的重复更新;因此,在MA网络中ospf协议将进行DR/BDR选举,所有非DR/BDR设备间维持邻居关系,不进行数据库共享; DR为老大,BDR为老二作为老大的备份,其他人与DR和BDR之间都是邻接,DR和BDR之间 也是邻接,只有非DR和非BDR之间是邻居。
在DR/BDR选举后,邻接关系的设备之间为full关系,邻居关系的设备之间为two-way关系
选举规则:1)先比较参选接口的优先级 0-255 默认为1,大优
2)若优先级相同,比较参选的RID,数值大优
若需要干涉选举,可以修改参选接口的优先级
[r1]intg0/0/1
[r1-GigabitEthernet0/0/1]ospfdr-priority 3
切记:选举是非抢占的,故修改后该网段依然维持原有角色,若希望重新选举,需要重启该网段所有设备的OSPF进程;
Warning:The OSPF process will be reset. Continue? [Y/N]:y
建议直接将DR优先级修改最大,BDR次大,其他设备优先级修改为0,0标识不参选,可以不用重启任何设备的ospf进程;
DR/BDR只是一个在单一网络中的问题,不同的网段建邻后都会进行DR/BDR选举。
拓扑突变 :
新增网段:直连新增网段设备,用LSU直接进行触发更新
当我们r1上的环回ip删掉后,抓包
2)断开网段:直连断开网段设备,用LSU直接进行触发更新
3)无法沟通:dead time 为hello time4倍;在dead time到时时将断开邻接、邻居关系,删除路由;
ospf的接口网络类型 --- OSPF协议在不同网络类型的接口上,其工作的方式不同
[r1]display ospf interface LoopBack 0
Interface: 1.1.1.1 (LoopBack0)
Cost: 0 State: P-2-P Type: P2P MTU: 1500
网络类型 ospf接口网络类型(工作方式)
1)环回 p2p 注:环回接口为虚拟接口,虽然显示工作方式为
p2p,但实际上不是真正的p2p,而是环回的
特有工作方式----无hello包收发 以32位主机路由共享
点到点(HDLC/PPP/GRE) p2p hello time10s 不进行DR/BDR选举
BMA (以太网) Broadcast hello time 10s DR/BDR选举
NBMA(帧中继、MGRE)
在MGRE中,由于MGRE和GRE均使用tunnel接口,故工作方式均默认为p2p
在普通的GRE中,由于GRE本身就是点到点网络类型,所有p2p工作方式正常;
而MGRE为多点的MA环境,再使用p2p公司将出现故障:
p2p工作方式仅允许存在一个邻居;华为默认仅和最先接收到的hello邻居建立;
Cisco 为循环建立邻居关系; --- 均无法在该网段正常收敛
解决方案:
修改接口的ospf工作方式:
1)修改该网段所有接口为 Broadcast
[r1]intt0/0/0
[r1-Tunnel0/0/0]ospfnetwork-type broadcast
切记:由于p2p和 broadcast hello time均为10s,故将能建立邻居关系,但p2p不进行DR/BDR选举,所以建邻后无法正常收敛;因此该网段所有接口必须修改成一样的工作方式;
注解1:在MGRE环境中,若网络拓扑为星型;且所有接口的工作方式,均修改为broadcast;
由于分支站点之间没有伪广播,无法知道对端的存在,故DR/BDR选举将混乱;只能让中心站点成为DR,没有BDR;
2)修改所有接口的工作方式为p2mp
P2MP 工作方式 hello time为30,不进行dr、bdr选举
P2mp是为帧中继这种物理的NBMA网络设计,在MGRE环境中不建议使用
补充内容:关于MGRE的拓扑
星型 -- 中心站点固定ip地址,所有分支仅和中心注册
全连网状 --- 所有站点均为固定ip,所有设备均为中心,两两间均注册
部分网状 -- 部分设备为固定ip地址,存在部分中心和部分的分支
在以上三种环境中运行OSPF的方案:
星型 -- 所有接口工作方式为broadcast,仅中心站点为DR,无BDR
或者修改所有接口的工作方式为p2mp(不建议)
全连 -- 所有接口工作方式为broadcast;DR/BDR将默认自动选举成功
部分 -- 所有接口工作方式为broadcast;合理安排DR的位