OSPF笔记(一)
OSPF全称Open Shortest Path First,中文名称为 开放最短路径优先协议
OSPF是一种基于链路状态的协议,用更合理的接口带宽来衡量路由
参考:路由协议的作用 用来建立路由表 路由协议分为两大类,一类是IGP 一类是EGP 具体关系如下图
在学习OSPF的时候 通常都需要从三个方面开始讲起。
1、为什么使用OSPF?
2、OSPF是什么?
3、OSPF如何使用?
首先就先从使用OSPF的原因开始说起,一点一点的深入学习,探讨。
最开始,我们使用的协议都是RIP,RIP叫做路由信息协议,由于他是一个距离矢量协议,所以他是以跳数来衡量路由的优劣,其最大条数16跳极大的限制了RIP的发展。其次就是RIP还有一个我认为比较恶心的一点,就是它每30s就会泛洪一次所有的路由,那么在一些大型的网络中,其实设备是承受不了这么大的数据流的,试想一下:十万条路由每30秒全网泛洪,我觉得网管都疯了!!!哈哈哈~
综上所述,RIP只是适合一些小型的网络,但是太小呢 静态路由就可以解决呀,所以这个技术也就渐渐的淘汰了。
现在在中大型网络中,包括一些底层协议中,OSPF是使用非常的的一个动态路由协议,作为一个非常普遍但又持久的协议,总是有一些它自己的发光点,那么我们可以先看看它有哪些优点。
1、没有路由跳数的限制,因为它是基于链路状态的
2、使用组播更新变化路由和网络信息
3、收敛速度较快
4、以开销(Cost)值作为度量值
5、自身带有防环机制 通过SPF算法来实现
上述就是OSPF的一些优点了
那什么是OSPF呢?
OSPF的全称开头就说到了,我们说一些没有说过的。在OSPF的协议里呢,是有两个版本的,一个是支持IPv4协议的OSPFv2的版本;另一个是支持IPv6协议的OSPFv3的版本。OSPF是基于IP协议 协议号是89。还支持区域的划分,可以适应大规模的网络拓扑。
剩下的就是一些基本的术语了,我们一一列出来看一下
自治系统(Autonomous System):指使用同一种路由协议交换路由信息的一组路由器,简称AS。
路由ID(Router ID);用于在OSPF的网络中,唯一的标识一台运行OSPF协议的路由器。表示形式是一个32位的整数,每一个运行OSPF的设备都需要有一个Router ID。
邻居(Neighbor):设备启动OSPF协议之后,便会通过接口向外发送Hello报文。收到Hello报文的其他启动OSPF路由协议的设备会检查报文中所定义的一些参数,如果双方一致就会形成邻居关系。
邻接(Adjacency):形成邻居关系的双方不一定都能形成邻接关系,当两台路由器之间交换路由信息通告,并在此基础上建立了自己的链路状态数据库之后,才会形成邻接的关系
知道一些基础的东西之后,接下来就是我们今天的重点了,OSPF的邻居建立过程。
在通常的OSPF课程中 OSPF的重点就是三个部分:邻居建立的过程、数据库同步、SPF算法。
首先,我们需要通过一张拓扑来展示一下
如上图所示,AR1和AR2通过运行OSPF协议 ,首先需要知道OSPF协议应该如何配置。 切记两端都要配置
1、首先需要在两端的接口上配置同一个网段的IP地址,保证AR1和AR2的互通关系 参考配置如下
interface GigabitEthernet0/0/0
ip address 12.1.1.1 255.255.255.0
2、配置OSPF的Router ID,以及进入到OSPF的协议视图 参考配置如下
ospf 1 router-id 1.1.1.1
3、进入到OSPF的Area 0(骨干区域) 宣告需要的网段 参考配置如下
area 0.0.0.0
network 12.1.1.1 0.0.0.0
4、当提示如下图所示的样子的时候,表示配置成功
那我们今天所研究的就是在邻居建立过程当中 所涉及到的七种状态以及五种报文
首先先描述一下OSPF的状态机
Down 当两端设备没有配置也没有发送数据,协议的状态就是在一个关闭的状态
Attempt 该状态仅发生在NBMA网络中,表明对端在邻居失效时间间隔(dead interval)超时后仍然没有回复
Init 当收到来自邻居设备的Hello报文当中,在Hello报文中的邻居列表中,没有自己的Router ID
2-way 当收到邻居的Hello报文时,发现Hello报文当中的邻居列表中,有自己的Router ID
Exshart 通过相互发送DD报文,选举主从,选择好之后进入下一个状态
Exchange 相互发送DD报文,DD报文中携带链路状态数据库的摘要信息
Loading 当收到对方的DD报文,发现有自己没有的信息,就会向对方请求,发送LSR的报文,对方收到之后,会使用LSU回应,自己收到来自对方的回应之后,就发送LSACK表示确认
Full 当两端的链路状态数据库同步完成之后,就会到达Full的状态
然后在来看一下OSPF报文的格式以及内容
报文一、OSPF报文头部
如图中所示,这个就是OSPF报文的头部 接下来一一解释一下各个字段的意思
Version 版本 用来显示OSPF协议的版本 一共有V2 和 V3两个版本
Type 类型 用来表示下面的报文是五种报文中的哪一种
Packet Length 包长度 OSPF报文的总长度,包括报文头部在内,单位为字节
Router ID 路由标识 发送该报文的路由标识
Area ID 区域ID 发送该报文的路由器所在的区域
Checksum 检查 用来查看报文是否有损坏
Autype 认证 标识该报文的认证类型:1、无认证;2、接口认证;3、区域认证
Authentication 认证信息
OSPF的头部是所有的OSPF报文公有的一部分,所以我们需要知道OSPF每一个报文当中,都会包含上述信息。
报文二、Hello报文头部
上面的蓝色底色的内容,就是上述的OSPF的头部,我们就不多做介绍了。我们来说一下Hello报文的作用:Hello报文是用来建立,维护和管理OSPF会话的,那我们一个一个说。
hello报文的会话建立:两台设备最初都会相互发送Hello报文,以达到交互Router-ID的目的,当收到对端发送的hello报文当中,邻居列表中有自己的Router-ID就认为邻居关系已经建立,这个在状态机里面就是down-->init-->2-way
hello报文的维护:Hello报文在不同的网络类型中间隔时间不一致,例如在MA网络/P2P中就是10秒一次,而P2MP/NBMA都是30秒一次,hello dead(死亡时间)就是四倍于hello time。
hello报文的管理:hello报文中会选举DR/BDR,会起到管理邻居建立的作用
接下来就是报文的具体内容了 还是一一解释一下吧!!
Network mask (网络掩码) 这里指的就是咱配置IP地址的那个掩码 在广播网络中,OSPF建立的时候,两端掩码必须一致
Hellointerval 发送Hello报文的时间间隔(Broadcast:10S、P2P:10S、P2MP:30S、NBMA:30S )
Options 扩展字段,主要表示报文的一些功能,之后会给大家说到的
Rtr Pri DR优先级,默认为1,越大越优先。当数值为0的时候,不参加选举
RouterDeadinterval 失效时间,四倍于Hellointerval时间,如果超过了这个时间,还没有时候Hello报文,就认为邻居失效
Designated Router DR设备的接口地址
Backup Designated Router BDR设备的接口地址
Neighbor 邻居列表,存放邻居设备的router-id
报文三、DD报文头部
同样,蓝色部分就不说了,之后也不会说蓝色部分是OSPF的头部了,大家记住了哦!!!!
还是直接进入主题,DD报文,主要作用有两个:一、选举主从,哎,注意,和刚刚的那个DR/BDR不一样,这个是选举Master/Slave;二、相互交互链路状态数据库(LSDB)的摘要信息。两个不同的作用,也是在不同的状态机下完成的。第一个是在Exshart下,第二个是在Exchange下完成的。
接下来还是逐一解释一下报文的内容
Interface MTU 接口MTU(最大数据单元) 表示数据包每次发送的最大字节,默认是1500。但是由于在华为的设备上。OSPF是默认不检查掩码的,所以实际报文中,看到的置为为0
Options 扩展位 表示报文的一些功能的,之后在做解释
00000 保留位 知道就好 了解即可
I 如果置位为1,则表示该报文是第一个DD报文;如果置位为0,则表示不是第一个报文
M 如果置位为1,则表示该报文后还有其他的DD报文;如果置位为0,则表示该报文时最后一个DD报文
M/S 如果置位为1,则表示发送该报文的路由器为主;如果置位为0,则表示发送该报文的路由器是备
DD Sequence Number DD报文的序列号 这里会包含一个确认机制,记一下,后面会说到哦~
LSA Header 链路状态信息(LSA)的头部 包含的就是LSDB(链路状态数据库)的摘要信息
报文四、LSR(Link State Request Packet)报文头部
两台路由器相互交互过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA是失效的,这时候就需要发送LSR报文向对方请求所需要的LSA。内容包括所需要的LSA的摘要信息。可以根据Ls Type、Link State ID和Advertising Router来确定唯一的一条LSA,所以也称之为LSA的三要素。如果两个LSA一致,就需要通过LSA中的LSA Sequence Number、LSA checksum和LSA age来判断LSA的新旧。
报文字段的具体解释
LS Type LSA的类型(在V2版本种一共有7种LSA的类型,后面会着重讲到各类LSA)
Link State ID 链路状态标识 通过LS Type 和 LSA Description(描述)在路由域中描述一个LSA
Advertising Router 产生此LSA的路由器的router id
报文五、LSU(Link State Update Packet)报文头部
用来向对端Router 发送其所需要的LSA或者泛洪自己跟新的LSA,内容是多条LSA(全部内容)的集合,LSU报文在支持组播和广播的链路上是以组播的形式将LSA泛洪出去。为了实现Flooding(泛洪)的可靠性传输,需要LSAck报文对其进行确认,对没有收到确认报文的LSA进行重传,重传的LSA是直接发送给邻居的。
报文字段的具体解释
Number of LSA LSA的数量
LSA 指的是LSA的头部 如下图
常见的LSA有5种,分别是:Router-LSA、Network-LSA、Network-summary-LSA、ASBR-summary-LSA和AS-External-LSA。所有的LSA都有相同的LSA报头。
报文字段的具体解释
LS Age LSA产生后所经过的时间,以秒为单位,无论LSA是链路上传送,还是保存在Lsdb中,其值都会在不停的增长 最大是3600S(好像是,我也忘记了)
Options 标识了LSA中的可选信息 后面会有解释到的
LS Type LSA的类型,就是表示上述的5类LSA
Link State ID 与LSA中的LS type he1 LSA Description一起在路由域中描述一个LSA
Advertising Router 产生此LSA的路由器的Router ID
LS sequence number LSA的序列号。其他路由器根据这个值可以判断那个LSA是最新的。
LS checksum 除了LS age以外其他各域的校验和。
Length LSA的总长度,包括LSA Header,以字节为单位。
报文六、LSAck(Link State Acknowledgment Packet)报文头部
用来对接收到的LSU报文进行确认。内容是需要确认的LSA的Header(一个LSACK报文可对多个LSA进行确认)。LSACK报文根据不同的链路以单播或组播的形式发送
报文字段的具体解释
LSA Headers LSA的头部信息 (LSA的三要素)
今天的内容就到这里啦!! 后续还有啊~