7.路由
路由器-简单实验
路由器是三层设备,使用前需要给接口配置IP
路由器的每个接口都是一个独立的网段!!
给接口配置IP地址:
interface e0/0/0 #进入接口e0/0/0
ip address 192.168.1.1 24 #给接口配置ip地址和子网掩码
interface Ethernet0/0/1
ip address 192.168.2.1 255.255.255.0
显示当前配置
dis this #思科命令 show interface f0/0
dis ip int brief 显示接口摘要
第一个up 物理状态,线缆是否插好
第二个up 协议状态,ip是否配好
dis ip routing-table 显示路由表
路由表:路由器转发数据包的唯一依据,是路由器转发数据包的一张“地图”。
Loopback环回接口
环回接口(loopback):逻辑接口,一般用于模拟网段、PC、服务器、后期用于动态路由选举Router-ID
int loopback 0
ip add 220.1.1.2 24
loopback接口 永远不会down掉
loopback接口地址不用和本机地址在同一网段,可以直接通信
loopback接口处理IP数据报的过程
一般情况下,只有路由器才会具有Loopback接口,而交换机通常没有Loopback接口。
Loopback接口是一种虚拟接口,用于在设备本身上创建一个虚拟的网络接口。它通常用于设备自身的管理、配置和测试等目的。在路由器上,Loopback接口可以用于配置路由器自身的IP地址,以及提供一种稳定的接口用于管理和监控。
而交换机主要用于转发数据帧,通常不需要自身具有IP地址或进行自我管理。因此,大多数交换机没有Loopback接口。它们通常只具有物理接口(如以太网接口)和逻辑接口(如VLAN接口)来处理数据转发和网络连接。
路由
直连与静态路由
直连路由
直连路由(direct route):当路由器的接口配置好ip地址并up之后,会自动检查自身接口上的 IP 地址和子网掩码,自动将与该接口直接相连的网络添加到其路由表中。自动学习直连路由
静态路由
先配设备IP
静态路由:手动将 不能直接到达的ip网段 和 网络出口下一跳 添加都路由表中
ip route 目标网段 子网掩码 下一跳
下一跳(next-hop):下一个传递者,下一个承接者,对端直连的路由器接口的IP地址或者是本地路由器的出口接口
去包路由:PC1--->PC2 (目标网段始终是:172.16.1.0/24)
R1: ip route-static 172.16.1.0 24 12.1.1.2
目标网段 下一跳
R2: ip route-static 172.16.1.0 255.255.255.0 23.1.1.3
回包路由:PC2--->PC1(目标网段始终是:192.168.1.0/24)
R3:ip route-static 192.168.1.0 255.255.255.0 23.1.1.2
R2:ip route-static 192.168.1.0 255.255.255.0 12.1.1.1
静态路由特点:
1、它允许对路由的行为进行精确的控制
2、减少了网络流量
3、是单向的
4、配置简单
查看路由表
如果出接口故障,那么与该接口相关的直连路由全部消失。
如果某路由的下一跳不可达则该路由也会消失。
到达某相同目标网段路由表中始终放置优路由。
缺省路由(网关)
缺省路由(默认路由 default route):缺省路由属于特殊的静态路由,只有当其他的路由不可达时才会使用缺省路由。
注:PC的网关其实就是一种缺省路由。
注:缺省路由适用于边缘节点,以及企业出口。
ip route-s 0.0.0.0 0 12.1.1.2 #访问任何网段都将数据包交给12.1.1.2
路由的选择
路由优先级
路由优先级(preference,思科:管理距离):衡量路由的优先程度,如果到达同一个目标有条路由,且是由两种不同路由协议生成的,此时会优先选择路由优先级较高(数值越小优先级越高)的路由协议。
路由优先级范围:0-255,数值越小,优先级越高
常见路由协议默认的优先级:
直连路由 0
静态路由 60
Rip 100
ospf 10
路由开销
路由度量(度量值,metric,cost,路由开销):到达某目标所花费的开销(代价)的总合,用来衡量路径的优劣。
当到达目标地址有两条优先级相同但路由开销不同的路由时,路由器通常会选择开销较低的路由作为首选路径。
利用路由优先级实现链路之间的冗余备份
目标:想实现千兆Ge0/0/0 做为主链路,百兆E0/0/1 作为备份链路
R1:
ip route-s 210.1.1.0 24 12.1.1.2
ip route-s 210.1.1.0 24 21.1.1.2 preference 50 #配置静态路由并制定优先级为50
R2:
ip route-s 192.168.1.0 24 12.1.1.1
ip route-s 192.168.1.0 24 21.1.1.1 preference 50
动态路由
动态路由:由路由器的路由协议进行目标网络路由的协商、学习和添加。
动态路由特点
1、协议报文实时交互,路由器能感知网络拓扑变化,在网络拓扑结构变化时自动调整,维护正确的路由信息
2、路由算法自动更新路由信息,路由收敛速度快
3、无需人工维护,适用于复杂拓扑结构的网络
动态路由协议
包括各种网络层协议,包括:rip,ospf, isis, bgp
根据算法分类:
- 距离矢量路由协议:使用距离作为度量,通常用于衡量到达目标网络的跳数。这些协议中包括:
RIP(Routing Information Protocol):是一种基于距离矢量的算法,但它使用的是 "跳数" 作为路由度量。
每个路由器在 RIP 网络中会维护一个路由表,其中包含到达其他网络的跳数。RIP 路由器会周期性地广播其路由表给相邻路由器,从而实现网络中的路由信息交换。
BGP(Border Gateway Protocol):虽然 BGP 也属于距离矢量路由协议,但它使用的是 "路径属性" 作为路由选择的依据,而不是简单的跳数。
BGP 是一种复杂的外部路由协议,与 RIP 有很大的不同,其功能和应用场景较于 RIP 复杂,用于互联网路由。
BGP 广泛用于互联网中的自治系统(AS)之间的路由选择。BGP 的路径属性可以包括诸如 AS 路径、AS 路由器策略等信息,使得 BGP 能够更加灵活地进行路由选择。
- 链路状态路由协议:基于每个路由器对整个网络拓扑的视图,通过计算最短路径来进行路由选择。这些协议包括:
OSPF(Open Shortest Path First):使用 SPF(Shortest Path First)算法,通过交换链路状态信息来构建网络拓扑,并使用 SPF 算法来计算从本地路由器到其他目标网络的最短路径来进行路由选择。
每个路由器都有完整的拓扑信息。SPF算法(每个路由器都以自己为根节点计算路由得到拓扑)
OSPF 是一种用于内部路由的链路状态路由协议,广泛用于大型企业网络和互联网服务提供商的网络中。
ISIS(Intermediate System to Intermediate System):类似于 OSPF,也使用也使用 SPF算法,用于大型网络的内部路由。
虽然 OSPF 和 ISIS 都使用 SPF 算法,但它们有一些不同之处,如协议的工作方式、数据结构、邻居关系建立等。
ISIS 最初是为 ISO(国际标准化组织)的 OSI(开放系统互连)网络设计的,但它也可以在 IP 网络中使用。
在实际操作中,OSPF 更常见于 IP 网络,而 ISIS 在某些 ISP 网络和大型企业网络中使用。
根据工作范围分类:
内部网关协议(IGP):如RIP, OSPF, ISIS用于在自治系统内部计算路由信息
外部网关协议(EGP):如BGP 用于在自治系统之间传递路由信息
自治系统(AS)是由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合。
不同的国家、区域属于不同的AS,用16位的AS ID来标识。在一个AS内,可以运行多种路由协议。
RIP协议
RIP(Routing Information Protocol 路由信息协议)的简称,它是一种基于距离矢量(Distance-Vector)算法的协议,使用跳数作为度量来衡量到达目的网络的距离。
RIP主要应用于规模较小的网络中。缺点:古老,收敛速度很慢!
RIP的配置
R1:
rip 1
undo summary 关闭自动汇总
version 2 版本2
network 192.168.1.0 宣告直连主类网络
network 12.0.0.0 宣告直连主类网络
R2:
rip 1
undo summary
version 2
network 12.0.0.0
network 23.0.0.0
network 172.16.0.0
R3:
rip 1
undo summary
version 2
network 23.0.0.0
network 10.0.0.0
查看路由表中的RIP路由信息
RIP路由的优先级:100
rip 只看距离远近,距离是以跳数(经过路由器的个数)来衡量。 注:16跳不可达。
抑制接口(静默接口)
将接口e0/0/0 配置为静默接口,rip的路由更新不再从该接口发送。
rip
silent-interface e0/0/0
RIP报文
每隔30s 发送一次 目标地址是:224.0.0.9组播地址报文里面存放的是路由信息
ISIS协议
Intermediate System to Intermediate System 的简称,IS 指路由器。
isis 属于大型内部网关路由协议,类似ospf,使用SPF算法的链路状态类路由协议,多用于运营商的内部网络,企业网很少使用。
ISIS 封装数据包是基于OSI 模型,ospf、rip以及常见的以太网数据包封装都是基于TCP/IP模型。
ISIS架构
ISIS 也是两层架构(骨干区域、常规区域)
ISIS路由器分类
路由器分类是基于路由器在网络拓扑中的角色和功能来划分的。ISIS 协议中定义了以下三种类型的路由器:
- Level 1 路由器(L1 Router):
Level 1 路由器用于在同一 Level 1 区域内的其他 Level 1 路由器 进行直接通信和路由。它们负责处理本地区域内的路由和转发。
Level 1 路由器可以与其他 Level 1 路由器直接通信,以实现区域内的数据传输和路由计算。
- Level 2 路由器(L2 Router):
Level 2 路由器用于连接不同的 Level 1 区域,实现区域间的通信和路由。它们负责在不同区域之间转发数据和路由信息。
Level 2 路由器之间的通信允许整个网络范围内的数据传输和路由。
- Level 1/2 路由器(L1/L2 Router,也称为 L1/L2 Hybrid Router):
Level 1/2 路由器具有 Level 1 和 Level 2 两种功能,既可以在同一区域内处理 Level 1 路由,又可以连接不同区域的 Level 2 路由器。
这种类型的路由器在大型网络中发挥关键作用,可以在不同层次的网络拓扑中进行灵活的路由计算和通信。
注:默认情况下,骨干区域的路由不会发送到L1路由器(常规区域),且L1路由器会自动形成指向L12路由器的缺省路由。
(这种特性类似ospf中的totally stub)
Level 1 路由器:类似ospf中的常规区域路由器,仅收发L1 isis报文
Level 2 路由器: 类似ospf中骨干区域路由器,仅收发L2 isis报文
Level 12 路由器:类似ospf中的ABR,可以收发L1和L2的isis报文
骨干区域:连续的一片Level 2 路由器的集合,包含L12
注1:默认情况下所有运行isis的路由器都是Level 1 2路由器。
默认情况下,ISIS 中并不是所有路由器都是 Level 1/2 路由器。
实际上,一个 ISIS 路由器可以同时充当 Level 1 和 Level 2 路由器,被称为 Level 1/2 路由器。
这种灵活的分级结构允许 ISIS 在不同层次的网络拓扑中工作,并支持多级别的路由计算和通信。
isis基本配置:
R1:
配置网络实体标识
isis
network-entity 49.0002.0000.0000.1111.00
到接口下宣告直连网段
int gi 0/0/0
isis enable 1 #宣告该直连网段
int loo 0
isis enable 1
网络实体标识 类似ospf中的router-id,标识该中间系统(路由器)的身份信息。
其中49.0002
表示路由器所在的区域。 0000.0000.1111
表示系统ID即router-id .00 固定格式
查看路由表中的ISIS路由信息
修改路由器的level类型
R1:
isis 1
is-level level-1 #将R1修改为纯level 1路由器
修改isis 接口发送level 报文的类型
R2:
int gi 0/0/0
isis circuit-level level-1 #指定R2 的接口只发送level 1 的isis 报文。
向isis区域引入其他自制系统的路由
isis
import-route rip 1 level-1 #接level 1 指的是以level 1 的形式引入
注意:默认情况下,向isis引入的路由是Level 2 的路由。
OSPF协议
OSPF (Open Shortest Path First 开放式 短路径优先)协议是IETF定义的一种基于链路状态的内部网关路由协议。
OSPF原理
Router-ID及其选举规则
Router-ID 用于在OSPF域中唯一地标识一台OSPF路由器,由OSPF选举产生。
从OSPF网络设计的角度,我们要求全OSPF域内,禁止出现两台路由器拥有相同RouterID的情况。
Router-ID 格式与IPv4地址的格式相同,例如192.168.1.1。
选举规则
手动指定最优先,如果没有指定则选举环回口,没有环回口则选举物理接口(接口地址越大越优先)
手动指定>环回口>物理接口(接口地址越大越优先)
华为设备:手动指定优先, 先up的接口优先。
手动指定方式:全局 router id 2.2.2.2
给动态路由协议指定router id
一般情况下,我们会将路由器的Router-ID指定为该设备上的某个Loopback接口地址
注:router id 是在ospf 刚启动的时候选举。重置ospf 进程 可以从新选举
重新设置route id之后,需要重置ospf进程。
OSPF建立邻居关系的条件
两台路由器router id 不能一致
两台路由器中间直连的网段必须宣告到相同的area 区域
认证的类型、密码必须一致
直连必须可以通信
ospf 邻居之间的特殊区域标识必须一致
OSPF的各个阶段
在 OSPF 协议中,两个路由器之间的邻居关系会经历以下几个状态:
down----->init----->two-way----->ex-start---->ex-change---->loading---->full
-
Down:这是初始状态,表示还没有收到来自邻居的 Hello 报文。
-
Init:当路由器收到来自邻居的 Hello 报文,但是这个报文中并没有包含自己的路由器 ID,那么就进入 Init 状态。
Attempt:在非广播多访问(NBMA)网络中,路由器会主动尝试建立邻居关系,进入 Attempt 状态。
- 2-Way:当路由器收到的 Hello 报文中包含了自己的路由器 ID,那么就进入 2-Way 状态。这表示双方都能看到对方,邻居关系建立成功。
- 多访问网络需要选举 DR 和 BDR
- 生成邻居关系表,后续不断更新。
- ExStart:在需要交换路由信息的情况下,邻居关系会进入 ExStart 状态。在这个状态,邻居之间会选举一个主路由器,由主路由器开始发送数据库描述(DBD)报文。
主路由器和DR不是一个概念。
-
Exchange:在这个状态,邻居之间开始交换 DBD 报文,描述各自的链路状态数据库。
-
Loading:在收到邻居的所有 DBD 报文后,如果发现邻居有自己所不知道的路由信息,那么就会请求这些信息,进入 Loading 状态。
-
Full:当所有的路由信息都交换完成,邻居关系进入 Full 状态。这表示两个路由器的链路状态数据库完全同步。
当邻居关系进入 "Full" 状态,这表示两个路由器的链路状态数据库完全同步,也就是说,它们已经交换完成了所有的路由信息。然而,这并不意味着路由计算已经完成。
路由计算是 OSPF 协议中的另一个过程,它是在链路状态数据库完全同步后进行的。在这个过程中,每个 OSPF 路由器会使用 Dijkstra 算法,根据链路状态数据库中的信息,计算出到达每个网络的最短路径。这个过程会生成路由表(Routing Table),路由表中包含了到达每个网络的最优路径。
OSPF的三张表
与距离矢量路由协议直接交互路由器的路由表不同,OSPF作为链路状态路由协议,路由器之间交互的是LSA,路由器将网络中泛洪的LSA搜集到自己的LSDB中,这有助于OSPF理解整张网络拓扑,并在此基础上通过SPF算法计算出以自己为根的、到达网络各个角落的、无环的树,最终,路由器将计算出来的路由装载进路由表中。
OSPF的工作流程涉及三张表:邻居表、拓扑表、路由表
- 建立邻居关系并生成邻居关系数据库
运行链路状态路由协议的路由器之间首先会基于路由协议建立邻居关系,并记录在邻居关系数据库中。
邻居表(Peer table、neighbor table)也叫邻居关系数据库(adjacency database)。
OSPF邻居表里存放的是该路由器发现的、直连链路上的OSPF邻居。只有直连的路由器之间才能够建立OSPF邻居关系。OSPF通过Hello报文发现直连链路上的邻居。
如果一个OSPF路由器和它的邻居路由器失去联系,在几秒中的时间内,它会标记所有到达那条路由均为无效并且重新计算到达目标网络的路径。
- 交互链路状态并生成链路状态数据库
建立邻居关系之后彼此之间开始交互LSA(Link State Advertisement,链路状态通告),OSPF将自己产生的以及邻居通告的LSA(泛洪方式发送)搜集并存储在链路状态数据库(Link-state Database,LSDB)中。
拓扑表(topology table)也叫链路状态数据库(Link-state Database,LSDB)
OSPF用LSA(链路状态通告)来描述网络的拓扑结构、网段信息。路由器用LSDB来存储网络中的LSA。
- 计算并生成路由
基于LSDB中的数据,使用SPF算法计算得到OSPF路由并加载到路由表中。
路由表(Routing table),也叫forwarding database
OSPF报文类型
OSPF一共有五种报文
- Hello报文(Hello Packet)
发送router-id,自报家门,周期性发送,用来发现和维持OSPF邻居关系。10s
链路状态数据库(LSDB)是由多个 LSA (Link State Advertisement) 数据结构组成的,每个 LSA 描述了路由器的一种链路状态信息。
- DBD报文(Database Description packet),有的地方叫DD报文
在 DBD 报文中,包含了这些 LSA 的摘要信息,如 LSA 的类型、LSA 的序列号、LSA 的年龄等。
发送链路状态数据库的描述摘要,描述本地LSDB的摘要信息,用于两台设备进行数据库同步。 - LSR报文(Link State Request packet)链路状态请求报文
接收到 DBD 报文的路由器会检查这些摘要信息,如果发现邻居有自己所不知道的路由信息,那么就会发送链路状态请求(LSR)报文,请求这些信息。
链路状态请求,请求某链路的详细路由信息,用于向对方请求所需的LSA.
设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。 - LSU报文(Link State Update packet)链路状态更新报文
链路状态更新,对请求的回应,用于向对方发送其所需要的LSA. - LSAck报文(Link State Acknowledgment packet)链路状态确认数据包
链路状态确认,用来对收到的LSA进行确认。
报文物理结构:OSPF LSA报文格式总结
Hello 报文的主要作用
-
邻居发现:Hello 报文用于发现和识别 OSPF 网络中的其他路由器。
-
邻居关系维护:通过定期发送 Hello 报文,路由器可以检测到邻居路由器的存在。如果在 Dead 时间内没有收到某个邻居的 Hello 报文,那么就认为这个邻居不再可达,从而更新路由信息。
-
DR/BDR 选举:在多访问网络中(广播或者非广播多访问(NBMA)网络),Hello 报文中包含的优先级和 Router ID 信息用于选举 DR(Designated Router)和 BDR(Backup Designated Router)。
这是因为在这种网络环境中,路由器之间的通信是多对多的,为了减少路由器之间的 LSA(Link State Advertisement)洪泛,需要选举 DR 和 BDR 来负责洪泛 LSA。
然而,在点对点网络中,由于只有两个路由器直接相连,不存在多对多的通信问题,因此不需要选举 DR 和 BDR。在这种情况下,两个路由器会直接交换路由信息,不需要通过 DR 或 BDR。
-
参数一致性检查:Hello 报文中包含了 OSPF 的一些重要参数,如 Hello 和 Dead 时间间隔、区域 ID、Stub Flag 等。接收到 Hello 报文的路由器会检查这些参数是否与自己的一致,只有当这些参数一致时,才能建立邻居关系。
-
链路状态同步:在 OSPF 邻居关系初次建立时,Hello 报文也用于触发链路状态的同步过程。
OSPF网络类型
一旦我们在路由器的某个接口上激活了OSPF,那么路由器将会根据这个接口的数据链路层封装协议,选择对应的OSPF网络类型并进行工作,
注意,针对不同的网络类型,OSPF在接口上的操作将有所不同。因此简单地说,OSPF网络类型实际上是OSPF的一个接口级别的属性,它将影响OSPF在该接口上的操作。
OSPF支持的网络类型:
A.广播型多路访问网络类型--(Broadcast Multiple Access Network)
当链路层协议是Ethernet、FDDI时,缺省情况下,OSPF认为网络类型是Broadcast。在该类型的网络中:
通常以组播形式发送Hello报文、LSU报文和LSAck报文。
其中,224.0.0.5的组播地址为OSPF设备的预留IP组播地址;224.0.0.6的组播地址为OSPF DR/BDR的预留IP组播地址。
以单播形式发送DD报文和LSR报文。
B.非广播型多路访问网路类型--(Non-Broadcast Multiple Access Network,NBMA)
当链路层协议是帧中继、X.25时,缺省情况下,OSPF认为网络类型是NBMA。
在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。
C.点到点网络类型--(Point-To-Point Network,P2P)
当链路层协议是PPP、HDLC和LAPB时,缺省情况下,OSPF认为网络类型是P2P。
在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。
D.点到多点网络类型--(Point-To-MultiplePoint Network,P2MP)
没有一种链路层协议会被缺省的认为是Point-to-Multipoint类型。
点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。
在该类型的网络中:
以组播形式(224.0.0.5)发送Hello报文。
以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)。
常见数据链路层协议对应的默认网络类型:
如果一个接口是以太网接口,那么该接口激活OSPF后,其缺省的OSPF网络类型为Broadcast,也就是广播型。而如果一个接口是Serial接口,二层封装为HDLC或者PPP,那么激活OSPF后,其缺省的OSPF网络类型就是P2P(Point-to-Point,点对点)。接口的OSPF网络类型是可以通过命令修改的。
DR、BDR及其选举规则
MA(Multi-Access,多路访问)网络指的是一个可以同时接入多个节点的网络,在这个环境中,任何一个节点都能通过这个网络访问其他节点。MA网络可以分为BMA(Broadcast Multi-Access,广播型多路访问)网络和NBMA(Non-Broadcast Multiple Access,非广播型多路访问)网络。对于BMA网络,典型的代表是以太网,而对于NBMA,典型的代表是帧中继。
所有的路由器都连接在同一台以太网二层交换机上,并且属于相同的VLAN,而且规划相同的IP网段,在这个环境中,任何一台路由器都能通过接入该交换机的接口访问其他路由器,这就是多路访问网络的体现(MA)。此外这个网络还支持广播。在这个网络中,如果将所有路由器的接口都激活OSPF并且这些接口两两建立OSPF邻居关系,那么这就意味着网络中共有:n(n-1)/2
这么多个OSPF邻居关系,维护如此多的邻居关系不仅会对设备性能造成影响,更增加了网络中LSA的泛洪数量。
为减少MA网络中的OSPF流量、优化OSPF邻居关系结构(不必要的ospf 报文的发送,减少链路带宽的占用),OSPF会在每一个MA网络中选举一个指定路由器 (DR) 和一个备用指定路由器 (BDR)。
在一个MA网络中,所有的DRother路由器(既非DR,又非BDR)均只与DR和BDR建立全毗邻的邻接关系,DRother间不建立邻接关系。如此一来,该MA网络中的设备需要维护的OSPF邻居关系数量大幅减小:M= (n-2)×2+1
,设备性能也会得到优化。
DR(designate router 指定路由器)
DR负责侦听MA网络中的拓扑变更信息并将变更信息通知给其他路由器,同时负责代表该MA网络发送Type-2 LSA。
BDR(backup DR 备份指定路由器)
BDR会监控DR的状态,并在当前DR发生故障时接替其角色。
注意1:DR及BDR的身份状态是基于OSPF接口的,所以如果我们说:“这台路由器是DR”,那么这种说法是不严谨的,严格的说,应该是:“这台路由器的这个接口,在这个MA网络上是DR”。
注意2:OSPF在Broadcast及NBMA网络中都会选举DR,但是在P2P或P2MP网络中则不会。
DR 和 BDR 的选举仅在多播或广播网络(如以太网)上发生。在点对点网络或点到点链路上,没有 DR 和 BDR 的概念,每个路由器都是对等的。
注意3:DR、BDR 具有非抢占性:也就是说如果该MA网络中已经选举出了DR,那么后续即使有具备更高优先级的设备加入,也不会影响当前DR的角色。(除非重启)
在一个MA网络中,接口优先级(默认值为1)+ router id,越大越优先。 注:优先级为0 表示直接不参与DR和BDR 的选举。
- Router ID:每个路由器都有一个唯一的 Router ID,通常是路由器的 IP 地址。在选举中,具有最高 Router ID 的路由器有更高的优先级。这意味着路由器 ID 最大的候选者将成为 DR,次大的将成为 BDR。
- 优先级:路由器可以配置一个优先级值,值越高表示优先级越高。如果有多个候选者具有相同的 Router ID,那么优先级将成为决定因素。具有最高优先级的路由器将成为 DR,次高的将成为 BDR。
- Hello 包交换:在广播或多播网络上,路由器会发送 Hello 包来发现相邻的路由器。首先,所有候选者会向网络发送 Hello 包,然后根据接收到的 Hello 包信息进行选举。如果收到了来自某个候选者的 Hello 包,说明该候选者处于活动状态,可能会成为 DR 或 BDR。
- 时间戳:如果 Router ID 和优先级都相同,路由器还可以使用 Hello 包中的时间戳信息来决定 DR 和 BDR。时间戳越新的候选者有更高的优先级。
LSA的泛洪过程
在MA网络中,有了DR、BDR之后,LSA的泛洪过程
1.假设网络已经完成了OSPF收敛,现在突然R3下挂的一个网络发生了故障;
2.路由器R3用224.0.0.6(即R3以该组播地址为目的IP地址,发送OSPF报文)通知DR及BDR;
3.DR、BDR监听224.0.0.6这一组播地址,获知了该更新;
4.DR向组播地址224.0.0.5发送更新以通知其它路由器;
5.所有的OSPF路由器监听224.0.0.5这一组播地址;
6.路由器收到包含变化后的LSA的更新后,刷新自己的LSDB,过一段时间(SPF延迟),对更新的链路状态数据库执行SPF算法,必要时更新路由表。
OSPF使用两个知名的组播地址:224.0.0.5及224.0.0.6。所有的OSPF路由器(的接口)都会侦听发向224.0.0.5的报文,在此基础之上,DR/BDR会侦听224.0.0.6。
OSPF的区域规划
OSPF(Open Shortest Path First)协议的区域规划是将整个网络划分为不同的区域(Areas),以便在大型网络中提高可扩展性、减少链路状态数据库的大小,并优化路由计算。
每个区域(Area)都使用area-ID进行标识,通常area-ID采用十进制形式标识,例如area 0,area 1等,也可采用点分十进制的形式(与IPv4地址格式相同)来标识,例如area 0.0.0.0(等同于area 0)。
OSPF 区域规划基于一种层次结构,包含以下几个类型的区域:
-
Backbone Area (Area 0):骨干区域是 OSPF 区域结构的核心,所有其他区域都与骨干区域直接或间接相连。在 OSPF 区域规划中,必须至少存在一个骨干区域。骨干区域通过 OSPF 路由器相互连接,形成整个 OSPF 域的主干。
-
Non-Backbone Areas (Other Areas):除了骨干区域外的其他区域称为非骨干区域。这些非骨干区域与骨干区域相连,并通过骨干区域进行通信。非骨干区域可以是单一区域或者细分成更小的区域。
OSPF路由器的角色
骨干路由器(Backbone Router)
区域边界路由器(Area Border Router) ABR
区域内路由器(Internal Router)
AS边界路由器(AS Boundary Router) ASBR
注意:
常规区域必须和骨干区域直接相连
在部署OSPF时,如果存在多区域,则要求OSPF域内必须有且只能有一个area 0。
Area 0为OSPF的骨干区域,骨干区域负责在非骨干区域之间发布由区域边界路由器汇集的路由信息,从而实现区域之间的互通。
为避免区域间的路由环路,非骨干区域之间不允许直接相互发布区域间路由。因此,每个非骨干区域都必须连接到骨干区域。
OSPF 区域规划的优势包括:
-
减少链路状态数据库的大小:每个区域内的 OSPF 路由器只维护本区域的链路状态数据库,而不必维护整个网络的信息。这减少了资源开销和维护成本。
-
提高可扩展性:通过将大型网络分割成多个区域,减少了单一 OSPF 域中路由器数量的增长,从而提高了网络的可扩展性。
-
减少路由计算开销:在一个区域内进行路由计算比在整个 OSPF 域中进行计算要更快捷。
-
控制路由信息传播范围:区域之间的边界会限制链路状态信息的传播,使得路由信息只在需要的范围内传递,提高了网络效率。
在一个区域内,LSA会被泛洪到整个区域,每一台路由器都会收到区域内的LSA并且存储在自己的LSDB中,OSPF规定同属于一个区域的路由器必须有统一的LSDB,因为只有这样才能够让OSPF进行准确的计算。
多区域的设计减小了LSA洪泛的范围,有效地把拓扑变化控制在区域内,达到网络优化的目的;
在区域边界可以做路由汇总,减小了路由表规模;
充分利用OSPF特殊区域的特性,进一步减少LSA泛洪,从而优化路由;
多区域特性提高了网络的可扩展性,有利于组建大规模的OSPF网络。
OSPF的LSA类型
在OSPF(开放最短路径优先)协议中,处于OSPF区域上不同位置的路由器根据其在网络中的位置和功能,生成并分发不同类型的LSA。
生成的LSA被路由器使用不同类型的OSPF报文和组播地址224.0.0.5及224.0.0.6发出去
不同类型的LSA是由处于OSPF区域上不同位置的路由器生成的,不同位置的路由器有不同的功能,会生成对应的LSA
在OSPF(开放最短路径优先)协议中,不同类型的LSA(链路状态广告)是由处于OSPF区域上不同位置的路由器生成的。这些路由器根据其在网络中的位置和功能,生成并分发不同类型的LSA。
OSPF LSA类型及描述如下:
Type1:路由器LSA(Router-LSA):由每个路由器生成,描述了路由器的直接连接的链路状态和开销,仅在同一个OSPF区域内的所有路由器之间进行分发。
dis ospf lsdb
dis ospf lsdb router
Type2:网络LSA(Network-LSA):由DR生成,描述一个多访问网络及其连接的路由器(通告DR的位置和身份,描述本网段的链路状态),仅在自己area区域内传播。
dis ospf lsdb
dis ospf lsdb network
Type3:汇总LSA(Network-summary-LSA,也叫Summary LSA):
由区域边界路由器(ABR)生成,用于描述从一个OSPF区域到另一个区域的路由信息。
这种LSA在ABR将一个区域的信息汇总并传播到另一个区域时使用。 这样,每个区域都可以了解到其他区域的路由信息,从而实现区域间的路由。
由ABR产生,可以穿越整个ospf自治系统(中间需要各个ABR做中转),将不同区域的ospf路由信息互相传递,描述区域内某个网段的路由,并通告给发布或接收此LSA的非Totally STUB或NSSA区域。
dis ospf lsdb
dis ospf lsdb summary
Type4:ASBR汇总LSA(ASBR-summary-LSA)(ASBR Summary LSA):由ABR生成,描述如何到达ASBR(Autonomous System Boundary Router)。
由ABR产生,发送范围整个ospf自治系统,通告ASBR的身份,描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。
dis ospf lsdb asbr
Type5:AS外部LSA(AS-external-LSA)(AS External LSA):由ASBR生成,描述到其他AS(Autonomous System)的路由。
由ASBR产生,发送范围整个ospf自治系统,通告其他自治系统的路由信息,通告到所有的区域(除了STUB区域和NSSA区域)。
dis ospf lsdb
dis ospf lsdb ase
Type6:组播OSPF LSA(Multicast OSPF LSA):用于MOSPF,已经不再常用。
Type7:NSSA外部LSA(NSSA LSA)(Not-So-Stubby Area External LSA):在NSSA(Not-So-Stubby Area)(不完全骨干区)中使用,由ASBR生成,描述从NSSA到其他AS的路由。
由位于nssa区域的ASBR产生,发送范围仅仅是nssa区域(传至abr时会转换成5型继续传递),作用是将nssa区域后的其他自治系统的路由引入ospf自治系统
Type8:链接LSA(Link LSA):用于OSPFv3,描述路由器到本地链路的信息。
Type9,10,11:不透明LSA(Opaque LSA):用于扩展OSPF,可以携带任意信息。
OSPF的特殊区域
OSPF(开放最短路径优先)协议中有几种特殊的区域:
这些特殊区域的主要目的是减少路由器的路由表大小和减少路由更新的开销,从而提高网络的可扩展性和稳定性。
-
骨干区(Backbone Area):区域ID为0的区域,所有的OSPF区域都必须直接或间接地与骨干区相连。骨干区的主要作用是分发跨区域的路由信息。
-
存根区(Stub Area):也叫末节区域,在存根区内,不允许AS外部路由(类型5 LSA)和NSSA区域的类型7 LSA。存根区只能接收到默认路由和内部路由。
R1 R2:(R1 和R2 都要配置)
ospf 1
area 1
stub
作用:拒绝5型LSA,减少路由表的大小,减轻末节路由器的负担。
注:特殊区域的路由器会自动形成缺省路由指向ABR来访问其他自制系统。
- Totally Stub Area:完全末节区域,这是存根区的一种特殊形式,除了默认路由外,不接收任何Summary LSA(类型3 LSA)。
拒绝 3 4 5 型LSA
R1 R2:(R1和R2 都要配置)
ospf 1
area 1
stub no-summary
- NSSA(Not So Stubby Area):这是存根区的另一种特殊形式,允许连接到外部网络,但仍然不接收AS外部路由。NSSA区域可以生成类型7 LSA,然后在ABR处转化为类型5 LSA分发到其他区域。
拒绝5型的LSA ,但是会放行后面的其他自制系统的路由即“小尾巴”。“小尾巴”的路由会通过7型的LSA透传stub 区域。
R1 R2:
ospf 1
area 1
nssa 将区域1配置为nssa区域
- Totally NSSA(Not So Stubby Area)是OSPF(开放最短路径优先)协议中的一种特殊区域类型。它是NSSA(Not So Stubby Area)的一种变体。
在Totally NSSA区域中,除了默认路由外,不接收任何Summary LSA(类型3 LSA)。这意味着Totally NSSA区域不会接收到其他OSPF区域的路由信息,只有默认路由和区域内的路由信息。
与NSSA区域一样,Totally NSSA区域可以生成类型7 LSA,然后在ABR(Area Border Router,区域边界路由器)处转化为类型5 LSA分发到其他区域。这使得Totally NSSA区域可以连接到外部网络,但仍然不接收AS(Autonomous System,自治系统)外部路由。
拒绝3 4 5 型 LSA
R1 R2:
ospf 1
area 1
nssa no-summary
OSPF配置
- 创建一个OSPF进程,并指定OSPF进程号及Router-ID
[Router] ospf [ process-id | router-id router-id ]
其中process-id为OSPF进程号,取值范围是1-65535,用于标识OSPF在本路由器的一个进程,这个进程号只是本地有效。
在一台路由器上可以同时运行多个OSPF进程,这些进程必须使用不同的进程号以作区分。它们之间互不影响,彼此独立。不同OSPF进程之间的路由交互相当于不同路由协议之间的路由交互。
进程号本地有效,因此不同的路由器之间进行OSPF对接时,OSPF进程号可以不同,这是不会有任何问题的,但是为了保证网络配置的规范性和标准化,除非有特殊的需求,否则建议还是采用统一的进程号。
另外Router-ID关键字指定的是本台路由器在该OSPF进程中使用的Router-ID,建议在创建OSPF进程时采用该方法手工配置Router-ID。如果在创建OSPF进程时,没有手工指定Router-ID,则路由器会自动为该进程指定一个Router-ID。
2.进入OSPF区域视图,将特定的接口激活OSPF
[Router-ospf] area area-id
[Router-ospf-area] network ip-address wildcard-mask
在激活某个接口的OSPF功能时,必须先进入特定的OSPF区域配置视图。
network命令用于在特定接口上激活OSPF:在network关键字后,紧跟着的是IP地址,然后是通配符掩码(Wildcard-mask:反掩码),这两者是息息相关的,它们在一起的运算决定了本设备哪些接口会激活OSPF。
通配符掩码是一个用于决定IP地址中哪些比特位该严格匹配(为0的比特位代表需严格匹配)、哪些比特位无需匹配(为1的比特位)的32bit数值。通配符掩码也常用于处理访问控制列表(ACL)。
路由器的接口IP地址,将这些IP地址拿去和通配符去做对应,如果能匹配上,那么接口就激活OSPF,否则就不激活。
[Router] ospf 1 router-id 1.1.1.1
[Router-ospf-1] area 0
[Router-ospf-1-area-0.0.0.0] network 172.16.1.0 0.0.0.255
假设我们想只激活172.16.3.1/24这个接口,而且要求尽可能精确,那么network命令完全可以这么写:network 172.16.3.1 0.0.0.0
。
OSPF配置示例
R1:
ospf 1
area 0
network 192.168.1.0 0.0.0.255
network 12.1.1.0 0.0.0.255
OSPF常用命令
查看OSPF协议相关运行参数
display ospf brief
查看路由表中的OSPF路由信息
display ip routing-table protocol ospf
OSPF路由优先级--Pre
ospf 的路由优先级:preference :10 (默认)
ospf 修改优先级
ospf 1
preference 20 #将优先级修改为20
int gi 0/0/0
ospf dr-priority 5 #将接口ospf 优先级由1改为5
OSPF开销--Cost
OSPF使用开销(Cost)作为路由度量值。
每一个激活OSPF的接口都有一个接口的Cost值。一条OSPF路由的Cost由该路由从路由的起源一路到达本地的所有入接口Cost值的总和。
OSPF接口Cost=100M / 接口带宽,其中100M为OSPF的参考带宽。换句话说,接口的带宽越高,该接口的OSPF Cost越小。
由于默认的参考带宽是100M,这意味着更高带宽的传输介质(高于100M)在OSPF协议中将会计算出一个小于1的分数,这在OSPF协议中是不允许的(会被四舍五入为1)。而现今网络设备满地都是大于100M带宽的接口,这时候路由COST的计算其实就不精确了。所以可以使用命令修改,但是这条命令要谨慎使用,一旦要配置,则建议全网OSPF路由器都配置。
重置ospf进程
< > reset ospf process
ospf的认证
防止有人私接路由器,设置加密密码,常在广域网环境下设置
注:认证是基于接口的
int gi 0/0/0
ospf authentication-mode simple cipher 123
ospf静默接口
ospf 1
silent-interface gi 0/0/1 #将gi0/0/1口设置为静默接口
静默接口不会发送任何的ospf 报文,建议将接PC的口设置为静默接口。
ospf 排错
dis ospf err #查看OSPF统计信息
<>reset ospf counters #清空ospf error 统计
ospf 虚链路
为了解决常规区域没有和骨干区域直接相连的问题,建立一个链路
搭建虚链路
R1:
ospf 1
area 1 (一定在area 1 )
vlink-peer 2.2.2.2 (2.2.2.2 必须是对方路由器的router id)
R2:
ospf 1
area 1
vlink-peer 1.1.1.1
查看虚链路的邻居关系
注:虚链路是区域0 的延伸,它默认属于区域0 。
OSPF-路由引入与汇总
ospf 的路由引入(import)
思科称为路由重分布(重分发)
R5:
rip 1
undo summary
version 2
network 8.0.0.0
network 57.0.0.0
R7:
rip 1
undo summary
version 2
network 7.0.0.0
network 57.0.0.0
完成路由双向引入
注:不同的路由协议之间默认不能直接传递路由,若想传递还需import 引入。
R5:
ospf 1
import-route rip 将rip 引入ospf
引入的路由:o_ASE :ospf -autosystem external ,ospf自治系统外部路由,路由优先级默认是150
R7:
rip 1
import-route ospf 将ospf 引入rip
向ospf 区域引入缺省路由
R3:
ip route-s 0.0.0.0 0 38.1.1.8
ospf 1
default-route-advertise always
将缺省路由引入ospf
注:always 无论R3是否有缺省路由存在,R3总会向ospf区域下发缺省路由。
ospf 路由汇总
作用:精简路由表的大小,减少路由器计算资源的开销
1.1.1.0/24
1.1.2.0/24
1.1.3.0/24
1.1.000000 01.0
1.1.000000 10.0
1.1.000000 11.0
汇总成1.1.0.0/22
1.1.0.0 255.255.252.0
区域间的汇总(必须在ABR上汇总)
R2:ABR
ospf 1
area 1(明细路由所在区域)
abr-summary 1.1.0.0 22
自治系统间的汇总(必须在ASBR上汇总)
R5:ASBR
ospf 1
asbr-summary 7.7.0.0 255.255.240.0
7.7.7.0
7.7.8.0
7.7.9.0
7.7.0000 0111.0
7.7.0000 1000.0
7.7.0000 1001.0
汇总成7.7.0.0/20
7.7.0.0 255.255.240.0
ospf 的路由过滤
ospf 1
filter-policy 2000 import (使用acl 2000 对路由进行过滤)
acl number 2000
rule 5 deny source 1.1.2.1 0
rule 10 deny source 1.1.3.1 0
rule 15 permit
拒绝1.1.2.1/32 和1.1.3.1/32 两条路由,放过剩下的路由。
对ospf 引入(import)的路由进行过滤
ospf 1
import-route rip 1 route-policy qq 引入rip路由同时调用路由策略qq
route-policy qq permit node 10 配置路由策略qq 执行序号为10
if-match acl 2001 匹配acl 2001
acl 2001
rule permit source 7.7.8.0 0.0.0.255
rule permit source 7.7.9.0 0.0.0.255