ospf基础简述
OSPF,即Open shortest Path First,开放最短路径优先,它是一种链路状态路由协议,顾名思义,在OSPF网络中,路由器之间不会直接传递路由信息,而是传递一种链路状态信息,即LSA,这是OSPF的核心内容,并且ospf不是用广播而是使用组播224.0.0.5来传递链路信息,以加快路由收敛和减少网络冗余流量
ospf是一种基于接口的动态路由协议
OSPF通常封装在IP报文中,因此OSPF只支持运行在IP网络
OSPF目前有两个版本,OSPFv2和OSPFv3。
OSPFv2支持ipv4网络,OSPFv3支持ipv6网络
ospf的五种报文机
1)hello报文:
它的作用很简单,就像它名字一样,用于发现邻居和维护邻居关系
hello报文的默认周期是10s,而有一种dead time默认时间是hello报文的4倍
dead time,即邻居失效时间,当达到或超过这个时间仍未收到对端发来的hello报文,ospf会认为该邻居失效
2)DBD(DataBase Description)数据库摘要报文 :
这里的数据库指链路状态数据库(LSDB),它拥有lsdb中的摘要信息,用于和邻居交换摘要信息,来检测邻居和我的链路信息是否一致或者是有什么不同,比如,若发现有我没有而邻居拥有的链路信息,则我将会向邻居发送LSR
3)LSR(Link State Request)链路状态请求报文:
即当我和邻居交换完DD报文发现哪些链路信息(LSA)有缺失时,会向邻居发送LSR来请求缺失的LSA
4)LSU(Link State Update)链路状态更新报文:
当邻居收到我发来的LSR时,邻居会将我缺失的LSA打包进LSU报文,然后发过来给我
5)LSAck(Link Sate Ack)链路状态确认报文:
当我收到邻居发来的LSU时,我再向邻居发送一个LSAck报文,以告诉邻居我已经收到了他发来的LSU。若我没有发送LSAck,邻居会不断尝试发送LSU,直到我发送一个LSAck
ospf的七种建邻交互类型
1)down:建邻的初始状态
2)init(initialization初始化):表明我收到了对端发送的hello包,并将对端添加到邻居表
3)2-way(二次握手):我向对端发送hello包,对端收到hello包后,因为我在init阶段已在他添加到邻居表,因此他将我添加到邻居表后,我们的邻居状态转变为2-way
这里我要说两个概念,邻居和邻接,到目前为止,ospf的邻居关系关系已经建立完毕,我们这里可以通过交互状态看出,邻居关系是无法交换链路信息的,只有邻接关系能够交换链路信息。
那么哪些路由器会停留在邻居关系,哪些路由器会停留在邻接关系呢?我们之后会讲,现在我们先来讲邻接状态交互
4)Exstart(协商主从):路由器进入此状态后,由主动端向对端发送DD报文,注意此DD报文并没有携带实际的链路信息,而是用于携带协商主从的参数,如DD序列号。
5)Exchange(交换):主从协商完毕后,由选举出的Master路由器向Slave路由器发送DD报文,Slave路由器收到DD报文会,检查DD报文的链路信息与自己是否一致,然后向Master路由器发送DD报文,实现DD报文交换
6)Loading:DD报文交换完毕后,Master路由器和Slave路由器若校对了彼此收到的DD报文后发现有链路信息缺失,则会向对方请求完整的链路信息,以实现LSDB同步
7)full:LSA重传列表为空,LSDB同步完毕
我们可以通过4567的状态交互看出邻接关系是如何交换链路信息的
lsa的六种类型
LSA我们分为三个大类
区域内LSA
区域间LSA
ospf域外LSA
区域内路由
区域内路由有两种lsa,
1类lsa(router lsa):每个ospf设备都能产生1类lsa,1类lsa用来描述本地有几个接口参与ospf计算,只能在区域内泛洪
2类lsa(network lsa):由DR产生,用来描述在MA网络中所有与DR建立邻接关系的设备,还有描述DR自己。
区域内的ospf设备能够通过区域内泛洪的1类/2类lsa来计算到达区域内各个设备的路由
也许有人会问,为什么是在MA网络中?因为只有MA网络中才有DR,至于为什么在MA网络中才有DR,后面会讲。什么,你问什么是MA网络?MA网络,即Multi Access Network,多路访问网络,
这就是多路访问网络,但其实只要是以太链路,就会存在DR
比如这样子,因此你可以简单的理解为,在以太网中有DR
区域间路由
区域间路由有一种,即3类lsa
3类lsa(network summary lsa):3类lsa是由ABR(Area Border Router)区域边界路由器产生并发布的,用来描述一个区域到另一个区域的路由信息和路由开销
这个应该很容易理解,我们继续下一个
ospf域外路由
5类lsa(AS-External lsa)自治系统外部路由:
5类lsa是由ASBR(Autonomous system boundary router)自治系统边界路由器产生并发布的,用于描述去往ospf域外的路由
5类lsa还有个叫做FA的东西,FA(forward address),即转发地址,这个地址是一种优化,如果有FA地址,那么外部路由就不通过ASBR计算,而是通过FA计算,减少ASBR的路由负载压力,使用的不多,主要用于防环和解决次优路径,了解一下即可
5类lsa还会顺带产生一种4类lsa,因为其他区域不知道asbr所在区域是哪里,这时候需要用4类lsa来描述去往asbr的路由,也是由ABR来发布,它和3类lsa有些相似,但是4类只描述去往asbr所在区域的路由,并不描述区域间路由,因此我没将它归类到区域间路由里
还有一种7类lsa(NSSA LSA),和5类lsa基本一样,但只存在于nssa区域,当7类lsa向非nssa区域传递时,会经过一个7转5的过程
ospf的两种特殊区域
ospf有两种特殊区域,nssa和stub,
stub是末梢区域,而nssa很接地气了,叫no so stub area,即没那么末梢的区域,你可以自己润色一下,比如非完全末梢区域
Stub区域
stub有两种,一种是普通stub, 一种是totally stub完全末梢区域,两者有什么区别呢
stub区域里,允许存在1、2、3类lsa,屏蔽4和5类,并生成一条默认路由以去往asbr所在区域和外部路由。即替代了4类和5类lsa的功能
totally-stub区域,要比stub更末一些,只存在1、2类lsa,并生成一条默认路由以去往区域外和asbr所在区域和外部路由,即替代了3、4、5类lsa的功能
NSSA区域
已经有了stub为什么还需要NSSA呢,因为stub只有一条去往外部的默认路由,当网管需要进行精细操作时,则会比较困难或几乎无法操作,在此背景下,NSSA应运而生。
NSSA和stub一样,也分为普通nssa和totally nssa
NSSA(No So Stub Area)区域:
NSSA和stub相比,nssa能够产生7类LSA(NSSA LSA)来描述外部路由以获得外部的明细路由,所以叫做‘no so stub area’
totally-nssa区域:
字面翻译的话读起来有点奇怪,‘完全的没那么末梢区域’。。。
所以我们一般叫做完全nssa区域
totally-nssa没有3类lsa,也是依靠默认路由来去往区域外路由,基本和totally-stub一致,多了个7类lsa
ospf的路由汇总
区域间路由汇总:
在abr上配置,输入命令abr-summary,然后跟上汇总路由和子网掩码
区域外路由汇总
在asbr上配置,输入命令asbr-summary,然后跟上汇总路由和子网掩码
这个了解下配置就行了,我们继续,一般有子网划分基础就会汇总
ospf 的BDR和DR概述
上文讲的DR可能大家不太懂,这里我们展开来说说
DR,即指定路由器(designated router),,负责在MA网络建立和维护邻接关系并负责LSA的同步
DR与广播域内所有ospf设备建立邻接关系以交换链路状态信息(LSA),而非DR路由器之间不会建立邻接关系,仅仅是邻居关系,即停留在2-way关系,因此也不会交换LSA
DR的选举原则:
1)首先比较优先级(priority),越大越优先
2)如果优先级相同,则比较router-id,同样是越大越优先,次之的则选举为BDR,可以理解为太子
3)DR选举完,就像皇上一样,只要DR还活着,就不会被抢占,除非有人刺杀皇上
BDR的作用就是,在DR被刺杀后,立刻登基当DR以快速接管DR
BDR为何能接管DR呢,因为BDR在正常运行期间就已经持续监听并维护了与DR相同的链路状态数据库,就像双机热备一样
ospf的认证
ospf在安全性方面也有所考量,有着三种认证方式来确保在网络中传输的路由信息的完整性、真实性、机密性
null认证:即不做认证配置
simple认证:这是一种明文加密,直接写将明文口令加入报文传输,安全性较低,抓包就能看到口令,不建议使用
md5认证:将口令进行MD5等hash算法加密后加入报文,安全性较高
ospf的认证还可以按照认证类型分类为:
接口认证:在接口进行认证方式配置
区域认证:在ospf的区域视图下进行认证方式配置
虚链路认证:和区域认证一样在区域视图下配置,配置和以上两个不太一样,不用打authenticaiton-mode,直接打认证方式,如
[Huawei-ospf-1-area-0.0.0.0]vlink-peer 1.1.1.1 md5
这是虚链路下应用md5认证方式,即虚链路认证
ospf的虚链路
虚链路实际上是一种用于解决ospf的一些错误设计情况下使用的一种临时性解决方案
本质上是因为ABR不会将来自非骨干区域的3类lsa通告给非骨干区域,而是将非骨干区域的3类lsa通告给骨干区域,并将骨干区域的3类lsa通告给非骨干区域,以实现非骨干通过骨干区域到达其他非骨干区域
因此,当出现两个连续的非骨区域时,会出现网络无法通讯的情况
这种时候,就要用虚链路来建立一条直连骨干区域的虚拟链路,以实现网络通信的正常传输
一个虚链路有两个端点,必须都是ABR。一头端点是骨干区域与非骨干区域之间的ABR,另一头则是两个非骨干区域之间的ABR,且两个ABR的物理链路必须同属一个区域,因此我们在配置虚链路的时候,是在ospf进程的区域视图下配置,至于是什么区域下配置,当然是两个ABR之间物理链路所属区域。
配置:vlink-peer router-id
虚链路理解到这程度就可以了,因为一般也不怎么用,那我们继续下一步
ospf的度量值
ospf是以cost为度量值,每一个激活了ospf的接口都会为维护一个cost
cost的计算公式
cost=参考带宽/接口带宽,参考带宽默认100Mbit,
可以通过配置修改,我记得是在ospf进程下配置bandwidth-reference
ospf的三个表项
ospf有三个表项,这对于ospf网络的维护与排错至关重要
peer表,lsdb表,路由表
你们到时候做配置的时候看一看就差不多了,没啥特别要讲的
ospf的特殊特性
静默端口silent-interface,在ospf进程下配置
端口被静默后,无法发送和接收ospf报文,但是直连路由仍然可以发布出去,即在ospf进程下network的路由,所以不影响直连路由的使用,因此静默端口的主要作用是节约系统资源消耗