1、背景
我们都知道,任何新技术的诞生,都是有它一定的自然规律的。绝逼不是凭白无故的产生。所以,龙哥希望大家学习一个技术时,学会多关联相关协议,联想他们各自的特点,学会把知识串联起来,这样你就不会觉得学技术好难啊,就不会总是跟龙哥抱怨:总是记不住怎么办呢?
会有链路状态协议的OSPF产生,是因为前面距离矢量路由协议存在两个非常严重的问题:
1、收敛速度缓慢,就是太磨叽了;2、容易产生路由环路。
OSPF,全称Open Shortest Path First,即开放最短路径优先,是由IETF的OSPF工作组在1989年10月开发的,发表的RFC为1131, OSPFv1从此诞生,该协议是基于著名的DijKstra算法。不过版本1一直都是在实验室中使用,未推广成功。版本2才开始被广泛使用,在RFC2328说明。
注:IETF:国际互联网工程任务组(The Internet Engineering Task Force,简称 IETF。1985年年底成立。
2、LSDB
LSDB,全称是Link State DataBase,链路状态数据库。为啥会有它呢?还不是因为距离矢量路由协议RIP,是个“传言”路由协议,在距离矢量路由协议中,邻居说有啥路由,你就信啥,你心中自己都没有一张地图,就很容易经常被骗,所以会导致环路。所以OSPF干脆就给区域内每台路由器都搞一张地图,这样就不会上当受骗了,这个地图就是LSDB,这样就使得OSPF可以保证区域内无环,区域间无环,通过一些规则来限制,这样区域内外都能保证无环。下面,简单介绍一下:
简单说明一些,区域内路由器一旦配置了OSPF,每台路由器就会开始泛洪LSA(包含IP地址、掩码、开销、网络类型等信息),每台都能收到LSA,会构建一张数据库,即LSDB。然后每台路由器都会以自己为根节点,构建一颗最短路径树,然后从这棵树中计算路由,将最优的放进路由表,用于指导业务数据转发。
可能上图小白看着会觉得有点抽象,很难受。行吧,那龙哥动手搭个环境,联系实际场景,可能就会更好理解了。
现在我登录到每台设备给大家演示一下如何查看LSDB(链路状态数据库):
从以上截图来看,相信大家应该发现一个现象了,那就是每台路由器的LSDB是一样的,说明区域内每台路由器的“地图”都是长一个样的。
然后我再每台路由器都创建loopback 0,都宣告到OSPF,目的是验证计算路由。不然上述环境,直连路由优先OSPF路由,所以查看路由表是不会看到OSPF路由的。
创建后随便登录一台路由器就可以了(因为每台路由器LSB都是一样的),去查看1类LSA(1类LSA每台路由器都会产生的)
然后我们在R1查看路由表中的OSPF路由:
我们可以看到只有2条OSPF路由,10.10.10.10没有在里面,是因为它不是最优的,因为它是直连路由,直连路由(优先级0)比OSPF(优先级10)优。
3、报文类型
不管你学什么协议,都绕不开学习报文。报文,就是协议之间互相交付的数据内容。
OSPF在层次模型中,是基于IP层之上的,协议号是89。
上图看完,我们是不是就可以定位出OSPF其实也是跟TCP、UDP同一传输层级别的协议了。
现在,是不是明白了,为啥OSPF报文需要LSAck了吧? 因为OSPF不是基于TCP,TCP有确认机制,所以OSPF如果要确认机制,就需要开发一个报文类型,用来做确认,即LSAck。
现在,我们来总结一下OSPF的报文类型有:
Hello报文:用于发现、建立、维护邻居关系。
DBD报文:链路状态数据库的目录,即摘要信息。
LSR报文:发现自己缺少哪些摘要信息的,就去请求缺少的LSA。
LSU报文:完整的LSA信息。
LSAck报文:确认收到LSA。
本期主题龙哥于大家分享的是OSPF邻居状态机,所以重点介绍一下OSPF的Hello报文。
有些人遇到OSPF邻居不能建立成功,总是不知所措;或者有些考试应付考试,来问龙哥,影响OSPF邻居建立因素好几条,总是记不住怎么办呀?其实,这个问题很简单,就是你没有把Hello报文格式内容给了解透彻。
你细品Hello报文,再去看影响OSPF邻居建立的因素,就清晰多了:(1)router id(2)area id(虚链路的area id可以不一致,什么意思)(3)认证(4)hello/dead(5)区域类型(option位,e=1、n=0为普通/骨干区域,e=0、n=0为stub区域,e=0、n=1为nssa区域)(6)接口的地址掩码(ma网络,LSA2的掩码描述接口的掩码,如果掩码不一致会认为有两台DR,p2p没有问题)不在hello包(7)接口mtu(邻接关系出问题)(8)ospf进程下静默
全部0条评论
快来发表一下你的评论吧 !