一、概述
OSPF (open shortest path first),开放式最短路径优先协议
1、特点:
@OSPF 协议是公有标准的协议,任何厂商设备都支持
@OSPF 位于 TCP/IP 模型第三层,数据包位于IP头部后面,协议号为 89
@OSPF 的报文是通过组播的方式进行发送,组播地址为 224.0.0.5
@OSPF 协议支持大型规模的网络
2、作用:
在路由器之间,动态的发送和学习彼此的路由条目,从而达到“路由器的路由表完全一致”的结果。
3、工作原理:
1>建立邻接表
2>同步数据库
3>计算路由表
4、报文类型:
1>hello,专门用于 OSPF 邻居关系的建立
2>dd (database description),数据库描述报文
3>lsr (link state request) ,链路状态请求
4>lsu (link state update ) ,链路状态更新
5>lsack (link state acknowledge),链路状态确认
5、具体配置:
ospf {进程号} // 如果不指定进程号,默认是1 ;
area {区域号} // 该参数必须要,如果仅仅有1个区域,那只能是区域 0
network {直连网段} {反掩码} // 凡是需要通过OSPF 协议发送出去的, 必须写在该命令后面
@验证命令:
display ip routing-table protocol ospf //仅仅查看路由表中的OSPF路由
display ospf peer brief //查看设备上的 OSPF 邻接表
<R1>display ospf peer brief
OSPF Process 1 with Router ID 192.168.1.254
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet0/0/0 192.168.12.2 Full
----------------------------------------------------------------------------
@ process 1 , 表示当前OSPF协议的进程号是1 (是默认值),进程号是用来在同一个设备上区分不同的 OSPF 协议的;
@ router id , 表示的是 OSPF 路由器的名字,名字的格式类似于 IP 地址,
但是,不是IP地址。
router ID 的确定方式,有两种:
1.手动指定
[R1] ospf 1 router-id 1.1.1.1 //将R1上的OSPF进程1的名字改为1.1.1.1
输入上述命令之后,设备的 ospf router-id 不会被修改过来,
除非,我们重启路由器或者重启 OSPF 协议,
<R1> reset ospf process
Warning: The OSPF process will be reset. Continue? [Y/N]:y
2.自动选举
-首先选择设备上接口IP地址最大的 Loopback 接口(回环口)
-其次选择设备上接口IP地址最大的 物理接口(首次选择先配的接口地址IP为routerID)
@ Area Id ,表示的是 OSPF 建立的邻居所在的区域;
@ Interface ,表示的是本路由器通过哪个接口与对端设备建立邻居
@ Neighbor id ,表示的是 邻居的名字;
@ State ,表示的是邻居的状态。最完美的状态是: full(完美)
6、OSPF参数解析:
1>-preference,优先级。
表示的是一个路由的稳定性。数值越小越好。
OSPF路由的优先级,默认是 10;
静态路由的优先级,默认是 60;
RIP路由的优先级,默认是100;
直连路由的优先级,默认是 0;
2>cost ,开销。
表示的是一个路由器去往一个网段的距离。数值越小越好;
路由开销计算方法:路由在传递过程中,所经过的每一个设备的“入接口”的 cost 值的累加和。{接口cost,默认是 1 }
修改命令:
R1:
interface gi0/0/2
ospf cost 8
quit
display ospf interface gi0/0/2 -->确保 cost 为8。
最终,在 R3 上查看 OSPF 路由条目: 192.168.1.0/24
的开销,由原来的 3 ,变成了 10 ;
3>hello 计时器:表示的是设备发送hello报文的时间间隔;默认是10s
@修改命令
R1:
interface gi0/0/0
ospf timer hello 5 //将hello周期计时器改为5s
quit
R1:
display ospf interface gi0/0/0 --> hello 是 5 。
此时会查看到dead计时器,自动变成了20;
[修改hello,dead自动变化,并且是4倍的关系]
4>dead 计时器,表示的是设备在多久时间内没有收到对方的hello,就会断开邻居关系。 默认是 40s
@修改命令
R1:
interface gi0/0/0
ospf timer dead 21 //将dead周期计时器改为21s
quit
R1:
display ospf interface gi0/0/0 --> dead是 21s 。
//我们发现,修改dead计时器,hello不会变化的。
注意:
实际项目中,我们会始终保持 hello 和 dead 计时器 4倍的关系;
同时,必须要求 dead 时间大于 hello 时间。
并且,要求互为邻居的两个 OSPF 路由器的 hello/dead 计时器,必须完全相同,
否则,无法建立 OSPF 邻接关系。
5>DR(designated router)指定路由器
@ospf工作过程中,需要首先建立邻居。然后互为邻居的路由器之间同步数据库。
@在同步数据库的过程中,如果一个网段内部,具有多个OSPF路由器的时候,为了确保多个设备之间的“数据库同步过程”更加的可靠和高效,所以,我们必须在其中指定一个非常牛的路由器(俗称,指定路由器),其他路由器在同步数据库的时候,仅仅与“指定路由器”同步数据库,确保数据库同步的高效和可靠,保证每个路由器,都和指定路由器一模一样。其他路由器之间,不能直接进行数据库的同步,同时,避免在 DR 出现故障以后,整个网络的数据库无法同步。所以,我们在选择 DR 之后,会再次选择一个 BDR。
此时,OSPF路由器的角色,就分为以下几种:
-DR
-BDR
-DRother
在一个网段中,如果存在很多 OSPF 路由,那么:
@所有的设备,都仅仅和 DR / BDR 同步数据库 ;只有 DR 会进行回应, BDR是不回应的;最终每个路由器,都和 DR/BDR 进入到 Full 状态。
@DRother 之间,仅仅处于 two-way 状态。
6>DR/BDR 的选举原则:
@首先比较路由器的优先级,数值越大越好;默认是 1 ;
@其次比