说明:
- 此文是OSPF的详细总结,因笔者能力有限,故从网络、书籍等各个方面收集整理,耗费巨大精力,终成此篇。
- 非常感谢文中引用的材料的作者,如若侵权,请联系我,立马整改
- 希望广大读者能够从中吸取营养,如若发现个别问题或者补充,可留言。
1 ospf产生原因
OSPF(openshortestpathfirst,开放式最短 路径优先)是一种典型的链路状态路由协议,由IETF(internetengineeringtaskforce,国际互联网工程任务组)开发的,是目前业内使用最为广泛的IGP(interiorgatewayprotocol,内部网关协议)之一。使用该协议的原因主要有以下两个:
1.1 其他路由协议存在缺陷
- 静态路由缺陷
- 无法适应规模较大的网络:随着设备数量增加,配置量急剧增加。
- 无法动态响应网络变化:网络发生变化,无法自动收敛网络,需要工程师手动修改。
- 其他路由存在的缺陷
- 收敛速度慢(每隔30s更新一次)
- 最大值16跳(16跳为最大值)
- metric度量方式不科学
- 宣告方式无法精确
1.2 ospf协议的基本特点
- 支持无类域间路由(CIDR)-支持超网聚合
- 无路由自环-无环协议
- 收敛速度快(这是作为动态路由所特有的特点,每当链路/设备出现故障时,该部署了OSPF的区域会动态的扫描并感知到链路状态异常,从而进行拓扑的链路的更新)
- 使用IP组播收发协议数据-基于ip协议
- 支持多条等值路由**(支持等价负载均衡)**
- 支持协议报文的认证,通过协议认证提高网络通信的安全性,OSPF区域下所有设备接口之间的相互认可的一种口令/密钥方式。就像直播房间平台下,你输入对应的密码/房间号才可以进去一样。
- 采用组播地址224.0.0.5和224.0.0.6
2240.0.5:所有的成员均可以监听该地址 2240.0.6:只有DR和BDR才监听该地址 (DR和BDR都使用组播地址224.0.0.6 来接收链路状态更新报文) - 适用于园区级或者企业级路由承载
- 扩展性好(可以划分为多个OSPF区域,就像树干可以长出多个枝杈一样)
- 无路由环路问题
- 路由变化收敛速度快,触发更新报文
| RIP(内部网关协议) | 路由承载能力一般 | 已经淘汰 | | OSPF(内部网关协议) | 路由承载能力大 | 适用于园区级或者企业级 | | BGP(外部网关协议) | 路由承载能力巨大 | 适用于运营商级 |
2 ospf 的基础知识
2.1 ospf协议的概念
- OSPF(开放最短路径优先)是内部网关协议(IGP)的一种,基于链路状态算法(LS)
- OSPF企业级路由协议(RFC2328 OSPFv2),核心重点协议
- OSPF共三个版本,OSPFV1主要是实验室版本,OSPFV2是iPv4的版本,OSPFV3是ipv6的版本
- OSPF直接运行于IP协议之上,使用IP协议号89
所谓Link State(链路状态)指的就是路由器的接口状态。在OSPF路由器的某一接口的链路状态包含如下信息:
- 该接口的IP地址及掩码
- 该接口的带宽
- 该接口所连接的邻居
●OSPF作为链路状态路由协议,不直接传递各路由器的路由表,而传递链路状态信息,各路由器基于链路状态信息独立计算路由。 ●所有路由器各自维护一个链路状态数据库。邻居路由器间先同步链路状态数据库,再各自基于SPF算法计算最优路由,从而提高收敛速度。 ●在度量方式上,OSPF将链路带宽作为选路时的参考依据。"累计带宽"是一种要比"累计跳数"更科学的计算方式
2.2 OSPF路由计算过程
- 路由器之间发现并建立邻居关系
- 每台路由器产生并向邻居泛洪链路状态信息,同时收集来自其他路由器链路状态信息,完成LSDB的同步
- 每台路由器基于LSDB通过SPF算法,计算得出一颗以自己为根的SPT,再以SPT为基础计算出去往各目的网络的最优路由,并形成路由表
2.3 路由器的分类
**内部路由器(internal router ) ** | **IR ** | **所有接口都接入同一个area 的路由器 ** | **负责区域内的路由信息的传递(所有接口都不与area 0 相连) ** |
---|
**区域边界路由器(Area broder router) ** | **ABR ** | **接入多个area 的路由器且必须有area 0 ** | **负责区域间的路由信息的传递(至少有一个与Area 0 相连) ** | **骨干路由器(backbone router) ** | **BR ** | **接入area 0 的路由器 ** | 所有接口都属于Area 0的路由器 | **AS边界路由器(AS boundary router ) ** | **ASBR ** | **将ospf域外的路由引入域内,执行了路由重分发的路由器 ** | 和Area 0 没有关系 | 做了路由引入的路由器 | | | |
2.4 区域area
- OSPF的每一个区域都有一个编号,不同的编号表示不同的区域,这个区域编号也被称为区域ID(Area-ID)。
- 区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。
- OSPF的区域ID是一个32bit的非负整数,为了简便起见,我们也会采用点分十进制的形式来表示,这里是几个例子:Area0.0.0.1等同于Area0.0.0.255等同于Area255 , Area0.0.1.0等同于Area256。许多网络厂商的设备同时支持这两种区域ID配置及表示方式。
- Area 0:骨干区域,相当于城市的中心区,ospf中要求所有的非骨干区域必须与Area 0连接,为了避免区域间的路由形成环路,要求只有骨干区域(Area 0)才能发布区域间的路由信息,非骨干区域不能发。
但是在实际项目中,有时间需要没有与Area 0相连的区域,也需要学习到彼此的路由信息,就采用一种技术Virtual link.
2.5 router ID
- router-id(router idenfication,路由器标识)是一个32bit长度的数值,用点分十进制表示(和ipv4 地址的格式一样,例如192.168.1.1)。
- 它的作用是在ospf域中唯一地标识一台ospf路由器。
- ospf要求路由器的router-id必须全域唯一,在同一个域中不允许出现两台ospf路由器拥有相同的router-ID的情况。
- router-ID 可以使用手工配置的方式进行设定。如果在创建ospf的时候没有指定router-id,则系统会自动分配一个缺省的router-id。
- 建议配置ospf的router-id指定为该设备的loopback接口(本地环回接口)的ip地址。
- Router ID不可以使用设备上不存在的IP地址,例如0.0.0.255
- OSPF协议实际生效的Router-ID可能与手工配置的Router-ID不一致,但是不会影响OSPF协议的正常运行。
手工指定ospf router-ID配置如下:
为设备创建一个loopback接口,并配置接口的ip地址
[Router]interface loopback 0
ip address 1.1.1.1 32
quit
[router]ospf 1 router-id 1.1.1.1
[R1]ospf1 router-id 11.1.1.1 局部设置 router id
[Ri]router id 11.1.1.1 全局设置 router id
同时设置了局部和全局router-id,局部优于全局
注意:一旦ospf确定了router-id之后,再变更的话就需要将ospf进程重启才能使新的router-ID生效, 重启命令reset ospf process但是在实际的项目中,这一条命令要慎用,因为这一条命令执行后,该ospf进程的所有邻接关系将会被重置,这会引发路由的动荡。 router-ID选举原则:(必须要有Router-id,且区域唯一) 1.手工指定(推荐为环回口的地址-稳定性高) 2.较大的环回口作为RID 3.较大的物理接口作为RID
2.6 开销值/度量值(cost)
每种路由协议对路由度量值的规定是不同的,OSPF使用Cost(开销)作为路由度量值,所谓开销,亦可理解为成本或者代价,Cost值越小,则路径(路由)越优。 首先,每一个激活OSPF的接口都拥有一个接口级别的Cost值,这个值等于OSPF带宽参考值/ 接口带宽(参考带宽缺省值为100Mbit/s)。 OSPF开销=Bandwidth-reference/带宽。Bandwidth-reference默认100Mbit/s 如果计算结果包含小数,直接取整数;如果计算结果小于1,取1 注意:以华为AR路由器为例,OSPF带宽参考值缺省为100Mbis,这个值是可以人为修改的,但是修改参考值将直接 影响Cost值的计算,从而影响网络中OSPF路由的优选,因此需格外谨慎 一条OSPF路径的Cost等于从目的地到本地路由器沿途的所有入接口Cost的总和。 引入外部路由时开销的计算:
3 ospf的三大表项
3.1 邻居表
**邻居表(peer table 或者 neihbor table ) ** | **第一张 ** |
---|
**链路状态数据库(link-state database) ** | **第二张 ** | **ospf 路由表(router table) ** | **第三张 ** |
邻居表(peer table 或者 neihbor table )
- 在ospf交互链路状态通告之前,两台直连路由需要建立ospf邻居关系。
- 在一个接口激活ospf后,就会周期性的发送ospf hello报文,同时也开始侦听 hello报文,从而发现直连链路上的邻居。
- 当ospf发现邻居之后,邻居的信息就会被写入路由器的ospf邻居表中,随后邻接关系也就建立了
- OSPF邻居表显示了OSPF路由器之间的邻居状态,使用display ospf peer查看
3.2 LSDB表
链路状态数据库(link-state database)
- 运行ospf协议(链路状态路由协议)的路由器会泛洪链路状态信息(LSA link-state advertisement,链路状态通告)。
- 路由器将所收集到的LSA装载到LSDB,这些LSA都有各自的用途,最终的目的是让路由器知晓网络的拓扑结构和网段信息,然后计算出最短路径树。
- 使用命令行display ospf lsdb查看LSDB表。
3.3 OSPF路由表
ospf 路由表(router table)
- ospf根据LSDB中的数据,利用SPF算法并且得到一颗以自己为根的、无环的最短路径树,基于这颗树,ospf能够发现到达各个网段最短的路径,然后将这些信息加入ospf路由表中。
- 注意:这些ospf路由表中的路由是否会被加载到全局路由表中,还要经过进一步比较路由优先级等过程。
- 使用命令display ospf routing查看OSPF路由表。
4 DR和BDR
4.1 选举DR和BDR的原因
交互太多的LSA,管理复杂,资源浪费,在MA网络中才选,MA网络包括muti-access 、BMA、NBMA(详细见下页)
4.2 DR和BDR基本概念
为减小多路访问网络(MA网络)中OSPF流量,OSPF会选择一个指定路由器(DR)和一个备份指定路由器(BDR)。当多路访问网络发生变化时,DR负责更新其他所有OSPF路由器(DR负责确保接入该网络中的所有OSPF路由器拥有相同的LSDB,也就是确保这些LSDB的同步)。 BDR会监控DR 的状态,并在当前DR发生故障时接替其角色。DR和BDR是由同一网段中所有的路由器根据路由器优先级、Router ID通过HELLO报文选举出来的,只有优先级大于0的路由器才具有选取资格。进行DR/BDR选举时每台路由器将自己选出的DR写入Hello报文中,发给网段上的每台运行OSPF协议的路由器。当处于同一网段的两台路由器同时宣布自己是DR时,路由器优先级高者胜出。如果优先级相等,则Router ID大者胜出。 注意:
- 只有多路访问(BMA和NBMA)才牵扯他们之间的选举。
- 选举的过程发生在2-way 状态之后。
- 通过hello报文中的“DR优先级”字段之中,华为产品DR优先级缺省为1,这个值可以通过ospf dr-priority 命令修改,取值范围为0~255。
- DR及BDR是一个接口级别的概念,所以“某台路由器是DR”说法其实是不够严谨的,严格地说应该是:“某台路由器的某个接口在这个MA网络(多路访问)中是DR”。
非常重要的过程:DR使用组播目的IP地址224.0.0.5 向该网络中发送LSU报文,所有的OSPF路由器都会侦听这个目的 IP地址,并与DR同步自己的LSDB。DRother感知到拓扑变化时,向224.0.0.6 发送LSU报文通告这个变化,DR及BDR会侦听这个组播地址。
4.3 DR和BDR选举
在多路访问中,建立邻居后要选择是否建立邻接关系的时候优先级(**取值范围是 0 ~ 255 ,默认值为 1)大于0的所有路由器都将自己选出的DR(一般就是自己,因为这个时候还不知道邻居的DR优先级)**写入Hello报文中,发给网段上每台运行OSPF协议的路由器。 只有MA网络才选 ,而且他们的选举是基于接口的,可以没有BDR,但是必须有DR,只在同一网段选一个DR,一个BDR
- DR/BDR的选举是非抢占式的。
- DR/BDR的选举是基于接口的。
接口的DR优先级越大越优先。(优先级默认为1) 接口的DR优先级相等时,Router ID越大越优先 [R3-Ethernet0/0/0]ospf dr-priority 0 代表放弃选举DR/BDR
注意:
- 如果加入新的路由器,而且优先级还挺高,这个时候也不会抢占,因为选举是非抢占的。
- DR负责确保接入该网络中的所有OSPF路由器拥有相同的LSDB,也就是确保这些LSDB的同步
- BDR负责健康DR的状态,发生故障之后就接替它(立马接替吗?)
dis ospf interface 查看DR/BDR的选举 进入接口下:ospf dr-priority 修改DR的优先级 如果更改优先级后,没有重新选举,记得重启和接口相连的路由器的进程(reset ospf 1 process)
4.4 不同网络类型下DR和BDR的选举
**网络类型 ** | **常见链路层协议 ** | **会不会选择DR和BDR ** | **基本含义 ** | 支持 | 具体表现 |
---|
**1.点对点类型( Point-to- Point,P2P) ** | PPP链路;HDLC链路 | 不会选举DR及BDR | 点到点网络指的是在一段链路上只能连接两台路由器的环境。 | 单、组、广播 | lookback接口所在的网段默认为P2P | **2.广播型多路访问类型( Broadcast Multi- Access,BMA) ** | 以太网链路 | 会进行DR和BDR的选举 | 该类型网络允许多台路由器 接入,任意两台路由器之间都能直接进行二层通信,一台路由器发送出去的广播数据会被所有其他的路由器收到。以太网( Ethernet)是典型的广播型多路访问网络。 | 单、组、广播 | 以太网所在的接口 | G口和E口 | | | | | | **3.非广播型多路访问类型(Non- Broadcast Multi- Access,NBMA) ** | 帧中继链路 | 会进行DR及BDR的选举。 | NBMA网络也允许多台路由器接入,但是该网络不具备广播能力,正因为如此,基于组播发送的Hello报文在NBMA网络中可能就会遇到问题。在这种场景中,为了让OSPF路由器之间能够顺利地发现彼此并且正确地建立邻接关系,还需要手工指邻居。 | 单播 | NBMA网络的一个最为大家熟知的代表是帧中继( Frame- Relay),另一个例子是X25。 | **4.点对多点类型( Point-to- Multipoint,P2MP) ** | 需手工指定 | 无需选举DR、BDR | P2MP有点类似于将多条P2P链路的端进行捆绑得到的网络.OSPF在P2MP类型的接口上通常以组播的方式发送Hello报文,以单播的方式发送其他报文。 | 单、组、广播 | 现实中不存在P2MP,只能通过手工指定 |
4.5 DR/BDR/DRother关系
DR/BDR与DRother是邻接 停留在full DRother与DRother之间是邻居关系 停留在2-way
5 状态机与邻居(接)关系
5.1 状态机
Down: 这是邻居的初始状态,表示没有从邻居收到hello包 **Init: **表明收到对方的hello,但是hello包没有自己的RID(自己的Router ID不在所收到的Hello报文的邻居列表中),类似1-way **2-way: **表明收到对方的hello包,且有自己的RID(路由器发现自己的Router ID存在于收到的Hello报文的邻居列表中),建立邻居关系,选DR/BDR(MA网络) **Exstart: **选主从(RID大的为master, 小的为slave, 主先发,从后发),交互DD报文 (空) Exchange: 继续交互DD(含摘要) **Loading:**交互LSR,交互LSU,同步LSDB **full:**完全邻接,交互完了Isdb,计算路由,加载到IP路由表
5.2 邻居关系(2-way)
OSPF路由器使用Hello报文来建立邻居关系。OSPF路由器会检查所收到的Hello报文中的各种参数,如Router-ID、area ID、认证信息、网络掩码、hello时间间隔等。只有当这些参数和接受接口上的对应参数一一对应时,才会建立邻居关系。 注意:
- 在以太网链路上,通常以组播形式发送Hello报文
- 224.0.0.5的组播地址为OSPF设备的预留IP组播地址
- 224.0.0.6的组播地址为OSPF DR/BDR的预留IP组播地址
- 对于不支持组播的链路,OSPF支持采用单播的方式发送Hello报文
建立邻居的参数协商
- 邻居(直连)之间可以ping通且ip地址不能相同
- 邻居之间的接口需要在同一个区域
- RID全局唯一
- Hello时间和Dead时间相同
hello时间修改,死亡时间会自动按四倍的关系来匹配,修改dead时间,hello时间不会自动匹配 只有hello时间和dead时间都一样才会建立邻居关系
非广播、P2MP网络中 | hello默认30s dead 120s |
---|
广播、P2P网络中 | hello默认10s dead 40s |
-
特殊区域的标志位一定要相同(如都配置Stub) | N位/E位 | 代表的功能区域 | | — | — | | N=0,E=0 | 代表stub区域(末节区域) | | N=0,E=1 | 代表普通区域 | | N=1,E=0 | 代表NSSA区域 (Not so 末节区域) | | N=1 | 代表支持7类LSA | | E=1 | 代表支持5类LSA | -
同一个以太网中掩码一致 -
同一个以太网中DR的优先级不能全0(即必须有DR,可以没有BDR)全为0的话,将会停留在2-way状态,建立不了邻接关系 -
三层**MTU(最大传输单元)**值要相同(默认不验证MTU值)MTU值=0,就是没有开启,开启后,值为1500,开启MTU的命令:在接口视图下:mtu 1000(改动MTU为1000) and ospf mtu-enable (启动MTU检测功能),启动MTU检测,需要相互开启 -
邻居之间的认证类型一致(null、明文、MD5) -
邻居之间认证密码相同
5.3 邻接关系(full)
邻居关系建立完成以后,下一步才是建立邻接关系,并不是所有的邻居关系都可以建立邻接关系。
- 在P2P网络中,所有邻居关系都会进一步形成邻接关系
- 在广播型中,会进行DR和BDR的选举,只有DR和BDR会和其他路由器建立邻接关系
| **邻居关系 ** | 两台路由器通过网线直连,在双方互联的接口上激活OSPF,路由器的接口,激活OSPF后开始发送及侦听 Hello报文,在通过Hello报文发现彼此并确认双向通讯后,这两者便形成了邻居关系。 | | — | — | | **邻接关系 ** | 一系列的报文交互和邻居状态的切换会在接下来的过程中继续发生,两台路由器会开始交互空的DD报文协商 Master/ Slave,再交互包含LSA头部的,DD报文以便描述自己的LSDB,然后通过LSR及LSU报文交互双方的LSA。 当两者的LSDB同步完成后,两台路由器形成了对网络拓扑的一致认知,并开始独立计算路由。此时,我们称这两台路由器形成了邻接关系。 |
6 OSPF 5种报文
?OSPF有五种类型的协议报文。这些报文在OSPF路由器之间交互中起不同的作用。
路由器的接口一旦激活OSPF,就会开始发送 Hello报文:
- Hello报文的一个重要功能就是发现直连链路上的OSPF邻居。当其发现邻居后,邻接关系的建立过程就开始了
- 在这个过程中,DD报文用于发送LSA的头部摘要。通过DD报文的交互,路由器知道了对方所拥有的LSA
- 而LSR用于向对方请求完整的LSA。
- LSU则用于对LSR进行回应,或者主动更新LSA,在LSU中就承载着完整的LSA数据。
- LSAck用于保证OSPF更新机制的可靠性。
此外 Hello报文还负责OSPF邻居关系的维护,两台直连路由器形成邻接关系后,双方依然周期性地发送Hello报文,以便告知对方自己的存活情况。
6.1 hello报文及作用
- 邻居发现:(OSPF路由器之间在交换链路状态信息之前,首先需要彼此建立邻居关系)
①自动发现:通过周期发送目的IP地址为224.0.0.5 ②手工指定(NBMA)
- 邻居建立(协商):完成Hello报文中的参数协商,建立邻居关系。
- 邻居保持(维护):通过周期性发送和接收,检测邻居运行状态。
Open Shortest Path First
OSPF Header
Version: 2
Message Type: Hello Packet (1)
Packet Length: 52
Source OSPF Router: 2.2.2.2
Area ID: 0.0.0.1
Checksum: 0xf881 [correct]
Auth Type: Null (0)
Auth Data (none): 0000000000000000
OSPF Hello Packet
Network Mask: 255.255.255.0 //发送Hello报文的接口的网络掩码
Hello Interval [sec]: 10 //发送Hello报文的时间间隔,通常为10s
Options: 0x02, (E) External Routing //Options:E:是否支持外部路由MC:是否支持转发组播数据包 N/P:是否为NSSA区域
Router Priority: 1 //DR优先级。默认为1。如果设置为0,则路由器不能参与DR或BDR的选举
Router Dead Interval [sec]: 40 //失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效,通常为40s
Designated Router: 123.1.1.3 //DR的接口地址
Backup Designated Router: 123.1.1.2 //BDR的接口地址
Active Neighbor: 1.1.1.1
Active Neighbor: 3.3.3.3
6.2 DD(Database Description)报文:
数据库描述报文,携带LSA的摘要(就像快递单号,仅仅是对快递具体内容的简单描述标识而已) 注意:DD报文携带的LSA摘要有什么字段? 答:link state type、link state id、advertiser(简称ADV)。
OSPF DB Description
Interface MTU: 0
Options: 0x02, (E) External Routing
0... .... = DN: Not set
.0.. .... = O: Not set
..0. .... = (DC) Demand Circuits: Not supported
...0 .... = (L) LLS Data block: Not Present
.... 0... = (N) NSSA: Not supported
.... .0.. = (MC) Multicast: Not capable
.... ..1. = (E) External Routing: Capable
.... ...0 = (MT) Multi-Topology Routing: No
DB Description: 0x07, (I) Init, (M) More, (MS) Master
.... 0... = (R) OOBResync: Not set
.... .1.. = (I) Init: Set
.... ..1. = (M) More: Set
.... ...1 = (MS) Master: Yes
DD Sequence: 9102
● I:当发送连续多个DD报文时,如果这是第一个DD报文,则置为1,否则置为0。
● M (More):当发送连续多个DD报文时,如果这是最后一个DD报文,则置为0。否则置为1,表示后面还有其他的DD报文。
● MS (Master/Slave):当两台OSPF路由器交换DD报文时,首先需要确定双方的主从关系,Router ID大的一方会成为Master。当值为1时表示发送方为Master。
● DD sequence number:DD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性。
6.3 LSR(link state request)报文:
请求本设备缺少的LSA信息(很容易理解,请求的东西一般是自己没有的),通过携带本设备所缺少的LSA的摘要信息来实现请求;
Open Shortest Path First
OSPF Header
Link State Request
LS Type: Router-LSA (1)
Link State ID: 2.2.2.2
Advertising Router: 2.2.2.2
Link State Request
LS Type: Router-LSA (1)
Link State ID: 3.3.3.3
Advertising Router: 3.3.3.3
Link State Request
LS Type: Router-LSA (1)
Link State ID: 1.1.1.1
Advertising Router: 1.1.1.1
Link State Request
LS Type: Network-LSA (2)
Link State ID: 123.1.1.3
Advertising Router: 3.3.3.3
Link State Request
LS Type: Summary-LSA (IP network) (3)
Link State ID: 14.1.1.0
Advertising Router: 1.1.1.1
Link State Request
LS Type: Summary-LSA (IP network) (3)
Link State ID: 45.1.1.0
Advertising Router: 1.1.1.1
Link State Request
LS Type: Summary-LSA (IP network) (3)
Link State ID: 9.9.9.9
Advertising Router: 1.1.1.1
Link State Request
LS Type: Summary-LSA (IP network) (3)
Link State ID: 59.1.1.0
Advertising Router: 1.1.1.1
Link State Request
LS Type: Summary-LSA (ASBR) (4)
Link State ID: 5.5.5.5
Advertising Router: 1.1.1.1
6.4 LSU(link state update)报文:
携带LSA信息的报文。(类似于报刊会按照你订阅所需要看、但又还没有收到的报纸的单号进行递送) ①收到了LSR请求报文后,LSU会进行回复; ②默认情况下,LSU报文会周期为1800s动态更新,dead time为3600s; ③当网络发生变化时,也会发送出LSU更新链路状态(触发更新);
Open Shortest Path First
OSPF Header
LS Update Packet
Number of LSAs: 9
LSA-type 1 (Router-LSA), len 36
LSA-type 1 (Router-LSA), len 48
LSA-type 1 (Router-LSA), len 36
LSA-type 2 (Network-LSA), len 32
LSA-type 3 (Summary-LSA (IP network)), len 28
.000 0010 0101 1101 = LS Age (seconds): 605
0... .... .... .... = Do Not Age Flag: 0
Options: 0x02, (E) External Routing
0... .... = DN: Not set
.0.. .... = O: Not set
..0. .... = (DC) Demand Circuits: Not supported
...0 .... = (L) LLS Data block: Not Present
.... 0... = (N) NSSA: Not supported
.... .0.. = (MC) Multicast: Not capable
.... ..1. = (E) External Routing: Capable
.... ...0 = (MT) Multi-Topology Routing: No
LS Type: Summary-LSA (IP network) (3)
Link State ID: 14.1.1.0
Advertising Router: 1.1.1.1
Sequence Number: 0x80000005
Checksum: 0x81c2
Length: 28
Netmask: 255.255.255.0
TOS: 0
Metric: 1
LSA-type 3 (Summary-LSA (IP network)), len 28
LSA-type 3 (Summary-LSA (IP network)), len 28
LSA-type 3 (Summary-LSA (IP network)), len 28
LSA-type 4 (Summary-LSA (ASBR)), len 28
6.5 LSACK(link state ACK)报文:
用来确认收到了LSU的报文,携带了LSA的详细信息(而不仅是LSA摘要了);(快递员给你送完东西,这时候快递员会验收确认,我们这边也要验货看看有无缺损、符不符合当初买的标准和实际的需求),多条LSU可以由一条LSACK确认,如果确认有误,还可以请求重新发送。 PS:LS Ack报文携带的仅是LSA的摘要并不会携带完整的LSA,跟DD报文类似。
Open Shortest Path First
OSPF Header
LSA-type 2 (Network-LSA), len 32
.000 0000 0000 1000 = LS Age (seconds): 8
0... .... .... .... = Do Not Age Flag: 0
Options: 0x02, (E) External Routing
0... .... = DN: Not set
.0.. .... = O: Not set
..0. .... = (DC) Demand Circuits: Not supported
...0 .... = (L) LLS Data block: Not Present
.... 0... = (N) NSSA: Not supported
.... .0.. = (MC) Multicast: Not capable
.... ..1. = (E) External Routing: Capable
.... ...0 = (MT) Multi-Topology Routing: No
LS Type: Network-LSA (2)
Link State ID: 123.1.1.3
Advertising Router: 3.3.3.3
Sequence Number: 0x8000000f
Checksum: 0x5b50
Length: 32
LSA-type 1 (Router-LSA), len 48
LSA-type 1 (Router-LSA), len 36
7 LSA(LSDB)
LSA(link state advertisement,链路状态通告)来承载链路状态信息,如果没有LSA,就无法描述网络的拓扑结构及网段信息,也就无法传递路由信息,无法正常工作了。 所有的LSA共同构成链路状态数据库。注意以下很重要的一个过程:
- 2类LSA只在area内互相传递,ABR在收到该类型的报文后,不会将其泛洪到area外部。LSA Type3类型的报文由ABR产生
- 考虑到一个OSPF的AS域可能需要和其他AS域相连接,并学习其他AS域的路由信息。因此,OSPF通过Type 3 和Type 4类型的报文来完成该任务。在这里,我们把运行OSPF协议的并与其他AS域相连接的路由器叫做ASBR。
- 该路由器在学习到外部网络信息后,会向OSPF域内传递Type 5 类型的LSA报文。该报文描述了外部网络的网络信息,与Type 3 类型的报文比较相像。(3类LSA是告诉我们域外的路由有哪些,5类LSA向域内通告如何到达域外的路由 )因此,其他路由器如果想要发送目的IP地址为AS外部的数据包,就可以发送给该ASBR了。
- 但是,对于其他区域的路由器而言,可能并不知道ASBR究竟是谁,因此,ABR还必须产生其他一种Type 4类型的LSA报文,该报文描述了ASBR的信息,主要用于与该ASBR不处于同一区域的路由器发送AS外的数据包使用。
如何判断LSA新旧
- 拥有更高的链路状态序列号,路由器每次在刷新LSA的时候,会将改LSA的链路状态序列号加1, 一般链路状态序列号越大,则LSA越新。
- 如果LSA实例的链路状态序列号相同,拥有更大的校验和的LSA被认为更新了
- 如果前两者都相同,被设置了Maxage (最大老化时间,缺省为3600s)的LSA被认为最新。如果LSA的LS age 达到了max-age,则该LSA会被删除,不能再被用于OSPF路由的计算。
- 如果前3者都相同,则比较他们的老化时间
如果一条LSA具有最大的老化时间(3600S),那么就选择该LSA实例
- 如果LSA老化时间差大于15分钟,则老化时间小的优先
- 如果LSA老化时间之差在15分钟以内,则认为这两个LSA一样
8 OSPF基本区域
| 传输区域 | 承载本区域发起的流量和访问本区域的流量 承载了源IP和目的IP都不属于本区域的流量(穿越型流量,如Area 0) |
| 末端区域 | 只承载本区域发起的流量和访问本区域的流量,如Area 1和Area 2 末端区域中可选择部署性能相对较低的路由器 |
9 OSPF特殊区域
OSPF路由器计算区域内、区域间、外部路由都需要依靠网络中的LSA,当网络规模变大时,设备的LSDB规模也变大,设备的路由计算变得更加吃力,造成设备性能浪费。简单地说,就是网络扩大、lsa变多、lsdb变大、设备负担过于繁重,所以需要进行优化,在不影响业务的时候,减少LSA的数量。
区域 | 名称 | 阻止 | 放行 | 结果 | 效果 |
---|
stub | 末梢区域 | 45 | 123 | 45转换成3类的默认路由 | 不允许外部路由在域内传播 | Totally stub | 完全末梢区域 | 345 | 12 | 345转换成3类的默认路由 | 不允许域间和外部路由在域内传播 | NSSA | | | | | | 45 | 1237 | 45转换成为7类的LSA | 能引入外部路由,但是不学习OSPF其他区域引来的外部路由 | | | Totally NSSA | | | | | | 345 | 127 | 345转换成7类的LSA | | | | | | | | | |
NSSA区域与Stub区域的区别是NSSA区域中可以引入外部路由器。
10 OSPF其他特性
特殊区域不仅有效减少了区域内LSA的数量以及路由计算的压力,而且一定程度上也缩小了网络故障的影响范围。但特殊区域的局限性在于其作用范围只在本区域内,对于其它区域,如何才能减少LSA、降低路由计算的压力呢?
10.1 路由汇总
域内汇总 在大规模部署OSPF网络时,可能会出现由于OSPF路由表规模过大而降低路由查找速度的现象,为了解决这个问题,可以配置路由汇总,减小路由表的规模。 路由汇总是指将多条连续的IP前缀汇总成一条路由前缀。如果被汇总的IP地址范围内的某条链路频繁UP和Down,该变化并不会通告给被汇总的IP地址范围外的设备。因此,可以避免网络中的路由震荡,在一定程度上提高了网络的稳定性。 路由汇总只能汇总路由信息,所以ABR是可以执行路由汇总的位置之一: ABR向其他区域发送路由信息时,以网段为单位生成三类LSA。如果该区域中存在一些连续的网段,则可以通过命令将这些连续的网段汇总成一个网段。这样ABR只发送一条汇总后的三类LSA,所有属于命令指定的汇总网段范围的LSA将不会再被单独发送出去。
域外汇总 配置ASBR汇总后,ASBR将对引入的外部路由进行汇总。NSSA区域的ASBR也可以对引入NSSA区域的外部路由进行汇总。 如果设备既是NSSA区域的ASBR又是ABR,则可在将七类LSA转换成五类LSA时对相应前缀进行汇总。 ●路由汇总降低了网络故障的影响范围。 ●网络发生故障后,路由协议的收敛速度也是衡量路由协议的重要参考依据之一。
10.2 OSPF更新机制
为了保证路由计算的准确性,需要保证LSA的可靠性。 ●OSPF为每个LSA条目维持一个老化计时器(3600s),当计时器超时,此LSA将从LSDB中删除。 ●为了防止LSA条目达到最大生存时间而被删除,OSPF通过定期更新(每1800S刷新一次)机制来刷新LSA。 ●OSPF路由器每1800S会重新生成LSA,并通告给其他路由器。 ●为了加快收敛速度,OSPF设置了触发更新机制。 ●当链路状态发生变化后,路由器立即发送更新消息,其他路由器收到更新消息后立即进行路由计算,快速完成收敛。
10.3 OSPF收敛特性
快速收敛 增量最短路径优先算法I-SPF 只对受影响的节点进行路由计算 只第一次计算全部节点 部分路由计算PRC 只对发生变化的路由进行重新计算 根据I-SPF 算出来的SPT 来更新路由 智能定时器 对接口翻动等原因带来的网络不稳定,进行智能控制,减少LSA洪泛 其他作用略 按优先级收敛 能够让某些特定的路由优先收敛的一种技术 增量最短路径优先算法I-SPF ●I-SPF改进了这个算法,除了第一次计算时需要计算全部节点外,每次只计算受到影响的节点,而最后生成的最短路径树SPT与原来的算法所计算的结果相同,大大降低了CPU的占用率,提高了网络收敛速度。
部分路由计算PRC ●PRC的原理与I-SPF相同,都是只对发生变化的路由进行重新计算。不同的是,PRC不需要计算节点路径,而是根据I-SPF算出来的SPT来更新路由。在路由计算中,叶子代表路由,节点则代表路由器。SPT变化和叶子变化都会引起路由信息的变化,但两者不存在依赖关系,PRC根据SPT或叶子的不同情况进行相应的处理: ○SPT变化,PRC处理变化节点上的所有叶子的路由信息。 ○SPT没有变化,PRC不会处理节点的路由信息。 ○叶子变化,PRC处理变化的叶子的路由信息。 ○叶子没有变化,PRC不会处理叶子的路由信息。
智能定时器 ●智能定时器,OSPF智能定时器分别对路由计算、LSA的产生、LSA的接收进行控制,加速网络收敛。OSPF智能定时器可以通过以下两种方式来加速网络收敛: ○在频繁进行路由计算的网络中,OSPF智能定时器根据用户的配置和指数衰减技术动态调整两次路由计算的时间间隔,减少路由计算的次数,从而减少CPU的消耗,待网络拓扑稳定后再进行路由计算。 ○在不稳定网络中,当路由器由于拓扑的频繁变化需要产生或接收LSA时,OSPF智能定时器可以动态调整时间间隔,在时间间隔之内不产生LSA或对接受到的LSA不进行处理,从而减少整个网络无效LSA的产生和传播。
●智能定时器对路径计算的作用 ○根据本地维护的链路状态数据库LSDB,运行OSPF协议的路由器通过SPF算法计算出以自己为根的最短路径树,并根据这一最短路径树决定到目的网络的下一跳。通过调节SPF的计算间隔,可以抑制网络频繁变化可能导致的占用过多带宽资源和路由器资源。 ○在特定组网环境下(例如对路由收敛时间要求较高的环境),可以指定以毫秒为单位的时间间隔,用来增加路由计算的频度,从而加快路由的收敛。 ○当OSPF的链路状态数据库(LSDB)发生改变时,需要重新计算最短路径。如果网络频繁变化,由于不断的计算最短路径,会占用大量系统资源,影响路由器的效率。通过配置智能定时器,设置合理的SPF计算的间隔时间,可以避免占用过多的路由器内存和带宽资源。
●使能智能定时器后 ○初次计算SPF的间隔时间由start-interval参数指定。 ○第n(n≥2)次计算SPF的间隔时间为hold-interval×2(n-1)。 ○当hold-interval×2(n-1)达到指定的最长间隔时间max-interval时,OSPF连续三次计算SPF的时间间隔都是最长间隔时间,之后,再次返回步骤1,按照初始间隔时间start-interval计算SPF。
可以通过IP前缀列表等将特定路由过滤出来,通过对不同的路由配置不同的收敛优先级,达到重要的路由先收敛的目的,提高网络的可靠性。
10.4 Silent-Interface
?通过Silent-Interface的配置,增强OSPF的组网适应能力,减少系统资源的消耗。 ?Silent-Interface有以下特性: ?Silent-Interface不会接收和发送OSPF报文。 ?Silent-Interface的直连路由仍可以发布出去。 [R1-ospf-1]silent-interface GigabitEthernet 0/0/1
10.5 v-link
为了解决不规则区域,虚连接相当于在两个ABR之间形成了一个点到点的连接,配置虚连接的时候需要注意: 1、虚连接每次只能穿越1个区域 2、虚连接不能穿越area0 区域 3、 虚连接必须在两端同时配置方可生效 4、虚连接不能穿越特殊区域 可以配置接口的各参数,如发送Hello报文间隔等。配置虚链接的时候需要注意如下两点: 虚链接的存在增加了网络的复杂程度,而且使故障的排除更加困难。因此在网络规划中应该尽量避免使用虚链接。
10.6 OSPF报文认证
OSPF支持认证功能,建立邻居的两端都要开启相同类型的认证,且认证密码要一致,才可以正常建立邻接关系
- md5表示使用MD5密文验证模式。
- simple表示使用简单验证模式。
- plain表示明文口令类型。对于简单验证模式,当此参数缺省时,默认为plain类型。
- cipher表示密文口令类型。对于MD5或者HMAC-MD5验证模式,当此参数缺省时,默认为cipher类型。
- hmac-md5表示使用hmac-md5密文验证模式。
- hmac-sha256表示使用hmac-sha256密文验证模式
区域认证
[R3]ospf 1
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]authentication-mode simple plain huawei
接口认证
[R3]interface Ethernet0/0/1
[R3-Ethernet0/0/1]ospf authentication-mode md5 24 cipher huawei
10.7 FA地址
FA 是Forwarding Address的简写。FA是ASBR通告的TYPE 5 LSA中的字段,它的作用是告诉OSPF域内的路由器如何能够更快捷地到达LSA 5所通告路由的下一跳地址。以免OSPF内部路由器在广播网络上以ASBR为下一跳,再由ASBR自己转发到正确的下一跳,而产生额外的路由。简单来说,FA字段的作用类似于BGP协议中的"第三方下一跳"概念,主要在广播共享网络中起作用。
- 若产生的五类LSA的FA地址为0.0.0.0,则其他路由器在计算到达该外部网络时,将考虑如何到达ASBR来计算出外部路由的下一跳地址在OSPF引入外部路由
- 若产生的五类LSA的FA地址不为0.0.0.0,则其他路由器在计算到达该外部网络时,将考虑如何到达该FA地址来计算出外部路由的下一跳地址
**FA字段可以为全0或者非0两种选择,有以下几个规则: **
- 当与引入路由的下一跳关联(互连)的接口没有启动OSPF时,FA设置为0;
- 当下列所有条件均满足的情况下,TYPE 5 LSA中FA字段设置为非0:
- 在ASBR上,与引入外部路由下一跳关联的接口启动了OSPF,即位于Network命令范围内。
- 在ASBR上,与引入外部路由下一跳关联的接口不能配置被动接口(静默端口); #前两个规则是确保LSA能够被通告。
- 在ASBR上,与引入外部路由下一跳关联的接口配置的OSPF网络类型不能是P2P或P2MP; #确保网络类型Broadcast或NBMA的共享网络。
10.8 域间路由防环机制
- OSPF要求所有的非骨干区域必须与Area0直接相连,区域间路由需经由Area0中转。区域间的路由传递不能发生在两个非骨干区域之间,这使得OSPF的区域架构在逻辑上形成了一个类似星型的拓扑。
- ABR不会将描述到达某个区域内网段路由的3类LSA再注入回该区域。
- ABR从非骨干区域收到的3类LSA不能用于区域间路由的计算
10.9 子网掩码、反掩码和通配符
掩码 | 标识了1网络位和主机位0 | 1为严格匹配,0为任意匹配,连续的0或1 |
---|
通配符(反掩码) | 标识了网络位和主机位 | 0为严格匹配,1为任意匹配,可以不连续的0或1 |
11 ospf常用命令
Display ospf peer 显示邻居
Display ospf peer brief 显示邻居缩略信息
Display ospf lsdb 显示链路状态数据库
Display ip routing-table 显示路由表
Display ospf interface E0/0/0 显示接口参数
Display ospf abr-asbr 显示ABR和ASBR
Display ospf brief 显示ospf的缩略信息
Display ospf error 显示ospf出现错误列表
Display ospf peer 显示邻居
Display ospf routing 显示ospf的路由
[R2-GigabitEthernet0/0/0]ospf cost 3000 更改接口ospf的开销
[R2-ospf-1]silent-interface Ethernet 0/0/1 配置OSPF被动接口,不在收发OSPF报文,邻居自然就down了
bandwidth-reference value (OSPF视图)设置OSPF带宽参考值
ospf dr-priority priority (接口视图)设置接口在选举DR时的优先级
network 192.168.1.0 0.0.0.0 路由的宣告
[R1-Ethernet0/0/0]ospf enable 1 area 0或者在接口下宣告
ospf timer hello 接口视图下,修改hello时间
12 OSPF与ISIS比较
12.1 拓扑所体现的不同点
- 在OSPF中,一条链路只属于一个区域;而在IS-IS中,一条链路可以跨接不同的区域;
- 在IS-IS中,骨干网(Backbone)指的不是一个特定的区域;而在OSPF中,Area0被定义为骨干区域。
- 在IS-IS中, Level-1和Level-2级别的路由器分别采用SPF算法,分别生成最短路径树SPT,在OSPF中,只有在同一区域内才使用SPF算法,区域之间的路由需要通过骨域来转发
12.2 基本特点
相同点 均为IGP协议,且应用广泛 均支持IP环境 均采用分层设计和分区域设计 均使用SPF算法计算路由 无环路,收敛快,支持大规模网络部署 不同点 OSPF仅支持IP;IS-IS既支持IP,又支持CLNP OSPF支持的网络类型丰富;IS-IS仅支持两种网络类型 OSPF支持虚连接;IS-IS虽然有类似功能,但是多数厂商不支持 OSPF工作在IP之上,协议号为89;IS-IS工作在数据链路层之上 OSPF基于接口划分区域;IS-IS基于设备划分区域 OSPF开销类型较为简单;IS-IS开销类型相对较复杂 (缺省开销、时延开销、代价开销、差错开销、但是实现上都采用缺省开销) OSPF支持按需拨号网络;IS-IS无此特性 OSPF支持区域和接口认证;IS-IS支持接口、区域和路由域认证
12.3 邻接关系特点
相同点 均通过Hello建立和维护邻居关系 多点访问网络均选举DR/DIS 不同点 OSPF建立邻居关系条件相对苛刻;IS-IS的要求则相对宽松 OSPF邻居关系不分层次;IS-IS邻居关系分两个层次(层1和层2) OSPF处理DR/BDR和IS-IS处理DIS方式不同 相关解释如下: ●OSPF建立邻居需要检查Hello报文中的掩码、认证、Hello/Dead时间间隔、区域等信息。而ISIS形成邻居关系条件区域、网络类型一致就好。 ●OSPF依据优先级和Router-ID选举DR/BDR,且选举结束后,不可抢占。在OSPF中,所有DRother与DR/BDR形成完全邻接关系,DRother间形成2-way即不完全邻接关系。OSPF中,如果优先级为0,则表示该路由器不参与DR/BDR选举。 ●ISIS选举DIS依据优先级和MAC地址,可以抢占。在ISIS中,所有路由器均形成邻接关系,ISIS中,如果优先级为0,则表示该路由器也会参与DIS选举,只是优先级比较低。
12.4 数据库同步特点
相同点 均需形成统一的LSDB 不同点 OSPF LSA种类繁多;IS-IS LSP种类较少 OSPF LSA生存时间从零递增;IS-IS LSP生存时间从最大值递减 ISIS LSP种类较少,但是拓展性很强,主要通过LSP携带的TLV字段进行功能拓展。
|