网络基础:OSPF 协议

OSPF(Open Shortest Path First)是一种广泛使用的链路状态路由协议,用于IP网络中的内部网关协议(IGP)。OSPF通过在网络中的所有路由器之间交换路由信息,选择从源到目的地的最优路径。OSPF工作在OSI模型的第三层,即网络层。OSPF使用IP协议号89进行通信;所有OSPF路由器发送和接收的OSPF报文都封装在IP数据包中,并使用协议号89来标识这些数据包是OSPF报文,OSPF负责在IP网络中进行路由信息的交换和路径计算。

链路状态路由协议和距离矢量路由协议
复制代码
①链路状态路由协议:链路状态路由协议通告的是链路状态而不是路由表;运行链路状态路由协议的路由器之间首先会建立一个协议的邻居关系,然后彼此之间开始交互 LSA(Link State Advertisement,链路状态通告)。(如OSPF)
​
②距离矢量路由协议:运行距离矢量路由协议的路由器周期性的泛洪自己的路由表;通过路由的交互,每台路由 器都从相邻的路由器学习到路由,并且加载进自己的路由表中;对于网络中的所有路由器而言,路由器并不清楚网络的拓扑,只是简单的知道要去往某个 目的方向在哪里,距离有多远。(如RIP)

OSPF正是一种链路状态路由协议,如上述,运行OSPF路由协议的路由器在交换路由信息时并不是单纯向邻居发送自己的路由表,邻居之间交换路由信息时是彼此交互链路状态通告(LSA)信息。LSA也分成不同类型,不同类型的LSA包含的信息也不一样;用的比较多的Router-LSA中包含的信息有:通告生成该LSA的路由器的链路状态,包括路由器的所有接口、接口状态、链路类型(如点到点、广播、多点等)及其邻居。

OSPF基础术语:
复制代码
Router-ID(Router Identifier,路由器标识符):用于在一个OSPF域中唯一地标识一台路由器;Router-ID的设定可以通过手工配置的方式,或使用系统自动配置的方式。
度量值:OSPF使用路径开销作为度量;路径开销是通往目标的路径上所有链路的累积开销。
OSPF三大表项:
1.邻居表:

OSPF在传递链路状态信息之前,需先建立OSPF邻居关系;OSPF的邻居关系通过交互Hello报文建立,OSPF邻居表显示了OSPF路由器之间的邻居状态。在思科(Cisco)、华为(Huawei)和华三(H3C)网络设备上,可以通过命令行接口(CLI)来查看OSPF邻居表。以下是各个设备上的具体命令:

思科(Cisco)

在思科设备上,可以使用以下命令查看OSPF邻居表:

show ip ospf neighbor

此命令将显示所有OSPF邻居的详细信息,包括邻居ID、状态、邻居IP地址和接口信息。

示例输出:
Router# show ip ospf neighbor
​
Neighbor ID     Pri   State           Dead Time   Address         Interface
192.168.1.1       1   FULL/DR         00:00:39    10.1.1.1        GigabitEthernet0/1
192.168.1.2       1   FULL/BDR        00:00:36    10.1.1.2        GigabitEthernet0/1
华为(Huawei)

在华为设备上,可以使用以下命令查看OSPF邻居表:

display ospf peer

此命令将显示所有OSPF邻居的详细信息,包括邻居ID、状态、邻居IP地址和接口信息。

输出示例;

<Huawei> display ospf peer
​
         OSPF Process 1 with Router ID 192.168.1.1
                 Neighbor Brief Information
​
 Area 0.0.0.0 interface 10.1.1.1 (GigabitEthernet0/1)'s neighbors
-------------------------------------------------------------------------------
Router ID       Address         Pri    State         Dead Time   Neighbor Area
192.168.1.2     10.1.1.2        1      Full/BDR      00:00:36    0.0.0.0
192.168.1.3     10.1.1.3        1      Full/DR       00:00:39    0.0.0.0
​
华三(H3C)

在华为设备上,可以使用以下命令查看OSPF邻居表:

display ospf peer

输出示例:

<H3C> display ospf peer
​
         OSPF Process 1 with Router ID 192.168.1.1
                 Neighbor Brief Information
​
 Area 0.0.0.0 interface 10.1.1.1 (GigabitEthernet0/1)'s neighbors
-------------------------------------------------------------------------------
Router ID       Address         Pri    State         Dead Time   Neighbor Area
192.168.1.2     10.1.1.2        1      Full/BDR      00:00:36    0.0.0.0
192.168.1.3     10.1.1.3        1      Full/DR       00:00:39    0.0.0.0
​

通过这些命令,可以方便地查看设备上所有OSPF邻居的详细信息,帮助网络管理员了解OSPF的工作状态和邻居关系。

2.LSDB表

LSDB会保存自己产生的及从邻居收到的LSA信息;LSDB(Link-State Database,链路状态数据库)是OSPF(Open Shortest Path First)协议中存储网络拓扑信息的核心组件。每个OSPF路由器都维护一个LSDB,用于存储从其他路由器接收到的所有链路状态通告(LSA)。这些LSA共同描述了整个网络的拓扑结构,使得路由器能够计算出最优路径。在不同厂商的网络设备上,可以使用相应的命令来查看LSDB的内容。以下是思科(Cisco)、华为(Huawei)和华三(H3C)网络设备上的具体命令:

思科(Cisco)
show ip ospf database
华为(Huawei)
display ospf lsdb
华三(H3C)
display ospf lsdb
3.OSPF路由表

OSPF(Open Shortest Path First)路由表(Routing Table)是OSPF路由器根据其链路状态数据库(LSDB)和最短路径优先(SPF)算法计算出的最优路径的集合。这些路由条目用于决定数据包的转发路径。在不同厂商的网络设备上,可以使用相应的命令来查看OSPF路由表的内容。

思科(Cisco)设备
show ip route ospf
华为(Huawei)
display ospf routing
华三(H3C)
display ospf routing
OSPF工作流程
邻居发现:

OSPF路由器通过定期发送Hello包来发现和维护邻居关系。Hello包包含以下信息:

复制代码
路由器ID
Hello间隔时间
死亡间隔时间
网络掩码
路由器优先级
邻居列表

路由器在收到Hello包后,会检查各项参数是否匹配,如果匹配,则在自己的邻居列表中添加该路由器。
2.

建立邻接关系:

当邻居关系建立后,OSPF路由器之间会进一步建立邻接关系。这个过程包括:

复制代码
①Database Description (DBD) 包交换:DBD包包含链路状态数据库(LSDB)的摘要信息;LSDB(Link-State Database,链路状态数据库)是OSPF(Open Shortest Path First)路由协议中存储网络拓扑信息的数据库。邻居路由器交换DBD包,以确认彼此的LSDB的状态和内容。
②Link State Acknowledgment (LSAck) 包交换:每当一个路由器收到新的LSA时,它会发送LSAck包来确认已收到这些信息。
③Link State Request (LSR) 包交换:如果一个路由器发现自己的LSDB中缺少某些LSA(Link State Advertisement),它会发送LSR包请求这些特定的LSA。
④Link State Update (LSU) 包交换:路由器收到LSR包后,会回应LSU包,其中包含请求的LSA信息。
⑤Link State Acknowledgment (LSAck) 包交换:每当一个路由器收到新的LSA时,它会发送LSAck包来确认已收到这些信息。

OSPF邻接关系

复制代码
OSPF完成邻接关系的建立有四个步骤,建立邻居关系、协商主/从、交互LSDB信息,同步LSDB

这些步骤我们主要说一下协商主/从,在OSPF(Open Shortest Path First)协议中,建立邻接关系时协商主/从关系的主要目的是确保数据库描述(DBD)包的有序交换。如果没有主/从关系的协商,两个路由器可能会同时发送DBD包,导致包的冲突和乱序。这会引起邻接关系的不稳定,甚至中断;主/从关系确保了只有一个路由器(主)负责启动DBD包的发送,另一个路由器(从)按照顺序进行回应,从而避免了冲突和混乱。

主/从关系的选举过程
复制代码
主从关系的选举基于路由器的Router ID。Router ID较大的路由器被选为主(Master),Router ID较小的被选为从(Slave)。
主路由器(Master)首先发送一个DBD包,包含其LSDB的摘要信息。
从路由器(Slave)接收到这个DBD包后,确认并回应一个包含自己LSDB摘要信息的DBD包。

示例说明

复制代码
R1和R2进入Exstart状态,开始协商主从关系。
比较Router ID,2.2.2.2大于1.1.1.1,因此R2被选为主(Master),R1被选为从(Slave)。
R2(主)首先发送一个DBD包。
R1(从)接收到这个DBD包后,确认并回应一个DBD包。
完成初始DBD包交换后,R2和R1状态从Exstart转移到Exchange,继续交换DBD包,最终同步LSDB。
LSA 交换:

一旦邻接关系建立,路由器会开始交换LSA来更新彼此的LSDB,确保LSDB同步;LSA是OSPF中的基本信息单位,包含网络拓扑信息。主要的LSA类型有:

复制代码
Router-LSA (类型1):描述路由器的链路。
Network-LSA (类型2):由DR生成,描述广播网络。
Summary-LSA (类型3):由ABR生成,描述区域间的网络。
ASBR-Summary-LSA (类型4):描述ASBR的可达性。
AS-External-LSA (类型5):由ASBR生成,描述外部自治系统的路由。
运行SPF算法

当路由器的LSDB更新后,它会运行Dijkstra的最短路径优先(SPF)算法来计算最短路径树(SPT)。通过SPF算法,路由器可以生成从自己到所有目的地的最优路径。
5.

路由表更新

SPF算法计算完成后,路由器会根据SPT更新自己的路由表,选择最优路径转发数据包。
6.

维护和更新

OSPF路由器需要定期发送Hello包来维持邻居关系,确保链路状态数据库的同步。当网络拓扑发生变化时(如链路断开、新增路由器),路由器会生成新的LSA并传播这些变化,确保所有路由器能够快速收敛到最新的拓扑状态。(每10s发送一次Hello包,若40s都没有收到邻居的Hello包就自动认为邻居Down掉了)

在OSPF的工作流程中,第二步的LSA交换主要是为了同步邻居之间的链路状态数据库(LSDB),确保它们拥有一致的网络拓扑视图,而第三步的LSA交换则是一个持续的过程,用于维护和更新整个网络的拓扑信息。

DR和BDR选举

在OSPF(Open Shortest Path First)协议中,DR(Designated Router,指定路由器)和BDR(Backup Designated Router,备用指定路由器)在多访问网络(如以太网和非广播多访问网络)中扮演着重要角色。它们的主要目的是减少OSPF路由器之间的LSA(链路状态通告)泛洪次数,提高网络效率。

以正常方式建立邻接关系:

以DR/BDR方式建立邻接关系:

以下是关于DR和BDR的详细解释:

指定路由器(DR):DR负责在多访问网络中作为中央点来进行LSA的泛洪。所有其他路由器(非DR和非BDR)只需与DR交换LSA,而不需要与所有其他路由器直接交换。这减少了网络中的LSA泛洪量。DR从所有路由器收集LSA,并向所有路由器泛洪这些信息,确保所有路由器都能获得最新的链路状态信息。

备用指定路由器(BDR):BDR是DR的备份。当DR失效时,BDR会自动成为新的DR,确保网络拓扑信息的持续传播。BDR在DR正常工作时,也会接收所有路由器的LSA,但它不会主动泛洪这些信息,除非DR失效。

我们可以通过ospf邻居表来查看当前ospf网络中的DR和BDR分别是哪些设备。

DR和BDR的选举过程

  1. Hello包交换

    • 在多访问网络中,所有OSPF路由器通过Hello包来发现彼此并进行DR/BDR的选举。

    • Hello包中包含了路由器的优先级(Priority)和Router ID等信息。

  2. 路由器优先级

    • 每个路由器在Hello包中宣布自己的优先级。优先级值可以在0到255之间。

    • 优先级最高的路由器被选为DR。如果优先级相同,则Router ID较大的路由器被选为DR。

  3. 选举过程

    • 初始选举时,所有路由器都会发送Hello包,包含自己认为的当前DR和BDR。

    • 经过多次Hello包交换后,所有路由器会达成一致,选举出优先级最高的路由器作为DR,次高优先级的路由器作为BDR。

    • 如果路由器的优先级为0,则它不会参与DR/BDR选举,只能作为普通路由器。

示例说明

假设在一个以太网网络中有四个OSPF路由器,R1, R2, R3和R4,它们的优先级和Router ID如下:

复制代码
R1:优先级1,Router ID 1.1.1.1
R2:优先级2,Router ID 2.2.2.2
R3:优先级1,Router ID 3.3.3.3
R4:优先级0,Router ID 4.4.4.4

1.确定优先级最高的路由器:优先级最高的是R2(优先级2),因此R2被选为DR。其次是R1和R3(优先级1),Router ID较大的R3被选为BDR。选举完成,其他路由器则都是普通路由器。

选举后DR和BDR的位置是不可抢占的;若是抢占DR则需要重置DR中的OSPF进程。

OSPF区域结构

OSPF(Open Shortest Path First)的区域结构是为了优化路由信息的管理和传播,通过将大型网络划分为多个区域来减少路由开销、提高稳定性和可扩展性。以下是关于OSPF区域结构的详细介绍:

区域(Area):区域是OSPF网络的一个逻辑分段,每个区域都有一个唯一的32位标识符,通常以IP地址格式表示(例如0.0.0.0);每个区域内部的路由器都共享同一个链路状态数据库(LSDB),但不同区域之间的LSDB是独立的。

骨干区域(Area 0):OSPF网络的核心部分,所有其他区域都必须直接或间接地连接到骨干区域;骨干区域负责汇总和分发来自不同区域的路由信息,确保整个OSPF域的连通性。

非骨干区域:除了骨干区域之外的其他区域,用于进一步划分网络,减少单个区域内的路由器数量。非骨干区域必须通过骨干区域进行通信,不能直接与其他非骨干区域通信。

ospf配置

在OSPF配置过程中,涉及到多个步骤,包括定义OSPF进程、配置区域、指定接口以及调整相关参数。以下是OSPF配置的详细步骤和示例,分别以思科(Cisco)、华为(Huawei)和华三(H3C)设备为例。

思科(Cisco)
  1. 启用OSPF进程

    router ospf 1
    
  2. 配置路由器ID(可选)

    router-id 1.1.1.1
    
  3. 将接口划分到区域

    network 192.168.1.0 0.0.0.255 area 0
    network 192.168.2.0 0.0.0.255 area 1
    
  4. 配置接口OSPF参数(可选)

    interface GigabitEthernet0/1
     ip ospf cost 10
     ip ospf hello-interval 10
    
华为(Huawei)
  1. 启用OSPF进程(并配置route-id)

    ospf 1 route-id 3.3.3.3
    
  2. 将接口划分到区域

    area 0
     network 192.168.1.0 0.0.0.255
    area 1
     network 192.168.2.0 0.0.0.255
    
  3. 配置接口OSPF参数(可选)

    interface GigabitEthernet0/0/1
     ospf cost 10
     ospf hello-interval 10
    
华三(H3C)
  1. 启用OSPF进程(并配置route-id)

    ospf 1 router-id 1.1.1.1
    
  2. 将接口划分到区域

    area 0
     network 192.168.1.0 0.0.0.255
    area 1
     network 192.168.2.0 0.0.0.255
    
  3. 配置接口OSPF参数(可选)

    interface GigabitEthernet1/0/1
     ospf cost 10
     ospf hello-interval 10
    
通用配置步骤
  1. 定义OSPF进程:启动OSPF进程,并分配进程ID。

  2. 配置路由器ID:每个OSPF路由器需要一个唯一的路由器ID。

  3. 划分区域:将接口分配到指定的OSPF区域。

  4. 配置接口参数(可选):可以根据需要配置接口的OSPF特定参数,如开销(cost)、Hello间隔等。

验证配置

在配置完成后,可以使用以下命令来验证OSPF配置和邻居状态。

思科
show ip ospf            //显示与OSPF相关的各种信息
show ip ospf neighbor  //显示邻居表
show ip route ospf    //显示ospf路由表
华为
display ospf             //显示与OSPF相关的各种信息
display ospf peer       //显示邻居表
display ospf routing   //显示ospf路由表
华三
display ospf            //显示与OSPF相关的各种信息
display ospf peer       //显示邻居表
display ospf routing    //显示ospf路由表
ospf相关的两个组播地址

OSPF(Open Shortest Path First)使用两个特定的组播地址来发送和接收OSPF协议消息。这两个组播地址是224.0.0.5和224.0.0.6。

1.组播地址224.0.0.5(AllSPFRouters)

该组播地址用于发送OSPF Hello消息、Link State Request消息、Link State Update消息和Link State Acknowledgment消息到所有运行OSPF的路由器;任何运行OSPF的路由器接口都会监听这个组播地址,以便接收OSPF邻居的各种消息。这是用来建立和维护邻居关系的关键通信方式。

2.组播地址224.0.0.6(AllDRouters)

该组播地址用于发送OSPF Link State Update消息和Link State Acknowledgment消息到指定的DR(Designated Router)和BDR(Backup Designated Router);仅DR和BDR会监听这个组播地址。非DR和非BDR的OSPF路由器会将Link State Update消息发送到224.0.0.6地址,以便DR和BDR可以接收并传播这些消息,从而减少组播的冗余。

相关推荐
起个别名21 分钟前
必须掌握的Linux的九大命令
linux·服务器·网络
薛·27 分钟前
记一次因ThreadPoolExecutor多线程导致服务器内存压满问题
java·服务器
为几何欢31 分钟前
【内网安全】组策略同步-不出网隧道上线-TCP转ICMP
网络·tcp/ip·安全·网络安全
Danica~35 分钟前
RpcChannel的调用过程
网络·c++·rpc
季截36 分钟前
rpc的仅有通信的功能,在网断的情况下,比网通情况下,内存增长会是什么原因
网络·网络协议·rpc
q567315231 小时前
Python/Django 服务器升级脚本
服务器·开发语言·python·游戏·django
风控牛1 小时前
【 VIPKID-注册安全分析报告】
安全
炫酷的伊莉娜1 小时前
【网络安全】第4讲 身份认证技术(笔记)
笔记·安全·web安全
安全方案1 小时前
网络安全的十字路口:向“架构化”转移
安全
炫酷的伊莉娜1 小时前
【计算机网络】数据链路层(作业)
网络·计算机网络·数据链路层