第07章_动态路由

  • 由于静态路由由网络管理员手工配置,因此当网络发生变化时,静态路由需要手动调整,这制约了静态路由在现网大规模的应用。
  • 动态路由协议因其灵活性高、可靠性好、易于扩展等特点被广泛应用于现网。在动态路由协议之中,OSPF(Open Shortest Path First,开放式最短路径优先)协议是使用场景非常广泛的动态路由协议之一。OSPF在RFC2328中定义,是一种基于链路状态算法的路由协议。
  • RIP是一种基于距离矢量算法的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题,目前已逐渐被OSPF取代。
  • 本课程将初步介绍OSPF基本概念、工作原理和基础配置。

1.动态路由

1.1为什么需要动态路由协议?

  • 静态路由是由工程师手动配置和维护的路由条目,命令行简单明确,适用于小型或稳定的网络。静态路由有以下问题:
    • 无法适应规模较大的网络:随着设备数量增加,配置量急剧增加。
    • 无法动态响应网络变化:网络发生变化,无法自动收敛网络,需要工程师手动修改。

image-20231108164240516

  • 路由器之间交互信息的一种语言。
  • 共享路由信息。
  • 维护路由表、提供最佳转发路径。

1.2动态路由协议的分类

image-20231231201300574

image-20231231201316611

image-20231108164309271

  • BGP使用一种基于距离矢量算法修改后的算法,该算法被称为路径适量(Path Vector)算法。因此在某些场合下,BGP也被称为路径矢量路由协议。

1.2.1根据作用范围

  • IGP(Interior Gateway Protocol)内部网关协议
    • 用于一个AS内部交换路由信息:RIP、OSPF、IS-IS
  • EGP(Exterior Gateway Protocol)外部网关协议
    • 用于多个AS之间交换路由信息:BGP
  • AS(Autonomous System)自治系统
    • 处于单个管理机制下的网络(如:企业、电信、移动、联通)

image-20231231201947885

1.2.2根据协议算法

  • DV(Distance-Vector)距离矢量
    • 基于距离矢量算法,路由器并不了解网络拓扑结构,类似路牌,道听途说
    • 如:RIP、EIGRP
  • LS(Link-State)链路状态
    • 基于SPF(Shortest Path First,最短路径优先)算法,路由器了解完整的网络拓扑结构,类似地图
    • 如:OSPF、IS-IS

image-20231231203551345

image-20231231203606157


image-20231231203615072

1.2.3根据发送的更新是否携带掩码

  • Classful,有类

    • 不携带掩码
    • RIPv1、IGRP
  • Classless,无类

    • 携带掩码
    • RIPv2、EIGRP、OSPF、IS-IS、BGP

image-20231231203759937

1.2.4根据业务应用

  • Unicast Routing Protocol,单播路由协议

    • RIP、EIGRP、OSPF、BGP、IS-IS
  • Multicast Routing Protocol,组播路由协议

    • DVMRP、PIM-SM、PIM-DM

1.3距离矢量路由协议

  • 运行距离矢量路由协议的路由器周期性的泛洪自己的路由表。通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加载进自己的路由表中。
  • 对于网络中的所有路由器而言,路由器并不清楚网络的拓扑,只是简单的知道要去往某个目的方向在哪里,距离有多远。这即是距离矢量算法的本质。

image-20231108164412278


1.4链路状态路由协议

1.4.1LSA泛洪

  • 与距离矢量路由协议不同,链路状态路由协议通告的的是链路状态而不是路由表。运行链路状态路由协议的路由器之间首先会建立一个协议的邻居关系,然后彼此之间开始交互==LSA==(Link State Advertisement,链路状态通告)。

image-20231108164535839

  • 链路状态通告,可以简单的理解为每台路由器都产生一个描述自己直连接口状态(包括接口的开销、与邻居路由器之间的关系等)的通告。
  • 链路状态:路由器直连链路的属性(状态)
  • 链路属性:
    1. 链路上的邻居
    2. 链路开销
    3. 直连的网络号
    4. 接口的地址
    5. 链路的类型

1.4.2LSDB组建

  • 每台路由器都会产生LSAs,路由器将接收到的LSAs放入自己的==LSDB==(Link State DataBase,链路状态数据库)。路由器通过LSDB,掌握了全网的拓扑。

image-20231108164950162


1.4.3SPF计算

  • 每台路由器基于LSDB,使用==SPF==(Shortest Path First,最短路径优先)算法进行计算。每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的“树”。有了这棵“树”,路由器就已经知道了到达网络各个角落的优选路径。

image-20231108165054372

  • SPF是OSPF路由协议的一个核心算法,用来在一个复杂的网络中做出路由优选的决策。

1.4.4路由表生成

  • 最后,路由器将计算出来的优选路径,加载进自己的路由表(Routing Table)。

image-20231108165146456


1.4.5链路状态路由协议总结

image-20231108165230812

  • 链路状态路由协议有四个步骤:
    • 第一步是建立相邻路由器之间的邻居关系。
    • 第二步是邻居之间交互链路状态信息和同步LSDB。
    • 第三步是进行优选路径计算。
    • 第四步是根据最短路径树生成路由表项加载到路由表。

1.5路由协议操作规则

  • 协议是在接口上运行的;
  • 只能学习和发布相同协议已知的路由信息;
  • 如果不同的路由协议间需要交换路由信息,就需要进行==注入==(import)。

image-20231231204643061

1.6路由器收敛

  • 当所有路由表包含相同网络可达性信息
  • 网络(路由)进入一个稳定状态
  • 网络在达到收敛前无法完全正常工作

1.7衡量动态路由协议的一些性能指标

  • 正确性 :能够正确找到最优的路由,且无自环。

  • 快收敛 :当拓朴结构发生变化之后,能够迅速作出相应的路由改变。

  • 低开销 :协议自身的开销(内存、CPU、网络带宽)最小。

  • 安全性 :协议自身不易受攻击,有安全机制。

  • 普适性 :适应各种拓扑结构和各种规模的网络。


2.OSPF

2.1OSPF简介

  • OSPF(Open Shortest Path First,开放最短路径优先)是典型的链路状态路由协议,是目前业内使用非常广泛的IGP协议之一。
  • 目前针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740)。如无特殊说明本章后续所指的OSPF均为OSPF Version 2。
  • 运行OSPF路由器之间交互的是LS(Link State,链路状态)信息,而不是直接交互路由。LS信息是OSPF能够正常进行拓扑及路由计算的关键信息。
  • OSPF路由器将网络中的LS信息收集起来,存储在LSDB中。路由器都清楚区域内的网络拓扑结构,这有助于路由器计算无环路径。
  • 每台OSPF路由器都采用SPF算法计算达到目的地的最短路径。路由器依据这些路径形成路由加载到路由表中。
  • OSPF支持VLSM(Variable Length Subnet Mask,可变长子网掩码),支持手工路由汇总。多区域的设计使得OSPF能够支持更大规模的网络。

• 大中型网络上使用最为广泛的IGP协议

• 链路状态路由协议

• 无类

• 使用组播(224.0.0.5和224.0.0.6)

• 收敛较快

• 以开销(Cost)作为度量值

• 采用的SPF算法可以有效的避免环路

• 触发式更新(以较低的频率(每30分钟)发送定期更新,被称为链路状态泛洪)

区域的设计使得OSPF能够支持更大规模的网络

• 不支持自动汇总,支持手动汇总


OSPF在园区网络中的应用

image-20231108165529090


2.2OSPF基础术语

2.2.1区域

  • OSPF Area用于标识一个OSPF的区域。
  • 区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。

image-20231108165829526

image-20240119173436773


2.2.2Router-ID

  • 运行OSPF协议前,必须选取一个RID
  • 用来唯一标识一台OSPF路由器
  • RID可以手动配置,也可以自动生成
  • Router-ID(Router Identifier,路由器标识符),用于在一个OSPF域中唯一地标识一台路由器。
  • Router-ID的设定可以通过手工配置的方式,或使用系统自动配置的方式。

image-20231108165909972

  • 在实际项目中,通常会通过手工配置方式为设备指定OSPF Router-ID。请注意必须保证在OSPF域中任意两台设备的Router-ID都不相同。通常的做法是将Router-ID配置为与该设备某个接口(通常为Loopback接口)的IP地址一致。

  • route id格式:点分十进制,长度32bit 1.1.1.1,2.2.2.2

  • route id手动配置优先级高于自动配置

  • 默认情况下,路由器会使用配置的第一个ip地址作为自己全局的router id,管理员也可以手动配置全局router id

loopback:由管理员根据实际需要创建的逻辑路由接口,只要路由器开机,这个接口不会存在物理障碍,稳定性好,所以通常作为ospf router id的选择接口。loopback接口也可以作为网络测试接口,或者设备的带内网管地址。

  • RID选取顺序规则
    1. 手动配置(推荐)
    2. 活动回环接口上选取IP地址最高的
    3. 活动物理接口上选取IP地址最高的

注:RID选举具有==非抢占性==,除非重启OSPF进程

image-20240121181044534


2.2.3cost度量值

  • 到一个目标网络的度量值 :
    • 从源到目标所有出站接口的Cost值累加(数据方向)
    • 从源到本路由器沿途所有入站接口的Cost值累加(路由方向)
  • OSPF使用Cost(开销)作为路由的度量值。每一个激活了OSPF的接口都会维护一个接口Cost值,缺省时接口Cost值=100 Mbit/s /接口带宽。其中100 Mbit/s为OSPF指定的缺省参考值,该值是可配置的。
  • 笼统地说,一条OSPF路由的Cost值可以理解为是从目的网段到本路由器沿途所有==入接口==的Cost值累加。

image-20231108170133042

  • OSPF基于接口带宽计算开销的计算公式为带宽参考值/带宽。带宽参考值可配置,缺省为100Mbit/s。

    • 以此,一个64kbit/s串口的开销为1562,
    • 一个E1接口(2.048Mbit/s)的开销为48。
  • 命令bandwidth-reference可以用来调整带宽参考值,从而可以改变接口开销,带宽参考值越大,开销越准确。在支持10Gbit/s速率的情况下,推荐将带宽参考值提高到10000Mbit/s来分别为10 Gbit/s、1Gbit/s和100Mbit/s的链路提供1、10和100的开销。注意,配置带宽参考值时,需要在整个OSPF网络中统一进行调整。

  • 另外,还可以通过ospf cost命令来手动为一个接口调整开销,开销值范围是1~65535,缺省值为1。ospf cost 接口配置ospf cost ,优先级高于公式计算


2.3OSPF报文类型

image-20231108170419617

  • OSPF报文封装在IP报文中,协议号为89。
  • OSPF报文类型有5种,每种报文都使用相同的OSPF报文头:
    • ==Hello==报文
      • 最常用的一种报文,用于发现、维护邻居关系。并在广播和NBMA(None-Broadcast Multi-Access)类型的网络中选举指定路由器DR(Designated Router)和备份指定路由器BDR(Backup Designated Router)。
    • ==DD==(Database Description)报文
      • 两台路由器进行LSDB数据库同步时,用DD报文来描述自己的LSDB。DD报文的内容包括LSDB中每一条LSA的头部(LSA的头部可以唯一标识一条LSA)。LSA头部只占一条LSA的整个数据量的一小部分,所以,这样就可以减少路由器之间的协议报文流量。
      • Database Description 以将DB信息以目录方式传送给对方
    • ==LSR==(Link State Request )报文
      • 两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地LSDB所缺少的,这时需要发送LSR报文向对方请求缺少的LSA,LSR只包含了所需要的LSA的摘要信息。
    • ==LSU==(Link State Update )报文
      • 用来向对端路由器发送所需要的LSA。
    • ==LSACK==(Link State Acknowledgment)报文
      • 用来对接收到的LSU报文进行确认。

2.4OSPF工作流程

  1. 发现并建立邻居
  2. 传播 ==LSA==(区别于距离矢量的路由表更新)
    1. Link State Advertisement,链路状态宣告(路况信息)
    2. 链路:路由器接口
    3. 状态:描述接口信息(地址、掩码、开销、网络类型、邻居关系等)
  3. 将LSA泛洪到区域中的所有OSPF路由器,而不仅是直连的路由器
  4. 收集LSA创建==LSDB==(链路状态数据库,地图)
  5. 使用==SPF算法==计算到每个目标网络的最短距离,并将其置于路由表中

image-20240119183131039

image-20240119183148046

image-20240119183158235

image-20240119183211009

image-20240119183219618


image-20240119183241895


2.5OSPF三大表项

2.5.1邻居表

  • OSPF有三张重要的表项,==OSPF邻居表==、==LSDB表==和==OSPF路由表==。对于OSPF的邻居表,需要了解:
    • OSPF在传递链路状态信息之前,需先建立OSPF邻居关系。
    • OSPF的邻居关系通过交互Hello报文建立。
    • OSPF邻居表显示了OSPF路由器之间的邻居状态,使用display ospf peer查看。

image-20231108203933037

  • OSPF邻居表有很多关键信息,例如可以查看对端设备的Router ID和接口地址。更多详细信息在”OSPF协议工作原理”这一节展开。

2.5.2LSDB表

  • 对于OSPF的LSDB表,需要了解:
  • LSDB会保存自己产生的及从邻居收到的LSA信息,本例中R1的LSDB包含了三条LSA
  • Type标识LSA的类型,AdvRouter标识发送LSA的路由器。
  • 使用命令行display ospf lsdb查看LSDB表。

image-20231108204158221

  • 更多LSA相关内容请学习HCIP-DataCom。

2.5.3OSPF路由表

  • 对于OSPF的路由表,需要了解:
    • OSPF路由表和路由器路由表是两张不同的表项。本例中OSPF路由表有三条路由。
    • OSPF路由表包含DestinationCostNextHop等指导转发的信息。
    • 使用命令display ospf routing查看OSPF路由表。

image-20231108204308426

  • 更多OSPF路由表相关内容请学习HCIP-DataCom。

2.6OSPF数据包结构

  • OSPF直接运行于IP协议之上,使用IP协议号==89==
  • OSPF是网络层协议,不是传输层协议

image-20240121190110050


image-20240121190202419

抓包数据

  • ==hello包==

    image-20240121190548371

    image-20240121190901128

  • ==DD包==(只在建立邻居关系的时候发送)

    • 拓扑图

    image-20240121194120217

    • 第一阶段不包含实际链路

    image-20240121191802530

    • 第二阶段包含Router-LSA

    image-20240121192529808

    • 不是完整的LSA,完整LSA信息如下(dis ospf router可以查看完整LSA信息):

    image-20240121192733638

  • ==LSU包==

    • AR1新增loopback接口1.1.1.1,主动发送LSU

    image-20240121193239525

  • ==LS Ack包==

    • 根据Sequence Number确认

    image-20240121193403194

2.7OSPF协议工作原理

2.7.1OSPF路由器之间的关系

  • 关于OSPF路由器之间的关系有两个重要的概念,==邻居关系==和==邻接关系==。
  • 考虑一种简单的拓扑,两台路由器直连。在双方互联接口上激活OSPF,路由器开始发送及侦听Hello报文。在通过Hello报文发现彼此后,这两台路由器便形成了邻居关系。
  • 邻居关系的建立只是一个开始,后续会进行一系列的报文交互,例如前文提到的DDLSRLSULS ACK等。当两台路由器LSDB同步完成,并开始独立计算路由时,这两台路由器形成了邻接关系。

image-20231108211230642

==Router ID==:

  • 是一个32位的值,它唯一标识了一个自治系统内的路由器,管理员可以为每台运行OSPF的路由器手动配置一个Router ID。如果未手动指定,设备会按照以下规则自动选举Router ID:

    • 如果设备存在多个逻辑接口地址,则路由器使用逻辑接口中最大的IP地址作为Router ID;
    • 如果没有配置逻辑接口,则路由器使用物理接口的最大IP地址作为RouterID。
    • 在为一台运行OSPF的路由器配置新的RouterID后,可以在路由器上通过重置OSPF进程来更新Router ID。
    • 通常建议手动配置RouterID,以防止Router ID因为接口地址的变化而改变。
  • 运行OSPF的路由器之间需要交换链路状态信息和路由信息,在交换这些信息之前路由器之间首先需要建立邻接关系。

==邻居(Neighbor)==:

  • OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文用于发现邻居。
  • 收到Hello报文的OSPF路由器会检查报文中所定义的一些参数,如果双方的参数一致,就会彼此形成邻居关系,状态到达2-way即可称为建立了邻居关系。

==邻接(Adjacency)==:

  • 形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。只有当双方成功交换DD报文,并同步LSDB后,才形成真正意义上的邻接关系。

  • 本例中,RTA通过以太网连接了三个路由器,所以RTA有三个邻居,但不能说RTA有三邻接关系。


2.7.2OSPF邻接关系建立过程

  • OSPF完成邻接关系的建立有四个步骤,
    1. 建立邻居关系
    2. 协商主/从
    3. 交互LSDB信息
    4. 同步LSDB

image-20231108204836779

  • 邻居和邻接关系建立的过程如下:

image-20231108211142862

image-20240121215306305

  • Down:这是邻居的初始状态,表示没有在邻居失效时间间隔内收到来自邻居路由器的Hello数据包。
  • Attempt:此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为Hello Interval。如果RouterDeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。
  • Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中,尚未与邻居建立双向通信关系。
  • 2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。
  • ExStart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文。主从关系是在此状态下形成的,初始DD序列号也是在此状态下决定的。在此状态下发送的DD报文不包含链路状态描述。
  • Exchange:此状态下路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。
  • Loading:相互发送LSR报文请求LSA,发送LSU报文通告LSA。
  • Full:路由器的LSDB已经同步。

2.7.3OSPF邻接关系建立流程

2.7.3.1邻居发现

image-20231108204958021

  • 当一台OSPF路由器收到其他路由器发来的首个Hello报文时会从初始Down状态切换为Init状态。
  • 当OSPF路由器收到的Hello报文中的邻居字段包含自己的Router ID时,从Init切换2-way状态。

邻居如何维护:

  1. hello每隔==10s==周期性发送,==40s==后没有收到邻居的hello包,则认为邻居失效

image-20231108212911921

OSPF的邻居发现过程是基于Hello报文来实现的,Hello报文中的重要字段解释如下:

  • Network Mask:发送Hello报文的接口的网络掩码。
  • Hello Interval:发送Hello报文的时间间隔,单位为秒。
  • Options:标识发送此报文的OSPF路由器所支持的可选功能。具体的可选功能已超出这里的讨论范围。
  • Router Priority:发送Hello报文的接口的Router Priority,用于选举DR和BDR。
  • Router Dead Interval:失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效;单位为秒,通常为四倍Hello Interval。
  • Designated Router:发送Hello报文的路由器所选举出的DR的IP地址。如果设置为0.0.0.0,表示未选举DR路由器。
  • Backup Designated Router:发送Hello报文的路由器所选举出的BDR的IP地址。如果设置为0.0.0.0,表示未选举BDR。
  • Neighbor:邻居的Router ID列表,表示本路由器已经从这些邻居收到了合法的Hello报文。如果路由器发现所接收的合法Hello报文的邻居列表中有自己的Router ID,则认为已经和邻居建立了双向连接,表示邻居关系已经建立。

验证一个接收到的Hello报文是否合法包括:

  • 如果接收端口的网络类型是广播型,点到多点或者NBMA,所接收的Hello报文中Network Mask字
  • 段必须和接收端口的网络掩码一致,如果接收端口的网络类型为点到点类型或者是虚连接,则不检查Network Mask字段;
  • 所接收的Hello报文中Hello Interval字段必须和接收端口的配置一致;
  • 所接收的Hello报文中Router Dead Interval字段必须和接收端口的配置一致;
  • 所接收的Hello报文中Options字段中的E-bit(表示是否接收外部路由信息)必须和相关区域的配置一致。
  • 邻居建立条件:
    • RID唯一
    • Hello/Dead时间间隔一致
    • 区域ID一致
    • 认证(如果启用了认证) 一致
    • 链路MTU大小一致
    • 子网掩码一致(以太网环境)
    • 网络地址一致
    • 末梢区域设置一致

2.7.3.2数据库同步

image-20231108205433274

  • 邻居状态机从2-way转为Exstart状态后开始主从关系选举:
    • R1向R2发送的第一个DD报文内容为空,其Seq序列号假设为X。
    • R2也向R1发出第一个DD报文,其Seq序列号假设为Y。
    • 选举主从关系的规则是比较Router ID,越大越优。
      • R2的Router ID比R1大,因此R2成为真正的主设备。
      • 主从关系比较结束后,R1的状态从Exstart转变为Exchange。
  • R1邻居状态变为Exchange后,R1发送一个新的DD报文,包含自己LSDB的描述信息,其序列号采用主设备R2的序列号。R2收到后邻居状态从Exstart转变为Exchange。
  • R2向R1发送一个新的DD报文,包含自己LSDB的描述信息,序列号为Y+1。
  • R1作为从路由器需要对主路由R2发送的每个DD报文进行确认,回复报文的序列号与主路由R2一致。
  • 发送完最后一个DD报文后,R1将邻居状态切换为Loading。

从路由器以主路由器序列号为准 只有主路由器序列号才+1

抓包数据如下

  • 最开始DD报文都发自己是Master

    image-20240121222801705

    image-20240121222816622

  • R2的Router ID比R1大,因此R2成为真正的主设备。R1后续DD发送Master为no,并且序列号变为和R2一致。

    image-20240121223006865

  • 只有主路由器序列号才+1,R2向R1发送一个新的DD报文,包含自己LSDB的描述信息,序列号为Y+1

    image-20240121223156538


2.7.3.3建立完全邻接关系

image-20231108210233075

  • 邻居状态转变为Loading后,R1向R2发送LSR报文,请求那些在Exchange状态下通过DD报文发现的,但是在本地LSDB中没有的LSA。
  • R2收到后向R1回复LSU。在LSU报文中包含被请求的LSA的详细信息。
  • R1收到LSU报文后,向R2回复LS ACK报文,确认已接收到,确保信息传输的可靠性。
  • 此过程中R2也会向R1发送LSA请求。当两端LSDB完全一致时,邻居状态变为Full,表示成功建立邻接关系。

2.7.4OSPF邻居表回顾

image-20231108210458492

  • 如图所示输入display ospf peer命令之后,各项参数含义如下:
    • OSPF Process 1 with Router ID 1.1.1.1:本地OSPF进程号为1与本端OSPF Router ID为1.1.1.1
    • Router ID:邻居OSPF路由器ID
    • Address:邻居接口地址
    • GR State:使能OSPF GR功能后显示GR的状态(GR为优化功能),默认为Normal
    • State:邻居状态,正常情况下LSDB同步完成之后,稳定停留状态为Full
    • Mode:用于标识本台设备在链路状态信息交互过程中的角色是Master还是Slave
    • Priority:用于标识邻居路由器的优先级(该优先级用于后续DR角色选举)
    • DR:指定路由器
    • BDR:备份指定路由器
    • MTU:邻居接口的MTU值
    • Retrans timer interval:重传LSA的时间间隔,单位为秒
    • Authentication Sequence:认证序列号

2.8OSPF网络类型

  • 在学习DR和BDR的概念之前,需要首先了解OSPF的网络类型。
  • OSPF网络类型是一个非常重要的==接口变量==,这个变量将影响OSPF在接口上的操作,例如采用什么方式发送OSPF协议报文,以及是否需要选举DR、BDR等。
  • 接口默认的OSPF网络类型取决于==接口==所使用的数据链路层封装。
  • 如图所示,OSPF的有四种网络类型,==Broadcast==、==NBMA==、==P2MP==和==P2P==。

image-20231108213454035

ospf默认网络类型的确定:

  1. 接口如果是PPP,HDLC,则认为P2P链路类型
  2. 接口如果是eth,FDDI,则认为是Broadcast链路类型
  3. 接口如果是FR(帧中继),ATM,则认为是NBMA(非广播多路访问)链路类型
  4. 没有任何一种链路层协议被认为是P2MP(点到多点),管理员手动配置的

缺省情况下,OSPF认为以太网的网络类型是广播类型,PPP、HDLC的网络类型是点到点类型。


2.8.1P2P

  • 一般情况下,链路两端的OSPF接口网络类型必须一致,否则双方无法建立邻居关系。

  • OSPF网络类型可以在接口下通过命令手动修改以适应不同网络场景,例如可以将BMA网络类型修改为P2P。

  • P2P指的是在一段链路上只能连接两台网络设备的环境。典型的例子是PPP链路。当接口采用PPP封装时,OSPF在该接口上采用的缺省网络类型为P2P 。

image-20231108214038347


2.8.2Broadcast

  • BMA也被称为Broadcast,指的是一个允许多台设备接入的、支持广播的环境。典型的例子是Ethernet(以太网)。当接口采用Ethernet封装时,OSPF在该接口上采用的缺省网络类型为BMA。

image-20231108214158593


2.8.3NBMA

  • NBMA指的是一个允许多台网络设备接入且不支持广播的环境。典型的例子是帧中继(Frame-Relay)网络。

  • OSPF可以在不支持广播的多路访问网络上运行,此类网络包括在hub-spoke拓扑上运行的帧中继(FR)和异步传输模式(ATM)网络,这些网络的通信依赖于虚电路。

  • OSPF定义了两种支持多路访问的网络类型:非广播多路访问网络(NBMA)和点到多点网络(PointTo Multi-Points)。

  • NBMA:在NBMA网络上,OSPF模拟在广播型网络上的操作,但是每个路由器的邻居需要手动配置。NBMA方式要求网络中的路由器组成全连接。

image-20231108214356660


2.8.4P2MP

  • P2MP相当于将多条P2P链路的一端进行捆绑得到的网络。
  • 没有一种链路层协议会被缺省的认为是P2MP网络类型。该类型必须由其他网络类型手动更改。常用做法是将非全连通的NBMA改为点到多点的网络。

image-20231108214558737


2.9DR&BDR

2.9.1DR&BDR背景

  • MA(Multi-Access)多路访问网络有两种类型:广播型多路访问网络(BMA)及非广播型多路访问网络(NBMA)。以太网(Ethernet)是一种典型的广播型多路访问网络。
  • 在MA网络中,如果每台OSPF路由器都与其他的所有路由器建立OSPF邻接关系,便会导致网络中存在过多的OSPF邻接关系,增加设备负担,也增加了网络中泛洪的OSPF报文数量。
  • 当拓扑出现变更,网络中的LSA泛洪可能会造成带宽的浪费和设备资源的损耗。

image-20240122112249297


2.9.2DR&BDR概述

  • 为优化MA网络中OSPF邻接关系,OSPF指定了三种OSPF路由器身份,

    • DR(Designated Router,指定路由器)、
    • BDR(Backup Designated Router,备用指定路由器)
    • DRother路由器。
  • 只允许DR、BDR与其他OSPF路由器建立邻接关系(Full)。

  • DRother之间不会建立全毗邻的OSPF邻接关系,双方停滞在2-way状态。

  • BDR会监控DR的状态,并在当前DR发生故障时接替其角色。

image-20231108215019003


  • 每一个含有至少两个路由器的广播型网络和NBMA网络都有一个DR和BDR。

  • DR和BDR可以减少邻接关系的数量,从而减少链路状态信息以及路由信息的交换次数,这样可以节省带宽,降低对路由器处理能力的压力。一个既不是DR也不是BDR的路由器只与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之间建立的是邻居关系。

  • 此例中,邻接关系数量的减少效果并不明显。但是,当网络上部署了大量路由器时,比如100台,那么情况就大不一样了。

image-20231108215611239


2.9.3DR&BDR选举

  • 首先比较Hello报文中携带的优先级
    • 优先级范围0~255,默认=1
    • 优先级最高的被选举为DR,优先级次高的被选举为BDR
    • 优先级为0的不参与选举
  • 优先级一致的情况下,比较RID,越大越优先
  • 选举不具有抢占性,除非当DR和BDR都失效或重启OSPF进程。
  • DR是基于端口的DR优先级的值进行选举的。

image-20231108215849091

  • 在邻居发现完成之后,路由器会根据网段类型进行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 DR优先级更高的接口成为该MA的DR,
  • 如果优先级相等(默认为1),则具有更高的OSPF Router-ID的路由器(的接口)被选举成DR,
  • 并且DR具有==非抢占性==。

image-20240122114718140

案例

  • 拓扑图:

    • 依次给R1,R2,R3,R4配置OSPF

    image-20240122120146327

  • R4邻居表:

    image-20240122115909084

2.9.4DR&BDR地址

  • 224.0.0.5向所有OSPF路由器发送

  • 224.0.0.6向DR和BDR发送链路状态更新

image-20240122121251173

  • 路由器R3感知到拓扑变更,向组播地址224.0.0.6发送LSU

  • DR、BDR监听224.0.0.6这一组播地址

image-20240122121417516

  • DR向组播地址224.0.0.5发送更新以便通知其它路由器
  • 所有的OSPF路由器监听224.0.0.5这一组播地址,便能收到DR泛洪的LSU

案例

  • 拓扑图

    image-20240122122434695

  • AR1为DR,新增loopback接口并加入OSPF1,后会向其他AR发送LSU

    image-20240122122352578

  • AR3为DRother,新增loopback接口并加入OSPF1,后会向DR发送LSU,DR/BDR再发送给其他AR。

    image-20240122122609490


2.10OSPF区域

2.10.1OSPF域与单区域

  • OSPF域(Domain):一系列使用相同策略的连续OSPF网络设备所构成的网络。
  • OSPF路由器在同一个区域(Area)内网络中泛洪LSA。为了确保每台路由器都拥有对网络拓扑的一致认知,LSDB需要在区域内进行同步。
  • 如果OSPF域仅有一个区域,随着网络规模越来越大,OSPF路由器的数量越来越多,这将导致诸多问题:
    • LSDB越来越庞大,同时导致OSPF路由表规模增加。路由器资源消耗多,设备性能下降,影响数据转发。
    • 基于庞大的LSDB进行路由计算变得困难。
    • 当网络拓扑变更时,LSA全域泛洪和全网SPF重计算带来巨大负担。

image-20231108220555516


2.10.2OSPF多区域

  • OSPF引入区域(Area)的概念,将一个OSPF域划分成多个区域,可以使OSPF支撑更大规模组网。
  • 区域是以==接口==为单位来划分的,每个OSPF路由器只维护所在区域的完整链路状态信息。
  • OSPF多区域的设计减小了LSA泛洪的范围,有效的把拓扑变化的影响控制在区域内,达到网络优化的目的。
  • 在区域边界可以做路由汇总,减小了路由表规模,使拓扑变化仅影响本区域内部。
  • 多区域提高了网络扩展性,有利于组建大规模的网络。
  • OSPF支持将一组网段组合在一起,这样的一个组合称为一个区域。划分OSPF区域可以缩小路由器的LSDB规模,减少网络流量。
  • **区域内的详细拓扑信息不向其他区域发送,区域间传递的是抽象的路由信息,而不是详细的描述拓扑结构的链路状态信息。**每个区域都有自己的LSDB,不同区域的LSDB是不同的。路由器会为每一个自己所连接到的区域维护一个单独的LSDB。由于详细链路状态信息不会被发布到区域以外,因此LSDB的规模大大缩小了。

image-20231108220653580

  • 每个区域都维护一个独立的LSDB。==Area 0==是骨干区域,其他区域都必须与此区域相连。
  • 区域的分类:区域可以分为骨干区域非骨干区域。骨干区域即Area0,除Area0以外其他区域都称为非骨干区域。
  • 多区域互联原则:基于防止区域间环路的考虑,**非骨干区域与非骨干区域不能直接相连,所有非骨干区域必须与骨干区域相连。**Area 0为骨干区域,为了避免区域间路由环路,非骨干区域之间不允许直接相互发布路由信息。因此,每个区域都必须连接到骨干区域。

2.10.3OSPF路由器类型

  • OSPF路由器根据其位置或功能不同,有这样几种类型:
    • 区域内路由器==IR==(Internal Router):
      • 该类路由器的所有接口都属于同一个OSPF区域。
    • 骨干路由器==BR==(Backbone Router):
      • 该类路由器至少有一个接口属于骨干区域。
    • 区域边界路由器==ABR==(Area Border Router):
      • 该类路由器的接口同时属于两个以上的区域,但至少有一个接口属于骨干区域。
    • 自治系统边界路由器==ASBR==(AS Boundary Router):
      • 该类路由器与其他AS交换路由信息。只要一台OSPF路由器引入了外部路由的信息,它就成为ASBR。
  • 注:一台路由器可以同时属于多种类型
  • 运行在区域之间的路由器叫做区域边界路由器ABR(Area Boundary Router),它包含所有相连区域的LSDB。自治系统边界路由器ASBR(Autonomous System BoundaryRouter)是指和其他AS中的路由器交换路由信息的路由器,这种路由器会向整个AS通告AS外部路由信息。

image-20231108220808635

image-20240119174923440

image-20240119174933448

image-20240119175038331


2.10.4OSPF单区域&多区域典型组网

image-20231109165934495

  • 中小型企业网络规模不大,路由设备数量有限,可以考虑将所有设备都放在同一个OSPF区域。同一个OSPF区域中的路由器中的LSDB是完全一致的。OSPF区域号可以手动配置,为了便于将来的网络扩展,推荐将该区域号设置为0,即骨干区域。
  • 大型企业网络规模大,路由设备数量很多,网络层次分明,建议采用OSPF多区域的方式部署。

2.11OSPF配置

2.11.1OSPF配置命令

1.(系统视图)创建并运行OSPF进程

[Huawei] ospf [ process-id | router-id router-id ]

porcess-id用于标识OSPF进程,默认进程号为1。OSPF支持多进程,在同一台设备上可以运行多个不同的OSPF进程,它们之间互不影响,彼此独立。

router-id用于手工指定设备的ID号。如果没有通过命令指定ID号,系统会从当前接口的IP地址中自动选取一个作为设备的ID号。

Router ID的选择顺序是:优先从Loopback地址中选择最大的IP地址作为设备的ID号,如果没有配置Loopback接口,则在接口地址中选取最大的IP地址作为设备的ID号。

2.(OSPF视图)创建并进入OSPF区域

[Huawei-ospf-1] area area-id

area命令用来创建OSPF区域,并进入OSPF区域视图。area-id可以是十进制整数如1,或点分十进制格式如1.1.1.1。采取整数形式时,取值范围是0~4294967295。

3.(OSPF区域视图)指定运行OSPF的接口

[Huawei-ospf-1-area-0.0.0.0] network network-address wildcard-mask 

network命令用来指定运行OSPF协议的接口和接口所属的区域。network-address为接口所在的网段地址。wildcard-mask为IP地址的反码,相当于将IP地址的掩码反转(0变1,1变0),例如0.0.0.255表示掩码长度24 bit。反掩码中,“0”表示此位必须严格匹配,“1”表示该地址可以为任意值。

4.(接口视图)配置OSPF接口开销

[Huawei-GE1/0/1] ospf cost cost

ospf cost命令用来配置接口上运行OSPF协议所需的开销。缺省情况下,OSPF会根据该接口的带宽自动计算其开销值cost取值范围是1~65535。

5.(OSPF视图)设置OSPF带宽参考值

[Huawei-ospf-1] bandwidth-reference value

bandwidth-reference命令用来设置通过公式计算接口开销所依据的带宽参考值。value取值范围是1~2147483648,单位是Mbit/s,缺省值是100Mbit/s。

6.(接口视图)设置接口在选举DR时的优先级

[Huawei-GigabitEthernet0/0/0] ospf dr-priority priority

ospf dr-priority命令用来设置接口在选举DR时的优先级。priority值越大,优先级越高,取值范围是0~255。

7.修改Hello包发送间隔

ospf timer hello 10

8.修改Hello包超时时间

ospf timer dead 40

9.显示OSPF接口信息

display ospf interface g0/0/0

10.重启OSPF进程

reset ospf process

2.11.2OSPF配置案例

案例描述:有三台路由器R1、R2和R3,其中R1和R2分别连接网络1.1.1.1/32和3.3.3.3/32(LoopBack 0模拟),现需要使用OSPF实现这两个网络的互通。具体拓扑如下:

image-20231109173501444

  • 配置过程分为三个步骤:配置设备接口、配置OSPF和验证结果。

2.11.2.1配置接口

image-20231109173704236

备注:

配置R2的接口

[R2] interface GigabitEthernet 0/0/0

[R2-GigabitEthernet0/0/0] ip address 10.1.12.2 30

[R2-GigabitEthernet0/0/0] interface GigabitEthernet 0/0/1

[R2-GigabitEthernet0/0/1] ip address 10.1.12.2 30


2.11.2.2配置OSPF

image-20231109173835464

image-20231109173911459


2.11.2.3结果验证

image-20231109174235162

  • 在路由器R1上查看路由表,并执行从源1.1.1.1 ping 3.3.3.3。

image-20231109174343895


2.12OSPF认证

image-20240122235807406

  • 华为ARG3系列路由器运行OSPF时,支持两种认证方式:区域认证接口认证

image-20231109174839412

  • OSPF支持简单认证及加密认证功能,加密认证对潜在的攻击行为有更强的防范性。OSPF认证可以配置在接口或区域上,配置接口认证方式的优先级高于区域认证方式

  • 接口或区域上都可以运行ospf authentication-mode{simple [[plain]<plain-text>|cipher <cipher-text>]|null}命令来配置简单认证,

    • 参数simple表示使用明文传输密码,

    • 参数plain表示密码以明文形式存放在设备中,

    • 参数cipher表示密码以密文形式存放在设备中,

    • 参数null表示不认证。

  • 命令ospf authentication-mode{md5|hmac-md5}[key-id{plain <plain-text >|[cipher]<cipher-text>}]用于配置加密认证,

    • MD5是一种保证链路认证安全的加密算法(具体配置已在举例中给出),
    • 参数key-id表示接口加密认证中的认证密钥ID,它必须与对端上的key-id一致。

配置验证

image-20231109175108900

  • 在启用认证功能之后,可以在终端上进行调试来查看认证过程。

  • debugging ospf packet命令用来指定调试OSPF报文,然后便可以查看认证过程,以确定认证配置是否成功。

  • 配置接口认证
    • int g0/0/0
      • ospf authentication-mode md5 1 cipher huawei
  • 配置区域认证
    • ospf 1
      • area 0
        • authentication-mode md5 1 cipher huawei
  • 如果同时配置,接口认证优先生效

image-20240123000102666

image-20240123000110109

2.13OSPF缺省路由的发布

  • **缺省路由:**能匹配所有网络,配置方法有以下两种:
    • 静态配置:ip route-static 0.0.0.0 0.0.0.0 下一跳
    • 动态发布:使用动态路由协议进行发布

image-20240122234700284

  • OSPF缺省路由发布命令:default-route-advertise

image-20240122234721473

image-20240122234731292

image-20240122234740073

3.RIP

  • 路由信息协议RIP(Routing Information Protocol)的简称,它是一种基于距离矢量(Distance-Vector)算法的协议,使用跳数作为度量来衡量到达目的网络的距离。RIP主要应用于规模较小的网络中。

image-20231231210124171

  • **RIP:**Routing Information Protocol (路由信息协议)

    • 距离矢量路由协议,属于IGP协议;

    • 适用于中小型网络,有==RIPv1==和==RIPv2==两个版本;

    • 基于UDP,目标端口号520;

    • 周期性更新;

    • 支持水平分割毒性逆转触发更新等防环特性。

3.1RIP工作原理

image-20231231210217665

  • 路由器运行RIP后,会首先发送路由更新请求,

    image-20231231230550192

  • 收到请求的路由器会发送自己的RIP路由进行响应。

    image-20231231230800802

  • 网络稳定后,路由器会周期性(25.5s-30s)发送路由更新信息。

3.2RIP度量

image-20231231210303073

  • RIP使用==跳数==作为度量值来衡量到达目的网络的距离。

    image-20231231231118193

  • 缺省情况下,==直连网络的路由跳数为0==,当路由器发送路由更新时,会把度量值加1。

  • RIP规定==超过15跳==为网络不可达。

3.3RIP版本

  • RIPv1

    • RIPv1是有类别路由协议,不支持VLSM和CIDR。
    • 以==广播==的形式发送报文。
    • 不支持认证。
  • RIPv2

    • RIPv2为无类别路由协议,支持VLSM,支持路由聚合与CIDR。
    • 支持以==广播==或者==组播==(224.0.0.9)方式发送报文。
    • 支持明文认证和MD5密文认证。

3.4RIP报文格式

  • RIPv1报文格式

image-20231231210545636

  • RIPv2报文格式

image-20231231210602317

3.5RIPv2认证

  • 认证方式有明文认证MD5认证两种。

image-20231231210642167

3.6RIP环路

  • 当网络发生故障时,RIP网络有可能产生路由环路。
  • 形成环路后到16跳才会停止发射路由信息。

image-20231231210804932

3.7RIP环路避免

3.7.1水平分割

  • 路由器从某个接口学到的路由,不会从该接口再发回给邻居路由器。

image-20231231210924393

3.7.2触发更新

  • 触发更新是指当路由信息发生变化时,立即向邻居设备发送触发更新报文。

image-20231231211003729

3.7.3毒性反转

  • 毒性反转是指路由器从某个接口学到路由后,将该路由的跳数设置为16,并从原接收接口发回给邻居路由器。
  • 与水平分割功能矛盾,如果都开了则以毒性反转为准。

image-20231231211040017

image-20240115181837121

image-20240115181850904

3.8RIP基本配置

image-20231231211135896

  • rip 1 开启RIP进程,进程缺省为1
  • version 2 开启RIPv2
  • network 10.0.0.0 宣告网络,即指定运行RIP的接口,只需要输入接口的主类网络地址即可。只有处于此网络中的接口,才能进行RIP报文的接收和发送
  • rip metricin 5 在接收路由时==增加==度量值
  • rip metricout 5 在发送路由时==修改==(不是增加)度量值
  • rip split-horizon 开启水平分割
  • rip poison-reverse 开启毒性逆转
  • undo rip input 禁止接收RIP数据包
  • undo rip output 禁止发送RIP数据包
  • silent-interface g0/0/0 配置被动接口,只收不发
  • display rip 验证RIP信息
  • display rip int g0/0/0 verbose 验证RIP接口详细信息

3.8.1Metricin

image-20231231211407732

image-20231231211417984

3.8.2水平分割&毒性逆转

  • 两个特性同时配置后,只有rip poison-reverse会生效。

image-20231231211502993

配置验证

  • 虽然两者都显示“Enabled”,但只有"Poison-reverse"生效。

image-20231231211549444

3.8.3Output

  • 配置RTA的G0/0/0接口禁止发送RIP报文。

image-20231231221101288

3.8.4Input

  • 配置RTD的G0/0/0接口禁止接收RIP报文。

image-20231231221219538

3.8.5抑制接口

  • 配置G0/0/1接口为抑制状态,只接收RIP报文。
  • 此命令的优先级大于rip inputrip output

image-20231231221324040

配置验证

image-20231231221421748