目录
一、OSPF基础(开放式最短路径优先协议)
1、技术背景(RIP中存在的问题)
1. RIP中存在最大跳数为15的限制,不能适应大规模组网
2.周期性发送全部路由信息,占用大量的带宽资源
3.路由收敛速度慢
4.以跳数作为度量值
5.存在路由环路可能性
6.每隔30秒更新
2、OSPF协议特点
1.没有跳数限制,适合大规模组网
2.使用组播更新变化的路由和网络信息
3.路由收敛快
4.以COST作为度量值
5.采用SPF算法(最短路由优先算法---dijstart )有效避免环路
6.每隔30分钟更新
7.在互联网上大量使用,是运用最广泛的路由协
注意:OSPF传递的是拓扑信息和路由信息**,RIP传递的是****路由表、**
以下内容若无刻意强调,则都基于该图进行讨论:
OSPF配置:(以R2为例)
[R2]ospf 1**(协议号1)**
[R2-ospf-1]area 0**(区域编号0)**
[R2-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0
[R2-ospf-1-area-0.0.0.0]network 192.168.2.0 0.0.0.255若 router-id****不是相要的id则可以经行手动修改,命令如下:
[R2]ospf 1 router-id 2.2.2.2
修改之后在进行重置OSPF进程 ,命令如下:
<R2>reset ospf process
注意:重置之后之前宣告的网段依然存在;
3、OSPF三张表
**邻居表:**记录邻居状态和关系
查看邻居简表: <R1>display ospf peer brief
查看邻居表:<R2>display ospf peer
**拓扑表:**链路状态数据库(LSDB)----存放LSA(链路状态)的信息
(同一区域的链路状态表相同)
查看拓扑表 :****<R2>display ospf lsdb
**OSPF路由表:**记录由SPF算法计算的路由,存放在OSPF路由表中
查看路由总表:<R3>display ip routing-table
查看OSPF路由表 :<R3>display ospf routing (含自身直连)
查看OSPF路由表 <R3>display ip routing-table protocol ospf
4、OSPF数据包(可抓包)
OSPF报文直接封装在IP报文中,协议号89
头部数据包内容:
数据包内容简析:
**版本(Version):**对于OSPFv2,该字段值恒为2。OSPFV3---IPV6
**类型(Type):**该OSPF报文的类型。该字段的值与报文类型的对应关系是:1-Hello;2-DBD;3-LSR;4-LSU;5-LSAck。
**报文长度(Packet Length):**整个OSPF 报文的长度(字节数)。
**路由器ID (Router Identification):**路由器的OSPF Router-ID。
**区域ID (Area Identification):**该报文所属的区域ID,这是一个32bit 的数值。
**校验和(Checksum):**用于校验报文有效性的字段。保证数据的完整性
**认证类型(Authentication Type):**指示该报文使用的认证类型。
**认证数据(Authentication Data):**用于报文认证的内容。
IGP:内部网关协议(RIP/OSPF)
EGP:外部网关协议(BGP)
OSPF数据包(五种)
(1)hello包
hello包携带自己的router ID: 用来周期保活 的,发现 ,建立邻居关系。
只容纳RID:"具体区分和标识不同的OSPF"路由的身份,32位二进制构成
(具有唯一性,统一性"按照IP地址格式执行")
**网络掩码(Network Mask):**该字段填充的是该接口的网络掩码。两台OSPF 路由器如果通过以太网接口直连,那 么双方的直连接口必须配置相同的网络掩码,否则影响邻居关系建立。
**Hello间隔(Hello Interval):**接口周期性发送Hello报文的时间间隔(单位为s)。两台直连路由器要建立OSPF邻居关 系,需确保接口的Hello Interval相同,否则邻居关系无法正常建立。
Hello时间 :默认每10秒发送一次
Dead time 死亡时间 :默认等于四倍的Hello时间 40秒
OSPF在某些特殊的网络环境下会出现每30秒发送一次Hello包的情况
设备获取RID方法: (路由器的身份)
1.手工配置
2.自动生成
若路由器配置了环回地址 ,那么他会选择环回地址 中数值最大的作为自
身RID
若路由器没有配置环回地址 ,那么他会选择接口IP地址 中数值最大的作为
自身的RID
**可选项(Options):**该字段一共8bit,每个比特位都用于指示该路由器的某个特定的OSPF 特性。(了解)
**路由器优先级(Router Priority):**路由器优先级,范围:0-255,数字越大优先级越高,默认是1,也叫DR优先级, 该字段用于DR、BDR 的选举
修改路由器的优先级:****[R1-GigabitEthernet0/0/0]ospf dr-priority 100
路由器(邻居死亡)失效时间(Router Dead Interval):需确保双方直连接口的Router Dead Interval相同,否则 邻居关系无法正常建立。缺省情况下,OSPF路由器接口的Router Dead Interval为该接口的Hello Interval的4倍
修改死亡时间:
**指定路由器(Designated Router):**网络中DR的接口IP地址。如果该字段值为0.0.0.0,则表示没有DR,或者DR尚 未选举出来。
**备份指定路由器(Backup Designated Router):**网络中 BDR的接口IP地址。如果该字段值为0.0.0.0,则表示网络 中没有BDR,或者BDR尚未选举出来。
**邻居(Neighbor):**在直连链路上发现的有效邻居,此处填充的是邻居的Router-iD,如果发现了多个邻居,则包含 多个邻居字段。
(2)DBD(数据库描述报文)
DBD(数据库描述报文):描述LSDB中LSA的摘要信息类似于LSA的目录)
LSBB数据库 :链路状态数据库(是用来存储LSA"拓扑信息")
接口最大传输单元(Interface Maximum Transmission Unit):接口的MTU。最大1500个字节
可选项(Options):路由器支持的OSPF可选项功能。
DBD报文置位符:
I:init位(初始),I=1,这是第一次报文的第一个DD报文
M:more位,M=1表示后续还有DD报文
MS:master位,MS=1,表示本端为主
DD序列号(DD Sequence Number ): DD报文的序列号,在DD报文交互的过程中,DD序列号被逐次加1,用于确保 DD报文传输的有序和可靠性。值得注意的是,DD序列号必须是由Master路由器来决定的,而Slave路由器只能使 用Master路由器发送的DD序列号来发送自己的DD报文。
(3)LSR:链路状态请求
**LSR:链路状态请求,**在与DBD包(LSA目录)比对后请求我没有的LSA信息.
请求自己没有的或则比自己更新的链路状态详细信息
链路状态类型:LSA的类型
链路状态ID:在type1LSA中填入的是路由ID,type2LSA中填入的是发出该LSA的IP地址,type3LSA 中填入的是想要传播的路由条目的相关网络号
通告路由器:通告该LSA的路由ID
链路状态类型,链路状态ID,通告路由器 ---- "LSA三元组" --- 通过着三个参数可以唯一的标识出一条LSA
(4)LSU:链路状态更新信息
LSU: 回复LSR包,真正携带LSA信息的数据包, 链路状态更新信息 一个LSU报文可以包含多个LSA
当路由器感知到网络发生变化时,也可以触发LSU报文的泛洪,以便将该变化通知给网络中的其他OSPF 路由器。
在MA网络中,非 DR、BDR路由器向224.0.0.6这个组播地址发送LSU报文,而DR及 BDR会侦听这个组播地址,DR 在接收LSU报文后向224.0.0.5发送LSU报文,从而将更新信息泛洪到整个OSPF区域,所有的OSPF 路由器都会侦听 224.0.0.5这个组播地址。
224.0.0.6----DR和BDR
244.0.0.5---DRother
(5)LSAck:对LSU的确认
LSAck:对LSU的确认,回复R1信息以到达. 报文中包含着路由器所确认的LSA的头部(每个LSA头部的长度为20byte)
5、OSPF工作过程
俩种关系:
**邻居:**双方通过hello报文,相互认识
邻接: 邻居关系建立好后,进行一系列报文交互,当两台路由器LSDB同步完成,开始独立计算路由时 ,这两台路由 器形成了邻接关系
只要第一个Hello包发出路由器就进入了init状态
(1)确认可达性,建立邻居
hello 包三次握手:
router ID:标明的是路由器身份
手工配置:IPV4地址格式
自动选举:
**环回口:**IP地址大的优先(若无环回口则从物理口中选择)
**物理口:**IP地址大的优先
(2)摘要同步,开始建立邻接关系
1.向邻接路由器发送DD报文,通告本地LSDB中所有LSA的摘要信息
2.收到DD报文后,与本地LSDB对比,向对方发送LSR报文,请求发送本地所需要的LSA的完整信息
3.收到LSR后,把对方所需的LSA的完整信息打包为一条LSU报文,发送至对方
4.收到LSU后,向对方回复LSAck报文,进行确认
(3)完整信息同步,完全邻接关系建立
完全邻接关系建立,LSDB表与OSPF路由表形成
6、OSPF的状态机(七加一个)
(1)down:关闭状态(稳定状态),这种情况处于手动指定邻居的情况下,发送hello包之后进入下一个状态
**(2)INIT:**初始化状态,收到对方的hello报文,但没有收到对方的hello确认报文
**(3)Attempt:**一般不会出现,只出现在NBMA网络中,发出hello,但收不到对方的hello包、
(4)2-way(稳定状态):双方互相发现,邻居状态稳定,并确认了DR/BDR的角色;
2-way前,确认DR/BDR
选举原因**:广播网络中使路由信息交换更加高速有序,可以降低需要维护的邻接关系数量**
**选举范围:**每个网段都需要选出一个DR和BDR(0-255)
选举规则:1.优先级大的优先,默认优先级是1;
2.router-id大的优先
注:DR/BDR的选举没有抢占性
关系状态:DRother与DR建立邻接关系;
DRother与BDR建立邻接关系;
DR /BDR建立邻接关系;
DRother之间保持邻居关系 当选举完毕后 ,就算出现 一台优先级更高的路由器 ,也不会替换成新的DR\BDR ;需要 原DR\BDR失效 ,或重置OSPF进程 才会成为新的DR\BDR;
2-way的前提:
Router-id无冲突,修改router-id需要重置ospf进程使生效;
掩码长度一致(MA网络中);
区域ID一致;
验证密码一致;
hello-time一致;
dead-time一致;
特殊区域类型一致;
**(5)Exstart:**交换开始状态;发送第一个DD报文,但不发送LSA摘要,仅用于确定LSDB协商的主从,ROUTER-ID大 的成为master
**(6)Exchange:**交换状态;发送后续DD报文,用于通告LSDB中的LSA摘要
**(7)Loading:**读取状态,进行LSA的请求、加入和确认
**(8)Full:**邻接状态(稳定状态),两端同步LSDB;
**FULL的前提:**两端MTU一致,否则可能卡在EXSTART\Exchange状态
**能够计算路由的前提:**两端网络类型一致,否则邻居状态full,但无法学习路由
7、LSDB的更新
注:广播网络中的更新:只由DR发起
8、OSPF开销计算
(1)参考带宽:
默认是100M
计算开销的基准带宽值
参考带宽仅本地有效
建议把网络中最高的链路带宽设置为参考带宽(不然 千兆链路和百兆链路的开销值都是1,无法判断哪条线路最 优)
(2)cost 计算方法:
链路带宽大于等于参考带宽 cost=1
反之,cost=参考带宽/链路带宽(Mb)
注:在路由器上。千兆以太网、百兆以太网、十兆以太网的缺省OSPF链路开销值分别是:1、1、10
二、OSPF的区域划分
1、区域产生背景
OSPF路由器在同一个区域中泛洪LSA。为了确保每台路由器都拥有对网络拓扑的一致认知,LSDB需要在区域内 进行同步。不同区域的LSDB是不一样的
如果OSPF域仅有一个区域,随着网络规模越来越大,OSPF路由器的数量越来越多,这将导致诸多问题。
2、分区好处
减少LSA泛洪范围;
减小路由表规模;
提高网络扩展性,有利于组建大规模的网络;
3、区域类型
**骨干区域:**area 0
非骨干区域:
特殊区域:减少邻居关系 ,减小OSPF路由表的规模
邻居关系过多缺点:
(1)大量产生hello包,消耗CPU性能
(2)产生重复路由通告,消耗CPU性能
(3)任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源
多区互连原则:
非骨干区域 与非骨干区域不能直接相连;
所有非骨干区域必须与骨干区域相连;
此设计是为防止区域间环路;
4、OSPF的路由器类型
区域内路由器(IR):所有接口在同一区域
骨干路由器(BR):有接口在骨干区域
区域边界路由器(ABR):连接骨干区域 和非骨干区域
自治系统边界路由器(ASBR):连接外部自治系统并引入外部路由
三、OSFP基础实验
OSPF基础实验并尝试抓取OSPF的数据包
实验具体步骤请看博客**"OSFP基础实验"**