本文发布于Cylon的收藏册,转载请著名原文链接~


Open Shortest Path First OSPF,开放的最短路径优先协议,是IETF组织开发的一个基于链路状态的内部网关协议,它的使用不受任何厂商限制,所有人都可以使用,所以称为开放的,而最短路径优先(SPF)只是OSPF的核心思想,其使用的算法是Dijkstra算法,最短路径优先并没有太多特殊的含义,并没有任何一个路由协议是最长路径优先的,所有协议,都会选最短的。

OSPF针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)

目的:

在OSPF出现前,网络上广泛使用RIP(Routing Information Protocol)作为内部网关协议。

由于RIP是基于距离矢量算法的路由协议,存在着收敛慢、路由环路、可扩展性差等问题,所以逐渐被OSPF取代。

OSPF作为基于链路状态的协议,能够解决RIP所面临的诸多问题。此外,OSPF还有以下优点:

  • OSPF采用组播形式收发报文,这样可以减少对其它不运行OSPF路由器的影响。
  • OSPF支持无类型域间选路(CIDR)。
  • OSPF支持对等价路由进行负载分担。
  • OSPF支持报文加密。

由于OSPF具有以上优势,使得OSPF作为优秀的内部网关协议被快速接收并广泛使用。

OSPF协议特点:

  • OSPF把自治系统AS(Autonomous System)划分成逻辑意义上的一个或多个区域;
  • OSPF通过LSA(Link State Advertisement)的形式发布路由;
  • OSPF依靠在OSPF区域内各设备间交互OSPF报文来达到路由信息的统一;
  • OSPF报文封装在IP报文内,可以采用单播或组播的形式发送。

OSPF工作流程

寻找邻居

OSPF协议运行后,先寻找网络中可与自己交互链路状态信息的周边路由器,可以交互链路状态信息的路由器互为邻居

建立邻居关系

邻接关系可以想象为一条点到点的虚链路,他是在一些邻居路由器之间构成的。只有建立了可靠邻接关系的路由器才相互传递链路状态信息。

链路状态信息传递

OSPF路由器将建立描述网络链路状态的LSA Link State Advertisement,链路状态公告,建立邻接关系的OSPF路由器之间将交互LSA,最终形成包含网络完整链路状态的配置信息。

计算路由

获得了完整的LSBD后,OSPF区域内的每个路由器将会对该区域的网络结构有相同的认识,随后各路由器将依据LSDB的信息用SPF算法独立计算出路由。

Router ID

OSPF Router-ID用于在OSPF domain中唯一地表示一台OSPF路由器,从OSPF网络设计的角度,我们要求全OSPF域内,禁止出现两台路由器拥有相同的Router-ID

OSPF Router-ID的设定可以通过手工配置的方式,或者通过协议自动选取的方式。当然,在实际网络部署中,强烈建议手工配置OSPF的Router-ID,因为这关系到协议的稳定。

实验:单区域OSPF配置

image-20210125194222939

配置两台路由器

[Huawei]sysname R2

[R2]interface lo0
[R2-LoopBack0]ip add 2.2.2.2 32
[R2-LoopBack0]dis this
[V200R003C00]
#
interface LoopBack0
 ip address 2.2.2.2 255.255.255.255 
#
return
[R2-LoopBack0]quit

[R2]interface g0/0/0
[R2-GigabitEthernet0/0/0]ip a 20.0.0.1 24
Jan 24 2021 22:01:22-08:00 R2 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol IP 
on the interface GigabitEthernet0/0/0 has entered the UP state. 
[R2-GigabitEthernet0/0/0]dis this
[V200R003C00]
#
interface GigabitEthernet0/0/0
 ip address 20.0.0.1 255.255.255.0 
#
return

[R2]dis ip routing-table 
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
         Destinations : 8        Routes : 8        

Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

        2.2.2.2/32  Direct  0    0           D   127.0.0.1       LoopBack0
       20.0.0.0/24  Direct  0    0           D   20.0.0.1        GigabitEthernet
0/0/0
       20.0.0.1/32  Direct  0    0           D   127.0.0.1       GigabitEthernet
0/0/0
     20.0.0.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet
0/0/0
      127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0
      127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0
127.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0
255.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0

整理配置

sysname R2
interface lo0
ip add 2.2.2.2 32
[R2-LoopBack0]dis this
quit
interface g0/0/0
ip a 20.0.0.1 24
dis this
dis ip routing-table 

配置ospf协议

# 配置route-id
ospf router-id 2.2.2.2
# 选择区域
# OSPF实施了两层的分层:
# 1.骨干区域(也就是area0)
# 2.连接到骨干的区域(area1~65535)
area 0
# 声明一个路由,子网掩码为反向的
network 2.2.2.2 0.0.0.0
network 10.0.0.0 0.0.0.255
# 打印ospf对的简要信息
dis ospf peer brief 
# 显示ospf路由表
dis ospf routing

可以看到对应的已经学习到动态的路由

[R1]dis ip routing-table 
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
         Destinations : 9        Routes : 9        

Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

        1.1.1.1/32  Direct  0    0           D   127.0.0.1       LoopBack0
        2.2.2.2/32  OSPF    10   1           D   10.0.0.2        GigabitEthernet
0/0/0
       10.0.0.0/24  Direct  0    0           D   10.0.0.1        GigabitEthernet
0/0/0
       10.0.0.1/32  Direct  0    0           D   127.0.0.1       GigabitEthernet
0/0/0
     10.0.0.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet
0/0/0
      127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0
      127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0
127.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0
255.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0

配置完成后可以看到对应的报文与状态

[R1-ospf-1-area-0.0.0.0]
Jan 24 2021 22:12:19-08:00 R1 %%01OSPF/4/NBR_CHANGE_E(l)[0]:Neighbor changes eve
nt: neighbor status changed. (ProcessId=256, NeighborAddress=2.0.0.10, NeighborE
vent=HelloReceived, NeighborPreviousState=Down, NeighborCurrentState=Init) 
[R1-ospf-1-area-0.0.0.0]
Jan 24 2021 22:12:19-08:00 R1 %%01OSPF/4/NBR_CHANGE_E(l)[1]:Neighbor changes eve
nt: neighbor status changed. (ProcessId=256, NeighborAddress=2.0.0.10, NeighborE
vent=2WayReceived, NeighborPreviousState=Init, NeighborCurrentState=ExStart) 
[R1-ospf-1-area-0.0.0.0]
Jan 24 2021 22:12:19-08:00 R1 %%01OSPF/4/NBR_CHANGE_E(l)[2]:Neighbor changes eve
nt: neighbor status changed. (ProcessId=256, NeighborAddress=2.0.0.10, NeighborE
vent=NegotiationDone, NeighborPreviousState=ExStart, NeighborCurrentState=Exchan
ge) 
[R1-ospf-1-area-0.0.0.0]
Jan 24 2021 22:12:19-08:00 R1 %%01OSPF/4/NBR_CHANGE_E(l)[3]:Neighbor changes eve
nt: neighbor status changed. (ProcessId=256, NeighborAddress=2.0.0.10, NeighborE
vent=ExchangeDone, NeighborPreviousState=Exchange, NeighborCurrentState=Loading)
 
[R1-ospf-1-area-0.0.0.0]
Jan 24 2021 22:12:20-08:00 R1 %%01OSPF/4/NBR_CHANGE_E(l)[4]:Neighbor changes eve
nt: neighbor status changed. (ProcessId=256, NeighborAddress=2.0.0.10, NeighborE
vent=LoadingDone, NeighborPreviousState=Loading, NeighborCurrentState=Full) 
[R1-ospf-1-area-0.0.0.0]

ospf的八种状态

在OSPF网络中,为了交换路由信息,邻居设备之间首先要建立邻接关系,邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念。

邻居关系:OSPF设备启动后,会通过OSPF接口向外发送Hello报文,收到Hello报文的OSPF设备会检查报文中所定义的参数,如果双方一致就会形成邻居关系,两端设备互为邻居。

邻接关系:形成邻居关系后,如果两端设备成功交换DD报文和LSA,才建立邻接关系。

OSPF共有8种状态机,分别是:Down、Attempt、Init、2-way、Exstart、Exchange、Loading、Full。

  • Down:邻居会话的初始阶段,表明没有在邻居失效时间间隔内收到来自邻居路由器的Hello数据包。
  • Attempt:该状态仅发生在NBMA网络中,表明对端在邻居失效时间间隔(dead interval)超时前仍然没有回复Hello报文。此时路由器依然每发送轮询Hello报文的时间间隔(poll interval)向对端发送Hello报文。
  • Init:收到Hello报文后状态为Init。
  • 2-way:收到的Hello报文中包含有自己的Router ID,则状态为2-way;如果不需要形成邻接关系则邻居状态机就停留在此状态,否则进入Exstart状态。
  • Exstart:开始协商主从关系,并确定DD的序列号,此时状态为Exstart。
  • Exchange:主从关系协商完毕后开始交换DD报文,此时状态为Exchange。
  • Loading:DD报文交换完成即Exchange done,此时状态为Loading。
  • Full:LSR重传列表为空,此时状态为Full

实验 多播网络ospf关系

在广播多路访问网络(Multi Access)中,所有的路由器的接口都是相同网段,这些接口两两建立OSPF邻居关系,这就意味着,网络中共有:n(n-1)/2。维护如此多的邻居关系不仅额外消耗资源,更增加了网络中LSA的泛洪数量。

为减小多路访问网络中的 OSPF 流量,OSPF 会在每一个MA网络(多路访问网络)选举一个指定路由器 (DR)和一个备用指定路由器 (BDR)。

DR选举规则:最高OSPF接口优先级拥有者被选作DR,如果优先级相等(默认为1),具有最高的OSPF Router-ID的路由器被选举成DR,并且DR具有非抢占性。

指定路由器 (DR):DR 负责使用该变化信息更新其它所有 OSPF 路由器(DR Rother)。备用指定路由器 (BDR):BDR 会监控 DR 的状态,并在当前 DR 发生故障时接替其角色。 注意OSPF为“接口敏感型协议”,DR及BDR的身份状态是基于OSPF接口的。

MA网络中,所有的DRother路由器均只与DR和BDR建立邻接关系,DRother间不建立全毗邻邻接关系。如此一来,该多路访问网络中设备需要维护的OSPF邻居关系大幅减小:M= (n-2)×2+1,LSA的泛洪问题也可以得到一定的缓解。

image-20210125203616619

可以查看到对应两种状态的ospf中的角色

[R3]dis ospf peer brief

	 OSPF Process 1 with Router ID 10.10.10.10
		  Peer Statistic Information
 ----------------------------------------------------------------------------
 Area Id          Interface                        Neighbor id      State    
 0.0.0.0          GigabitEthernet0/0/0             30.30.30.30      Full        
 0.0.0.0          GigabitEthernet0/0/0             5.5.5.5          Full        
 0.0.0.0          GigabitEthernet0/0/0             6.6.6.6          Full        
 0.0.0.0          GigabitEthernet0/0/0             7.7.7.7          Full        
 ----------------------------------------------------------------------------

[R7-ospf-1-area-0.0.0.0]dis ospf peer brief 

	 OSPF Process 1 with Router ID 7.7.7.7
		  Peer Statistic Information
 ----------------------------------------------------------------------------
 Area Id          Interface                        Neighbor id      State    
 0.0.0.0          GigabitEthernet0/0/0             10.10.10.10      Full        
 0.0.0.0          GigabitEthernet0/0/0             30.30.30.30      Full        
 0.0.0.0          GigabitEthernet0/0/0             5.5.5.5          2-Way       
 0.0.0.0          GigabitEthernet0/0/0             6.6.6.6          2-Way       
 ----------------------------------------------------------------------------
 
 # 除了dr 与 bdr 任何机器值只与dr和bdr形成关系
 [R3]dis ospf peer 

	 OSPF Process 1 with Router ID 10.10.10.10
		 Neighbors 

 Area 0.0.0.0 interface 192.168.0.10(GigabitEthernet0/0/0)'s neighbors
 Router ID: 30.30.30.30      Address: 192.168.0.11    
   State: Full  Mode:Nbr is  Master  Priority: 1
   DR: 192.168.0.10  BDR: 192.168.0.11  MTU: 0    
   Dead timer due in 40  sec 
   Retrans timer interval: 5 
   Neighbor is up for 00:57:22     
   Authentication Sequence: [ 0 ] 

 Router ID: 5.5.5.5          Address: 192.168.0.12    
   State: Full  Mode:Nbr is  Slave  Priority: 1
   DR: 192.168.0.10  BDR: 192.168.0.11  MTU: 0    
   Dead timer due in 40  sec 
   Retrans timer interval: 5 
   Neighbor is up for 00:56:31     
   Authentication Sequence: [ 0 ] 

 Router ID: 6.6.6.6          Address: 192.168.0.13    
   State: Full  Mode:Nbr is  Slave  Priority: 1
   DR: 192.168.0.10  BDR: 192.168.0.11  MTU: 0    
   Dead timer due in 40  sec 
   Retrans timer interval: 5 
   Neighbor is up for 00:56:08     
   Authentication Sequence: [ 0 ]

实验:多区域ospf

image-20210125221613058

对两个区域的路由器设置对应的配置

system-view 
sysname R10
ip address 10.0.0.1 24
in l0
ip address 1.1.1.1 32


ospf router-id 4.4.4.4
area 0
network 0.0.0.0 255.255.255.255
[R10]dis ospf peer brief 

	 OSPF Process 1 with Router ID 4.4.4.4
		  Peer Statistic Information
 ----------------------------------------------------------------------------
 Area Id          Interface                        Neighbor id      State    
 0.0.0.0          GigabitEthernet0/0/0             5.5.5.5          Full        
 ----------------------------------------------------------------------------

对边界路由设置双区域

system-view 
sysname R11
ip address 10.0.0.2 24
in l0
ip address 2.2.2.2 32

interface g0/0/1
ip address 10.1.0.1 255.255.255.0 

ospf router-id 5.5.5.5
area 0
network 10.0.0.0 0.0.0.255
network 2.2.2.2 0.0.0.0


area 1
network 10.1.0.0 0.0.0.255

[R11-ospf-1-area-0.0.0.1]dis ospf peer brief 

	 OSPF Process 1 with Router ID 5.5.5.5
		  Peer Statistic Information
 ----------------------------------------------------------------------------
 Area Id          Interface                        Neighbor id      State    
 0.0.0.0          GigabitEthernet0/0/0             4.4.4.4          Full        
 0.0.0.1          GigabitEthernet0/0/1             3.3.3.3          Full        
 ----------------------------------------------------------------------------

可以看到已经学习到对应的路由了

[R10]dis ip routing-table 
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Tables: Public
         Destinations : 11       Routes : 11       

Destination/Mask    Proto   Pre  Cost      Flags NextHop         Interface

        1.1.1.1/32  Direct  0    0           D   127.0.0.1       LoopBack0
        2.2.2.2/32  OSPF    10   1           D   10.0.0.2        GigabitEthernet
0/0/0
        3.3.3.3/32  OSPF    10   2           D   10.0.0.2        GigabitEthernet
0/0/0
       10.0.0.0/24  Direct  0    0           D   10.0.0.1        GigabitEthernet
0/0/0
       10.0.0.1/32  Direct  0    0           D   127.0.0.1       GigabitEthernet
0/0/0
     10.0.0.255/32  Direct  0    0           D   127.0.0.1       GigabitEthernet
0/0/0
       10.1.0.0/24  OSPF    10   2           D   10.0.0.2        GigabitEthernet
0/0/0
      127.0.0.0/8   Direct  0    0           D   127.0.0.1       InLoopBack0
      127.0.0.1/32  Direct  0    0           D   127.0.0.1       InLoopBack0
127.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0
255.255.255.255/32  Direct  0    0           D   127.0.0.1       InLoopBack0

[ospf-test.zip](......\images\Dynamic Routing - OSPF\ospf-test.zip)

本文发布于Cylon的收藏册,转载请著名原文链接~

链接:https://www.oomkill.com/2021/01/dynamic-routing-ospf/

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。