由于静态路由由网络管理员手工配置,因此当网络发生变化时,静态路由需要手动调整,这制约了静态路由在现网大规模的应用。
动态路由协议因其灵活性高、可靠性好、易于扩展等特点被广泛应用于现网。在动态路由协议之中,OSPF(Open Shortest Path First,开放式最短路径优先)协议是使用场景非常广泛的动态路由协议之一。
OSPF在RFC2328中定义,是一种基于链路状态算法的路由协议。
1.初步了解配置OSPF
(1)配置PC的IP地址信息
PC1:
PC2:
(2)配置R1和R2的接口IP
R1:
sysname R1
undo info-center enable
interface Ethernet0/0/0
ip address 192.168.1.1 255.255.255.0
quit
interface Ethernet0/0/1
ip address 12.1.1.1 255.255.255.0
quit
R2:
sysname R2
undo info-center enable
interface Ethernet0/0/0
ip address 192.168.2.1 255.255.255.0
quit
interface Ethernet0/0/1
ip address 12.1.1.2 255.255.255.0
quit
(3)配置OSPF
R1:
ospf 1 router-id 1.1.1.1 #创建ospf进程(进程号1)
area 0.0.0.0 #进入区域0
network 192.168.1.0 0.0.0.255 #通告直连网段
network 12.1.1.0 0.0.0.255 #通告直连网段
quit
quit
R2:
ospf 1 router-id 2.2.2.2
area 0.0.0.0
network 192.168.2.0 0.0.0.255
network 12.1.1.0 0.0.0.255
quit
quit
(4)验证测试
查看路由表
R1:
R2:
由此可以看出R1通过OSPF路由协议学习到去往192.168.2.0/24的路由信息,R2通过OSPF路由协议学习到去往192.168.1.0/24的路由信息。R1学到192.168.2.0/24通过R2向邻居通告它自身的路由信息学习到的,同样R1也会把自己路由表中学习到的192.168.1.0/24路由信息通告给R2。
PC1访问PC2:
2.动态路由概述
2.1为什么需要动态路由协议?
静态路由是由工程师手动配置和维护的路由条目,命令行简单明确,适用于小型或稳定的网络。
静态路由有以下问题:
无法适应规模较大的网络:随着设备数量增加,配置量急剧增加。
无法动态响应网络变化:网络发生变化,无法自动收敛网络,需要工程师手动修改。
例如图中的R1连接R2的链路发生故障,那么就需要网络管理员去手动配置更改R1去往R2的路由,需要经过R3在到R2。并且在R1和R2链路断开时或者发生故障时,R1上配置直接去往R2的静态路由是无法感知的,R1上的静态路由还是存在的,并不会因为链路故障而消失,除非管理员手动更改,这就是静态路由不灵活的体现了。
2.2动态路由协议的分类
2.2.1按工作区域分类
IGP(Interior Gateway Protocols,内部网关协议):RIP OSPF IS-IS
EGP(Exterior Gateway Protocols,外部网关协议:BGP
2.2.2按工作机制及算法分类
(Distance Vector Routing Protocols, 距离矢量路由协议) :RIP
(Link-State Routing Protocols,链路状态路由协议): OSPF IS-IS
2.3距离矢量路由协议
运行距离矢量路由协议的路由器周期性的泛洪自己的路由表。通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加载进自己的路由表中。
对于网络中的所有路由器而言,路由器并不清楚网络的拓扑,只是简单的知道要去往某个目的方向在哪里,距离有多远。这即是距离矢量算法的本质。
假设R1路由表有1万多条,每隔30s左右向相邻的路由器去泛洪自己的路由表信息,R2收到之后呢,30s会向R3泛洪自己的路由表信息,那么对于链路带宽来说占用是比较严重的,比较消耗设备的资源。这就是距离矢量运行的特点,它传输时传递的都是完整的路由信息,它不是链路状态,链路状态不是传递完整的路由信息,而是传递“原材料”。
距离矢量是通过距离的远近来衡量路由到达目标的优劣,比如说R1到达R3有一条直连的链路,那么直接走R1相连R3比较近一些;而不是走到R2再到R3的线路。就算上面的带宽有10G那么大,底下是100M,对于距离矢量来说,还是底下距离最短最优到达目标,它只看距离远近,不管你的带宽有多大。
而链路状态协议,以OSPF来说,它既要看链路的带宽,也要看距离的远近,它要综合去衡量。
2.4链路状态路由协议 - LSA泛洪
与距离矢量路由协议不同,链路状态路由协议通告的的是链路状态而不是路由表。运行链路状态路由协议的路由器之间首先会建立一个协议的邻居关系,然后彼此之间开始交互LSA(Link State Advertisement,链路状态通告)。
例如R3在OSPF中不再通告路由信息,而是LSA,跟R2、R4建立邻居。
LSA描述了路由器接口的状态信息,例如接口的开销、连接的对象等。
2.5链路状态路由协议 - LSDB组建
每台路由器都会产生LSAs,路由器将接收到的LSAs放入自己的LSDB(Link State DataBase,链路状态数据库)。路由器通过LSDB,掌握了全网的拓扑。
2.6链路状态路由协议 - SPF计算
每台路由器基于LSDB,使用SPF(Shortest Path First,最短路径优先)算法进行计算。每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的“树”。有了这棵“树”,路由器就已经知道了到达网络各个角落的优选路径。
例如R3以自己为树根去计算到达R4、R1和R2的路到底怎么走。
2.7链路状态路由协议 - 路由表生成
最后,路由器将计算出来的优选路径,加载进自己的路由表(Routing Table)。
2.8链路状态路由协议总结
第一步:建立邻居关系;
第二步:发送LSA(链路状态信息),有链路状态信息之后,收集到的信息会放进自己LSDB(链路状态数据库)里面;
第三步:根据LSDB通过运行SPF算法,算出相关的最优路径,
第四步:把最优的路由放进自己的路由表中,用于指导数据的转发。
3.OSPF简介
OSPF是典型的链路状态路由协议,是目前业内使用非常广泛的IGP协议之一。
目前针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version3(RFC2740)。如无特殊说明本章后续所指的OSPF均为OSPF Version 2。
运行OSPF路由器之间交互的是LS(Link State,链路状态)信息,而不是直接交互路由。LS信息是OSPF能够正常进行拓扑及路由计算的关键信息。
OSPF路由器将网络中的LS信息收集起来,存储在LSDB中。路由器都清楚区域内的网络拓扑结构,这有助于路由器计算无环路径。
每台OSPF路由器都采用SPF算法计算达到目的地的最短路径。路由器依据这些路径形成路由加载到路由表中。
OSPF支持VLSM(Variable Length Subnet Mask,可变长子网掩码),支持手工路由汇总。
多区域的设计使得OSPF能够支持更大规模的网络。
4. OSPF在园区网络中的应用
OSPF通常运行在网关上,网关是二层和三层的分界线。
5. OSPF基础术语
5.1区域
OSPF Area用于标识一个OSPF的区域。
区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。
比如说区域0、区域1、区域2等等,为什么要划分区域?主要是为了适应大规模的网络,连减轻或者减少路由器的资源消耗,这是设计的初衷。有了这个区域之后,比如我们设计这个多区域的时候可以方便做路由的汇总,路由的过滤和路径的调整等等。
5.2 Router-ID
Router-ID(Router Identifier,路由器标识符),用于在一个OSPF域中唯一地标识一台路由器。
Router-ID的设定可以通过手工配置的方式,或使用系统自动配置的方式。
如果没有手动去配置Router-ID的话,系统会选择路由器上某个接口作为它的Router-ID。
R1:
sys
un in en
sysn R1
int e0/0/0
ip add 13.1.1.1 24
quit
ospf 1
are 0
net 13.1.1.0 0.0.0.255
quit
R2:
un in en
sysn R2
int e0/0/0
ip add 23.1.1.2 24
quit
ospf 1
are 0
net 23.1.1.0 0.0.0.255
quit
R3:
un in en
sysn R3
int e0/0/0
ip add 13.1.1.3 24
quit
int e0/0/1
ip add 23.1.1.3 24
quit
ospf 1
are 0
net 13.1.1.0 0.0.0.255
net 23.1.1.0 0.0.0.255
quit
通过查看OSPF邻居摘要信息命令可以查看router-ID
display ospf peer brief
R1:
R2:
R3:
这个Router-ID系统生成的不太稳定,最好进行手工配置,手工配置指定的router-id不一定是接口的IP地址。
当我们没有手工指定route-id的情况下,系统已经生成route-id了,如果再去手工配置的话它就是提示我们需要重启OSPF进程才会生效,这时候需要重启OSPF进程。
[R1]ospf 1 router-id 1.1.1.1
重启OSPF进程需要退出到系统配置视图下进行关闭,重启OSPF进程的命令为:
<R1>reset ospf process
还有一个手工配置router-id的方法,先是把整个OSPF进程删除掉,接着在全局下配置router-id,最后创建OSPF进程,配置区域和宣告路由信息。
以R2为例:
[R2]undo ospf 1
Warning: The OSPF process will be deleted. Continue? [Y/N]:y
[R2]router id 2.2.2.2
[R2]ospf 1
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 23.1.1.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]quit
[R2-ospf-1]quit
[R2]display ospf peer brief
宣告路由信息中,0.0.0.255为反掩码,0代表精确匹配,255也就是全为1,1表示任意匹配。
注意:router-id不能配置冲突,即R1和R2的router-id不可以配置相同。
5.3度量值
OSPF使用Cost(开销)作为路由的度量值。每一个激活了OSPF的接口都会维护一个接口Cost值,缺省时接口Cost值=100Mbit/s接口带宽。
其中100 Mbit/s为OSPF指定的缺省参考值,该值是可配置的。
笼统地说,一条OSPF路由的Cost值可以理解为是从目的网段到本路由器沿途所有入接口的Cost值累加。
例如R2的接口带宽为100M,那么计算出来的开销就是1;
当接口带宽为1000M时,默认的100除以1000等于0.1,取值不会取0.1,而是1。
比如R1的E0/0/0百兆接口下的开销是多少呢?可以通过display ospf interface Ethernet 0/0/0命令来查看。
可以通过到接口下,使用命令ospf cost XXX来修改开销值。
开销的累加:
环回口的开销值为0;
如何看开销进行累加:
例如192.168.2.0到达192.168.1.0开销是多少,看路由传递的方向,也就是回包路由的方向,由图可以看出去往192.168.1.0的开销为1+1=2。
当有多条路径到达同一目标的时候,可以通过调整开销值来进行选路。
调整方式一:
把R2的e0/0/1口开销值改为10,那么去往192.168.1.0/24的开销累加就是1+10=11。
调整方式二:
修改缺省参考值100 Mbit/s变为1000Mbit/s
进入到OSPF进程下进行配置修改
[R2]ospf 1
[R2-ospf-1]bandwidth-reference 1000