一、引入
①路由设备根据路由表转发数据包,路由表项可通过手动配置和动态路由协议生成;
②静态路由比动态路由使用的带宽更少,且不占用CPU资源去计算和分析路由更新。如果网络结构比较简单,只需要配置静态路由即可,但是当网络发生故障或者拓扑发生变化后,静态路由不会自动更新,必须手动重新配置;
③相比静态路由,动态路由协议具有更强可拓展性,可自主学习路由信息;
二、动态路由
动态路由协议的分类
距离矢量路由协议
①“传闻式”更新机制---运行距离矢量路由协议的路由设备周期性的泛洪自己的路由表。通过路由的交互,每台路由设备都从相邻的路由器学习路由,并加载进自己路由表中并再通知到其它相邻路由设备;
②网络中所有路由器是不清楚网络拓扑的,只简单的知道要去往某个目的方向在哪里,距离有多远。这是距离矢量算法的本质;
③传闻式的路由更新机制天生容易产生环路。为防止环路形成,采用是一些机制分别是:
水平分割-从一个接口学来的路由,不会再从这个接口发回去;
毒性逆转-把从一个接口学来的路由,再通过这个接口发回去,并将其距离设置为无限大(16),即明确表示去往那个目的不要从我这走;
抑制计时器-当一条路由不可达时,在一段时间内,路由器会抑制接受关于这条路由的更新,以防止旧的和错误的路由信息扰乱网络;
触发更新-一旦检测到网络变化,立即发送更新(不必等待定期更新定时器到期)。
链路状态路由协议-
LSA泛洪
与距离矢量路由协议不同,链路状态路由协议通告的是链路状态而不是路由表。运行链路状态路由协议的路由器之间首先会建立一个协议的邻居关系,然后彼此之间开始交互LSA(Link State Advertisement,链路状态通告)
LSDB组建
每台路由器都会产生LSA,路由器将接收到的LSA放入自己的LSDB(Link State DataBase,链路状态数据库)。路由器通过LSDB,掌握了全网的拓扑;
SPF计算
每台路由器基于LSDB,使用SPF(Shortest Path First,最短路径优先)算法进行计算。每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的“树”。有了这棵“树”,路由器就已经知道了到达网络各个角落的优选路径;
路由表生成
最后,路由器将计算出来的优选路径,加载进自己的路由表(Routing Table)
总结:
链路状态路由协议有四个步骤:
第一步是建立相邻路由器之间的邻居关系。
第二步是邻居之间交互链路状态信息和同步LSDB。
第三步是进行优选路径计算。
第四步是根据最短路径树生成路由表项加载到路由表
三、OSPF简介
OSPF是IETF定义的一种基于链路状态的内部网关路由协议。目前针对IPV4协议使用的是OSPF Version 2(RFC2328);针对IPV6协议使用的是OSPF Version 3 (RFC2740).
OSPF有以下优点:
基于SPF算法,以“累计链路开销”作为选路参考值;
采用组播方式收发部分协议报文;
支持区域划分;
支持对等价路由进行负载分担;
支持报文认证。
1.OSPF在园区网络中的应用
2.OSPF基础术语
区域:
OSPF Area用于标识一个OSPF的区域,区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。按点分十进制的形式(与IPv4地址的格式一样)呈现例如Area0.0.0.1;
Router-ID:
Router-ID(Router Identifier,路由器标识符),用于在一个OSPF域中唯一地标识一台路由器。Router-ID的设定可以通过手工配置的方式,或loop back接口中最大的IP地址,若均无,则使用物理接口中最大的那个IP地址;
度量值:
OSPF使用Cost(开销)作为路由发度量值。每一个激活了OSPF的接口都会维护一个接口Cost值,缺省时接口Cost值=100Mbit/s/接口带宽。其中100Mbit/s为OSPF指定的缺省参考值,该值时可配置的;
笼统的说,一条OSPF路由的Cost值可以理解是从目的网段到本路由器沿途所有入接口的Cost值累加;
因为有不允许小数,在参考值的情况下,千兆和百兆接口带宽接口的Cost值均为1,所有允许网工进行缺省参考值的配置,以决定最佳路由路径。
3.OSPF协议报文类型
4.OSPF三大表项
OSPF有三张重要的表项,OSPF邻居表、LSDB表和OSPF路由表
邻居表:
1)OSPF在传递链路状态信息之前,需先建立OSPF邻居关系。
2)OSPF的邻居关系通过交互Hello报文建立。
3)OSPF邻居表显示了OSPF路由器之间的邻居状态,使用display ospf peer查看
4)OSPF邻居表有很多关键信息,例如可以查看对端设备的Router ID和接口地址
LSDB表:
1)LSDB会保存自己产生的及从邻居收到的LSA信息,下示图例中R1的LSDB包含了三条LSA。
2)Type标识LSA的类型,AdvRouter标识发送LSA的路由器。
3)使用命令行display ospf lsdb查看LSDB表。
Router LSA:描述路由器自身链路状态,包括路由器的互联地址及邻居信息;
Network LSA:描述广播网络中DR的链路状态,包括网段地址及DR的互联地址;
Summary LSA:描述区域间路由,包括目标网段及下一跳地址;
ASBR Summary LSA:描述ASBR的位置,包括ASBR的互联地址;
External LSA:描述外部路由,包括目标网段及外部路由的类型(E1或E2);
NSSA External LSA:描述NSSA区域中的外部路由,包括目标网段及外部路由的类型。
OSPF路由表:
1)OSPF路由表和路由器路由表是两张不同的表。下示图例中OSPF路由表有三条路由;
2)OSPF路由表包含Destination、Cost和NextHop等来指导转发的信息;
3)使用命令display ospf routing查看OSPF路由表。
四、OSPF工作原理&过程
1.简介OSPF路由器之间的关系:
关于OSPF路由器之间的关系有两个重要的概念,邻居关系和邻接关系。
考虑一种简单的拓扑,两台路由器直连。在双方互联接口上激活OSPF,路由器开始发送及侦听Hello报文。在通过Hello报文发现彼此后,这两台路由器便形成了邻居关系。
邻居关系的建立只是一个开始,后续会进行一系列的报文交互,例如前文提到的DD、LSR、LSU和LS ACK等。当两台路由器LSDB同步完成,并开始独立计算路由时,这两台路由器形成了邻接关系。
2.初识OSPF邻接关系建立过程
OSPF完成邻接关系的建立有四个步骤,建立邻居关系、协商主/从、交互LSDB信息,同步LSDB
3.OSPF邻接关系建立流程
第1步
第2、3步
第4步
Initial(单向通信已建立):我认识你,但不确定你认不认识我;
2-Way(双向通信已确认):我们互相认识
ExStart(协商交换规则):“定规矩”(谁主导,编号多少)。
Exchange(同步数据库目录):“对目录”(快速交换摘要清单)。
Loading(获取缺失的具体内容):“补内容”(请求缺失的完整信息)。
Full(完成同步):“全同步”。
4.报文讲解
hello报文(身份名片+征友启示)
邻居发现:喊话,使其它OSPF路由器发现自己;
邻居关系维护:完成hello报文中参数协商,建立邻居关系;
参数协商:通过周期性发送和接收,检测邻居运行状态,确保双方参数一致;
选举DR/BDR:在广播和NBMA网络中,通过hello报文完成选举。
重要字段解释
Network Mask(网络掩码):发送hello报文的接口的网络掩码;
Hello Interval(hello间隔):发送hello报文的时间间隔。通常为10S;
Router Dead Interval(路由失效间隔):失效时间。如在此时间内未收到邻居发来的hello报文,则认为邻居失效。通常为40S;
Neighbor(邻居列表):邻居。以Router ID标识。
其它字段解释
Opitions(选项):
E(外部路由位):是否支持外部路由
MC:是否支持转发组播数据包
N/P(NSSA位):是否为NSS区域
Router Priority(路由优先级):DR优先级。默认为1.如设置为0,则路由器不能参加0DR或BDR选举;
Designated Router(指定路由器):DR的接口地址;
Backup Designated Router(备份指定路由器):BDR的接口地址。
DD报文:
包含LSA头部信息,目的不是传输完整的链路状态信息,而是高效的比较两个路由器的LSDB是否同步。
字段解释:
Interface MTU(接口最大传输单元):检测双向MTU是否匹配,一面后续交换LSA报文过大而被分片或丢弃;
Options(选项字段):表示路由器的能力。如:是否支持外部路由等;
Flags:
图表是8位标志字段,通常为2进制或16进制;
关键三位:
I-bit(Init/初始位):1表示这是第一个DD报文,用于启动交换,0表示后续报文;
M-bit(More/更多位):1表示后面还有更多DD报文。0表示这是最后一个报文;
MS-bit(Master/Slave/主从位)1表示发送方认为自己是Master(主),0表示自己是Slave(从)
前五位通常是保留位,设置为0。
这三个为上半部分控制信息,用于管理数据库同步的过程(谁主导、是否开始、是否结束)
DD Sequence number(DD序列号):
整个数据库同步对话的唯一序列号,由Master路由器在ExStart状态下设定;
这是一个递增的序列号,用于确保DD报文交换的可靠性和有序性;
工作方式:
Master发送序列号为N的SS报文;
Slave必须使用相同序列号N来回复自己的DD报文作为确认,同时可能携带自己的LSA头部;
Master然后发送序列号为N+1的报文,依次类推(+1由主路由设备实现,从路由设备序列号与主路由设备相同);
LSA Header(LSA头部列表):
是DD报文的核心有效载荷,也是其存在的根本目的;
它包含一个或多个LSA的头部信息,但不是完整的LSA;
一个LSA头部就像是数据库里一条记录的“索引卡片”,通常包括:LS age(老化时间)、Options(选项)、LS type(类型)-如TYPE-1(路由器LSA)和TYPE-2(网络LSA)等、Link State ID(链路状态ID)、Advertising Router(通告路由器)、LS sequence number(LSA序列号)-判断新旧的关键、LS checksum(校验和)、Length(长度);
通过交换这些“索引卡片”,双方路由设备就能快速比较出谁的数据库更新,谁缺少哪些LSA。
这两个是下半部分数据信息,用于承载数据库的摘要内容(用序列号保证可靠传输,用LSA头部描述数据库)。
5.DR和BDR的作用
引入
DR/BDR是OSPF在广播网络(以太网)或NBMA网络(帧中继)中选举产生的“代表”路由器,负责管理该网段上所有路由器的LSA交换,以避免形成全互联的邻接关系,极大减少协议的开销;
为什么需要?
如果没有DR/BDR,每两台路由器之间都需要建立完全邻接(Full Adjacecy)关系。假如一个多路访问的网络中一个以太网交换机下连着10台OSPF路由器,就需要形成n*(n-1)/2个邻接关系。每个邻接关系都需要交换各种报文,产生巨大的网络流量和CPU开销;
当拓扑发生变化时,每台路由器都会向所有邻居泛洪LSA更新,造成广播风暴;
DR/BDR的引入,将全网状的邻接关系简化成星型的邻接关系,所有路由器只与DR和BDR建立完全邻接关系,DROther(其它路由器)之间只保持在2-Way状态;
核心角色与职责
DR(指定路由器) - “主席”
核心职责:收集和分发LSA。
具体工作:
监听所有信息:与网段内所有其他路由器建立完全邻接(Full状态)。
统一接收:当任何一台DROther路由器需要发送LSA更新时,它首先将LSU发送给DR(目标地址 224.0.0.6 - AllDRouters)。
统一分发:DR收到LSU后,负责将其洪泛给网段内的所有其他路由器(目标地址 224.0.0.5 - AllSPFRouters)。
生成网络LSA:在广播网络中,DR负责产生并洪泛 Type-2 LSA(网络LSA),来描述这个多路访问网络本身和连接到它的所有路由器。
BDR(备份指定路由器) - “副主席”
核心职责:实时备份DR,实现无缝接管。
具体工作:
与DR一样,也与网段内所有其他路由器建立完全邻接。
被动监听:监听所有发往DR(224.0.0.6)的通信,保持与DR完全同步的LSDB。
无缝接管:当DR发生故障时,BDR会自动立即升级为DR,由于它已经有了完整的LSDB并与所有邻居建立了Full关系,因此网络收敛时间极短,几乎没有中断。
防止在DR失效后出现“多DR竞选”的混乱局面。
DROther(非DR/BDR路由器) - “委员”
角色:既不是DR也不是BDR的普通路由器。
行为:
只与DR和BDR建立完全邻接(Full状态)。
与其他DROther路由器只保持2-Way状态(邻居关系,但不是邻接关系,不交换LSA)。
发送LSU更新时,目标地址是 224.0.0.6(发给DR和BDR)。
监听来自DR(224.0.0.5)的LSA洪泛。
DR/BDR选举机制
选举发生在2-Way状态之后,ExStart状态之前。一旦选举完成,在DR/BDR存续期间,选举结果非常稳定(非抢占式)。
选举规则(按优先级顺序)
比较优先级(Priority):
优先级是0-255的数字,默认值为1,在接口上配置;
优先级为0的路由器永远没有资格参与选举,它永远是DROther;
优先级高的路由器胜出。
比较Router ID:
如果优先级相同(通常是默认情况),则Router ID最大的路由器胜出;
Router ID是OSPF中的唯一标识,通常手动配置或取自最高环回口IP;
选举过程
在Hello报文中,每个路由器都会列出自己认为的DR和BDR(初始为空或0.0.0.0);
经过几轮Hello报文交换后(通常是Dead Interval时间),网络进入稳定状态;
最终状态:
DR:优先级最高(且>0)的路由器;
BDR:优先级第二高(且>0)的路由器;
其余路由器成为DROther。
⚠️ 重要特性:非抢占性
选举只在以下情况发生:
网络初始化(所有路由器同时启动);
当前DR故障。
一旦DR选举产生,即使新加入一台优先级更高的路由器,它也不会抢占现有的DR,只能成为DROther或BDR(如果BDR位置空着)。这保证了网络的稳定性。
同理,BDR的选举也是非抢占的。