==开放式最短路径优先OSPF (Open Shortest Path First) 协议==是IETF定义的一种基于链路状态的内部网关路由协议。
RIP是一种基于距离矢量算法的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题,目前已逐渐被OSPF取代。
在OSPF协议中,路由传递的方向是从源路由器(发送路由信息的路由器)到目标路由器(接收路由信息的路由器),沿途累计入接口。并且传递的不是路由表而是数据库。
同时启动RIP和OSPF,最终路由表中留下的是OSPF。
默认支持等价负载均衡4,最大支持16,只支持等价负载均衡。
"等价负载"则表示被认为是相等的负载,即无论负载分布到哪个资源上,这些资源的处理能力都是相等的。在负载均衡的场景下,系统会将请求或数据流量根据某种策略分发到不同的资源上进行处理。当资源的处理能力相等时,这种分发策略可以简化为将负载均匀地分发到各个资源上,因为每个资源都有相同的处理能力,可以均衡地处理来自客户端的请求。
同样的协议,两边路由传递的开销值是一致的。
OSPF 和 RIP 的区别
OSPF | RIPv1 | RIPv2 |
---|---|---|
链路状态路由协议 | 距离矢量路由协议 | 距离矢量路由协议 |
没有跳数的限制 | RIP的15跳限制,超过15跳的路由被认为不可达 | RIP的15跳限制,超过15跳的路由被认为不可达 |
支持可变长子网掩码(VLSM) | 不支持可变长子网掩码(VLSM) | 支持可变长子网掩码(VLSM) |
收敛速度快 | 收敛速度慢 | 收敛速度慢 |
使用组播发送链路状态更新 | 周期性广播更新整个路由表 | 周期性组播更新整个路由表 |
OSPF(Open Shortest Path First)是一种基于链路状态的路由协议,它从设计上就保证了无路由环路。OSPF支持区域的划分,区域内部的路由器使用SPF最短路径算法保证了区域内部的无环路
OSPF还利用区域间的连接规则保证了区域之间无路由环路。
OSPF支持触发更新,能够快速检测并通告自治系统内的拓扑变化。
OSPF可以解决网络扩容带来的问题。当网络上路由器越来越多,路由信息流量急剧增长的时候,OSPF可以将每个自治系统划分为多个区域,并限制每个区域的范围。OSPF这种分区域的特点,使得OSPF特别适用于大中型网络。
OSPF可以提供认证功能。OSPF路由器之间的报文可以配置成必须经过认证才能进行交换。
通过交换hello数据包来创建邻居关系,以传播LSA代替路由表更新。将LSA泛洪到区域中的所有OSPF路由器,而不仅是直连的路由器,收集由OSPF路由器生成的所有LSA,以创建OSPF链路状态数据库,使用SPF算法计算到每个目的地的最短距离,并将其置于路由表中。
说简单一点就是,当一台路由器启动了OSPF路由协议后,将向周围的邻居发送一个HELLO包,邻居收到后,将建立邻接关系,并相互传播LSA(链路状态信息),将LSA保存在拓扑表当中,利用SPF算法,计算出到每个目的地最短的距离,并将其置于路由表中。
该数据库中详细的记录了每一个站点记录的路由信息并形成了一张表。
OSPF要求每台运行OSPF的路由器都了解整个网络的链路状态信息,这样才能计算出到达目的地的最优路径。OSPF的收敛过程由链路状态公告LSA(Link State Advertisement)泛洪开始,LSA中包含了路由器已知的接口IP地址、掩码、开销和网络类型等信息。收到LSA的路由器都可以根据LSA提供的信息建立自己的链路状态数据库LSDB(Link State Database),并在LSDB的基础上使用SPF算法进行运算,建立起到达每个网络的最短路径树。最后,通过最短路径树得出到达目的网络的最优路由,并将其加入到IP路由表中。
OSPF直接运行在IP协议之上,使用IP协议号89。属于网络层协议。
OSPF有五种报文类型,每种报文都使用相同的OSPF报文头。
伴随不同的邻居状态,发送不同的数据包。
邻居和邻接关系建立的过程如下:
Router ID是一个32位的值,它唯一标识了一个自治系统内的路由器,管理员可以为每台运行OSPF的路由器手动配置一个Router ID。如果未手动指定,设备会按照以下规则自动选举Router ID:
如果设备存在多个逻辑接口地址,则路由器使用逻辑接口中最大的IP地址作为Router ID;如果设备存在多个逻辑接口地址,则路由器使用逻辑接口中最大的IP地址作为Router ID。
在为一台运行OSPF的路由器配置新的Router ID后,可以在路由器上通过重置OSPF进程来更新Router ID。
通常建议手动配置Router ID,以防止Router ID因为接口地址的变化而改变。
运行OSPF的路由器之间需要交换链路状态信息和路由信息,在交换这些信息之前路由器之间首先需要建立邻接关系。
邻居(Neighbor):
邻接(Adjacency):
OSPF的邻居发现过程是基于Hello报文来实现的,Hello报文中的重要字段解释如下:
Options字段中的参数:
邻居发现过程
路由器R1组播发送请求。只要有路由器启用了OSPF协议,那么它就会解析该组播IP地址。然后R2会审核R1的信息,符合的话会将Router信息存入R2的邻居表中,R2将R1的状态设置为init。
然后R2也会发送一个Hello报文,同样R1也会接受流程和上一步一样M。最后将R2的状态设置为init。
如果R1路由器发现所接收的合法Hello报文的邻居列表中有自己的Router ID,直接给发送数据包的路由器回复一个单播的Hello包,则认为已经和邻居建立了双向连接,表示邻居关系已经建立。将状态设置为2-Way。
验证一个接收到的Hello报文是否合法包括:
如图所示,路由器在建立完成邻居关系之后,便开始进行数据库同步,具体过程如下:
建立完全邻接关系
OSPF定义了四种网络类型,分别是点到点网络,广播型网络,NBMA网络和点到多点网络。
点到点网络是指只把两台路由器直接相连的网络。
广播型网络是指支持两台以上路由器,并且具有广播能力的网络。一个含有三台路由器的以太网就是一个广播型网络的例子。
OSPF支持的网络类型
注意:为了避免ExStart状态下单播DD报文了量过大,所以在2-Way状态下,来选举DR 和 BDR。
**指定路由器DR和备份指定路由器BDR**可以减少邻接关系的数量,从而减少链路状态信息以及路由信息的交换次数,这样可以节省带宽,降低对路由器处理能力的压力。一个既不是DR也不是BDR的路由器(others)只与DR和BDR形成邻接关系并交换链路状态信息以及路由信息,这样就大大减少了大型广播型网络和NBMA网络中的邻接关系数量。在没有DR的广播网络上,邻接关系的数量可以根据公式n(n-1)/2计算出,n代表参与OSPF的路由器接口的数量。
在本例中,所有路由器之间有6个邻接关系。当指定了DR后,所有的路由器都与DR建立起邻接关系,DR成为该广播网络上的中心点。
BDR在DR发生故障时接管业务,一个广播网络上所有路由器都必须同BDR建立邻接关系。本例中使用DR和BDR将邻接关系从6减少到了5,RTA和RTB都只需要同DR和BDR建立邻接关系,RTA和RTB之间建立的是邻居关系。
在邻居发现完成之后,路由器会根据网段类型进行DR选举。在广播和NBMA网络上,路由器会根据参与选举的每个接口的优先级进行DR选举。
优先级取值范围为0-255,值越高越优先。缺省情况下,接口优先级为1。如果一个接口优先级为0,那么该接口将不会参与DR或者BDR的选举。
如果优先级相同时,则比较Router ID,值越大越优先被选举为DR。
为了给DR做备份,每个广播和NBMA网络上还要选举一个BDR。BDR也会与网络上所有的路由器建立邻接关系。
为了维护网络上邻接关系的稳定性,如果网络中已经存在DR和BDR,则新添加进该网络的路由器不会成为DR和BDR,不管该路由器的Router Priority是否最大。如果当前DR发生故障,则当前BDR自动成为新的DR,网络中重新选举BDR;如果当前BDR发生故障,则DR不变,重新选举BDR。这种选举机制的目的是为了保持邻接关系的稳定,使拓扑结构的改变对邻接关系的影响尽量小。
OSPF支持将一组网段组合在一起,这样的一个组合称为一个区域。
区域内的详细拓扑信息不向其他区域发送,区域间传递的是抽象的路由信息,而不是详细的描述拓扑结构的链路状态信息。每个区域都有自己的LSDB,同一个OSPF区域中的路由器中的LSDB是完全一致,不同区域的LSDB是不同的。
路由器会为每一个自己所连接到的区域维护一个单独的LSDB。由于详细链路状态信息不会被发布到区域以外,因此LSDB的规模大大缩小了。
Area 0为骨干区域,为了避免区域间路由环路,非骨干区域之间不允许直接相互发布路由信息。因此,每个区域都必须连接到骨干区域。
运行在区域之间的路由器叫做区域边界路由器ABR(Area Boundary Router),它包含所有相连区域的LSDB。自治系统边界路由器ASBR(Autonomous System Boundary Router)是指和其他AS中的路由器交换路由信息的路由器,这种路由器会向整个AS通告AS外部路由信息。
在规模较小的企业网络中,可以把所有的路由器划分到同一个区域中,同一个OSPF区域中的路由器中的LSDB是完全一致的。OSPF区域号可以手动配置,为了便于将来的网络扩展,推荐将该区域号设置为0,即骨干区域。
OSPF基于接口带宽计算开销,计算公式为:接口开销=带宽参考值÷带宽。
度量值为cost:cost=10^8/BW
以此,一个64kbit/s串口的开销为1562,一个E1接口(2.048 Mbit/s)的开销为48。
命令bandwidth-reference可以用来调整带宽参考值,从而可以改变接口开销,带宽参考值越大,开销越准确。在支持10Gbit/s速率的情况下,推荐将带宽参考值提高到10000Mbit/s来分别为10 Gbit/s、1 Gbit/s和100Mbit/s的链路提供1、10和100的开销。注意,配置带宽参考值时,需要在整个OSPF网络中统一进行调整。
另外,还可以通过ospf cost命令来手动为一个接口调整开销,开销值范围是1~65535,缺省值为1。
在配置OSPF时,需要首先使能OSPF进程。
命令ospf [process id]用来使能OSPF,在该命令中可以配置进程ID。如果没有配置进程ID,则使用1作为缺省进程ID。
命令ospf [process id] [router-id ]既可以使能OSPF进程,还同时可以用于配置Router ID。在该命令中,router-id代表路由器的ID。
命令network用于指定运行OSPF协议的接口,在该命令中需要指定一个反掩码。反掩码中,“0”表示此位必须严格匹配,“1”表示该地址可以为任意值。
配置验证
OSPF支持简单认证及加密认证功能,加密认证对潜在的攻击行为有更强的防范性。OSPF认证可以配置在接口或区域上,配置接口认证方式的优先级高于区域认证方式。
接口或区域上都可以运行ospf authentication-mode { simple [ [ plain ] | cipher ] | null } 命令来配置简单认证,参数simple表示使用明文传输密码,参数plain表示密码以明文形式存放在设备中,参数cipher表示密码以密文形式存放在设备中,参数null表示不认证。
命令ospf authentication-mode { md5 | hmac-md5 } [ key-id { plain | [ cipher ] } ] 用于配置加密认证,MD5是一种保证链路认证安全的加密算法(具体配置已在举例中给出),参数key-id表示接口加密认证中的认证密钥ID,它必须与对端上的key-id一致。
配置验证
在启用认证功能之后,可以在终端上进行调试来查看认证过程。
OSPF hello报文中Router Dead Interval字段的作用是什么?
Router Dead Interval(死亡间隔)是四倍的Hello Interval(Hello间隔)
Router Dead Interval:如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效。
一般是40秒
在广播网络中,DR和BDR用来接收链路状态更新报文的目的地址是什么?
配置R1路由器
[Huawei]ospf 1 # 进程1
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 172.16.1.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0]network 172.16.10.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0]network 172.16.20.0 0.0.0.255
配置R2路由器
[Huawei]ospf 1 # 进程1
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 172.16.2.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0]network 172.16.10.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0]network 172.16.30.0 0.0.0.255
配置R3路由器
[Huawei]ospf 1 # 进程1
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 172.16.3.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0]network 172.16.20.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0]network 172.16.30.0 0.0.0.255
配置查看
display ospf interface
查看邻居路由器的状态
display ospf peer
最后PC1可以与PC2通信,与PC3同理
Wireshark抓包查看
发现确实每隔10秒发送一个Hello报文。
首先进行IP地址配置,然后继续OSPF配置。
R1路由器配置
[Huawei]ospf 1
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 10.0.12.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0]network 10.0.13.0 0.0.0.255
[Huawei]ospf 1
[Huawei-ospf-1]area 1
[Huawei-ospf-1-area-0.0.0.1]network 10.0.15.0 0.0.0.255
R2路由器配置
[Huawei]ospf 1
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 10.0.12.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0]network 10.0.24.0 0.0.0.255
[Huawei]ospf 1
[Huawei-ospf-1]area 2
[Huawei-ospf-1-area-0.0.0.2]network 10.0.26.0 0.0.0.255
R3路由器配置
[Huawei]ospf 1
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 10.0.13.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0]network 10.0.34.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0]network 10.0.3.0 0.0.0.255
[Huawei]ospf 1
[Huawei-ospf-1]area 1
[Huawei-ospf-1-area-0.0.0.1]network 10.0.35.0 0.0.0.255
R4路由器配置
[Huawei]ospf 1
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 10.0.24.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0]network 10.0.34.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0]network 10.0.4.0 0.0.0.255
[Huawei]ospf 1
[Huawei-ospf-1]area 2
[Huawei-ospf-1-area-0.0.0.2]network 10.0.46.0 0.0.0.255
R5路由器配置
[Huawei]ospf 1
[Huawei-ospf-1]area 1
[Huawei-ospf-1-area-0.0.0.1]network 10.0.1.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.1]network 10.0.35.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.1]network 10.0.15.0 0.0.0.255
R6路由器配置
[Huawei]ospf 1
[Huawei-ospf-1]area 2
[Huawei-ospf-1-area-0.0.0.2]network 10.0.2.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.2]network 10.0.46.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.2]network 10.0.26.0 0.0.0.255
最后PC1与PC2通信
先配置各个路由器IP地址,然后配置OSPF认证。
R1路由器配置
[Huawei]ospf 1
[Huawei-ospf-1]area 1
[Huawei-ospf-1-area-0.0.0.1]network 10.0.12.0 0.0.0.255
R2路由器配置
[Huawei]ospf 1
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 10.0.23.0 0.0.0.255
[Huawei]ospf 1
[Huawei-ospf-1]area 1
[Huawei-ospf-1-area-0.0.0.1]network 10.0.24.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.1]network 10.0.12.0 0.0.0.255
R3路由器配置
[Huawei]ospf 1
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 10.0.23.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0]network 10.0.36.0 0.0.0.255
[Huawei-ospf-1-area-0.0.0.0]network 10.0.35.0 0.0.0.255
R4路由器配置
[Huawei]ospf 1
[Huawei-ospf-1]area 1
[Huawei-ospf-1-area-0.0.0.1]network 10.0.24.0 0.0.0.255
R5路由器配置
[Huawei]ospf 1
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 10.0.35.0 0.0.0.255
R6路由器配置
[Huawei]ospf 1
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]network 10.0.36.0 0.0.0.255
R1中设置区域明文加密认证
[Huawei-ospf-1]area 1
[Huawei-ospf-1-area-0.0.0.1]authentication-mode simple plain rjc123
这里密码是可以直接看到的
[Huawei-ospf-1-area-0.0.0.1]display this
R1中设置密文加密认证
[Huawei-ospf-1-area-0.0.0.1]authentication-mode simple wuhu123 # 密码为wuhu123
注意:但是这里这是在设备上显示的是密文,如果抓包查看的话,将会显示为明文。
R4中设置密文加密认证
[Huawei]ospf 1
[Huawei-ospf-1]area 1
[Huawei-ospf-1-area-0.0.0.1]authentication-mode simple wuhu123
R2中设置密文加密认证
[Huawei]ospf 1
[Huawei-ospf-1]area 1
[Huawei-ospf-1-area-0.0.0.1]authentication-mode simple wuhu123
最后R1可以和R4通信
注意:在同一个区域密文口令必须的一致的。
R2配置密文认证
[Huawei]ospf 1
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]authentication-mode md5 1 wuhu123 # 这里的1表示的是标识符,密码为wuhu123
R5配置密文认证
[Huawei]ospf 1
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]authentication-mode md5 1 wuhu123
R3配置密文认证
[Huawei]ospf 1
[Huawei-ospf-1]area 0
[Huawei-ospf-1-area-0.0.0.0]authentication-mode md5 1 wuhu123
R2和R5通信
抓包查看,这次的密码就不会显示明文了。
在同一个接口下面做OSPF认证
R3配置OSPF链路认证
[Huawei]interface g0/0/2
[Huawei-GigabitEthernet0/0/2]ospf authentication-mode md5 1 wuhu123 # 密码为wuhu123
R6配置OSPF链路认证
[Huawei]interface g0/0/0
[Huawei-GigabitEthernet0/0/0]ospf authentication-mode md5 1 wuhu123
通过命令查看邻居的简要信息
[Huawei-GigabitEthernet0/0/0]display ospf peer brief
区域认证和链路认证
RIP :距离矢量协议
OSPF:开放式最短路径优先协议