OSPF
动态路由协议分类
距离矢量路由协议
•运行距离矢量路由协议的路由器周期性的泛洪自己的路由表。通过路由的交互,每台路由器都从相邻的路由器学习到路由,并且加载进自己的路由表中。
•对于网络中的所有路由器而言,路由器并不清楚网络的拓扑,只是简单的知道要去往某个目的方向在哪里,距离有多远。这即是距离矢量算法的本质。
链路状态路由协议
LSA泛洪
•与距离矢量路由协议不同,链路状态路由协议通告的的是链路状态而不是路由表。运行链路状态路由协议的路由器之间首先会建立一个协议的邻居关系,然后彼此之间开始交互LSA(Link State Advertisement,链路状态通告)。
LSDB组建
每台路由器都会产生LSAs,路由器将接收到的LSAs放入自己的LSDB(Link State DataBase,链路状态数据库)。路由器通过LSDB,掌握了全网的拓扑。
SPF计算
•每台路由器基于LSDB,使用SPF(Shortest Path First,最短路径优先)算法进行计算。每台路由器都计算出一棵以自己为根的、无环的、拥有最短路径的“树”。有了这棵“树”,路由器就已经知道了到达网络各个角落的优选路径。
路由表生成
最后,路由器将计算出来的优选路径,加载进自己的路由表(Routing Table)
•链路状态路由协议有四个步骤:
▫第一步是建立相邻路由器之间的邻居关系。
▫第二步是邻居之间交互链路状态信息和同步LSDB。
▫第三步是进行优选路径计算。
▫第四步是根据最短路径树生成路由表项加载到路由表。
总结
OSPF协议概述
•OSPF是典型的链路状态路由协议,是目前业内使用非常广泛的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能够支持更大规模的网络。
OSPF基础术语
区域:
OSPF Area用于标识一个OSPF的区域。
区域是从逻辑上将设备划分为不同的组,每个组用区域号(Area ID)来标识。
Router-ID: (Router Identifier,路由器标识符),用于在一个OSPF域中唯一地标识一台路由器。
Router-ID的设定可以通过手工配置的方式,或使用系统自动配置的方式
度量值:
OSPF使用Cost(开销)作为路由的度量值。每一个激活了OSPF的接口都会维护一个接口Cost值,缺省时接口Cost值 = "100 Mbit/s " /"接口带宽" 。其中100 "Mbit/s"为OSPF指定的缺省参考值,该值是可配置的。
笼统地说,一条OSPF路由的Cost值可以理解为是从目的网段到本路由器沿途所有入接口的Cost值累加。
OSPF协议报文类型
| 报文名称 | 报文功能 |
|---|---|
| Hello | 周期性发送,用来发现和维护OSPF邻居关系。 |
| Database Description | 描述本地LSDB的摘要信息,用于两台设备进行数据库同步。 |
| Link State Request | 用于向对方请求所需要的LSA。设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。 |
| Link State Update | 用于向对方发送其所需要的LSA。 |
| Link State ACK | 用来对收到的LSA进行确认。 |
OSPF三大表项
OSPF有三张重要的表项,OSPF邻居表、LSDB表和OSPF路由表
邻居表
对于OSPF的邻居表,需要了解:
OSPF在传递链路状态信息之前,需先建立OSPF邻居关系。
OSPF的邻居关系通过交互Hello报文建立。
OSPF邻居表显示了OSPF路由器之间的邻居状态,使用display ospf peer查看。
LSDB表
•对于OSPF的LSDB表,需要了解:
▫LSDB会保存自己产生的及从邻居收到的LSA信息,本例中R1的LSDB包含了三条LSA。
▫Type标识LSA的类型,AdvRouter标识发送LSA的路由器。
▫使用命令行display ospf lsdb查看LSDB表。
OSPF路由表
•对于OSPF的路由表,需要了解:
▫OSPF路由表和路由器路由表是两张不同的表项。本例中OSPF路由表有三条路由。
▫OSPF路由表包含Destination、Cost和NextHop等指导转发的信息。
▫使用命令display ospf routing查看OSPF路由表。
OSPF 协议 设置ROUTER ID 方法
1.默认使用路由器全局router id 做为ospf协议的router id
2.新的OSPF的router id要生效,需要重启ospf进程,影响OSPF网络的稳定。
全局的router id怎么来?
1、默认该设备第一个被配置的IP地址,作为全局router id
2、全局的router id可以被管理员手动配置,一般建议用Loopback 接口地址
项目建议
1、使用loopback接口作为ospf的router id,并手动配置
2、根据项目的router id的设计方案,进行手动配置,点分十进制格式。
ospf的router id优先与全局 router id
dis ospf interface ge/@/@ 查看ospf 接口 cost
dis ospf brief 查看ospf的router id
bandwidth-reference 修改OSPF协议的参考带宽,Mbit/s为单位,全网路由器需要配置相同的参考带宽
默认情况,接口OSPF cost = 参考带宽/接口带宽。
ospf cost 管理员手动配置接口的ospf cost ,优先级最高
通过修改链路开销,管理员能够控制报文转发路径
环回口的开销是0
算路由开销看出接口方向的开销值累加
属性是确定的 但是取值不是确定的
链路属性:接口的网段信息/掩码长度,接口的开销,接口上邻居,接口的网络类型
-
Type :Router
-
Ls id :1.1.1.1
-
Adv rtr :1.1.1.1
-
Ls age :15
-
Len :36
-
Options :E
-
seq# :80000001
-
chksum :exa0a6
-
Link count :1
-
Link ID:1.1.1.1 接口IP
Data :255.255.255.255 子网掩码
Link Type:StubNet 用于描述直连链路的网络号
Metric :10
Priority :Medium
Link ID:10.1.12.0
Data :255.255.255.255.0
Link Type: StubNet
Metric :1
Priority :Low
Link ID:2.2.2.2 邻居的router id (ospf的身份标识符)
Data :10.1.12.1与邻居相连的接口地址
Link Type:P-P-P 描述p2p链路的邻居信息
Metric :1
hello 启动了ospf协议接口会自动发送hello报文
ospf接口类型是p2p/broadcast,则每隔10s发送一次,默认如果4倍hello时间后没有收到邻居的hello报文,则认为邻居失效。
ospf* 接口类型是*nbma/p2mp,则每隔30s发送一次,默认如果4倍hello时间后没有收到邻居的hello报文,则认为邻居失效。
DD 携带LSDB中所有LSA的摘要信息。
LSA* 摘要的作用*?唯一识别一条LSA,判断LSA的新旧程度。
邻居建立后,LSDB需要同步,即LSDB要保持一致性,即维护相同的LSA以及新旧程度也要相同。为什么要设计DD报文?直接发送LSA不行吗?
在稳定同一个区域所有路由器已经实现LSDB的同步,当新增邻居关系时,为了渐少不必要的LSA的交换,通过DD报文进行LSDB差异的对比,仅需要同步哪些缺失的/或者最新的LSA即可,已经同步的LSA无法在后续同步过程进行发送。
dis ospf interface g0/e/0 查看ospf 接口 cost
dis ospf brief 查看ospf的router id
bandwidth-reference修改OSPF协议的参考带宽,Mbit/s为单位,全网路由器需要配置相同的参考带宽。默认情况,接口OSPF cost=参考带宽/接口带宽。
ospf cost 管理员手动配置接口的ospf cost ,优先级最高
通过修改链路开销,管理员能够控制报文转发路径
在同一个区域中如何唯一的标识一条LSA,通过3* *要素**区分不同的LSA,
1、type
2、Is id
3、advtrt产生该LSA的路由器的router id
报文确认机制
隐式确认 序列号机制
显式确认 复述机制
IP协议本身不负责报文传输的可靠性
ospf 邻居状态机
down:没有收到任何可能邻居的hello
init:收到了邻居hello报文,并且建立邻居参数匹配,但该hello报问中没有携带自己的router id。
init代表邻居单向发现。
two-way:双向发现
exstart:发送空DD报文,进行主从选举
exchange:发送摘要DD报文,进行LSDB的同步判断
loading:发送LSR,LSU,LSACK 进行LSA的同步
full:LSDB交换完毕,LSDB一致。
DD 携带LSDB中所有LSA的摘要信息 隐式确认机制
LSR 携带LSA的3要数,type,Is id,advrtr (显式确认机制)
LSU 携带LSA的详细信息
LsACK 携带LSA的摘要
OSPF协议邻接建立可靠性机制
1、3次握手,建立双向邻居关系
2、DD报文隐式确认机制
3、LSU/LSACK的显式确认机制
为优化MA网络中OSPF邻接关系,OSPF指定了三种OSPF路由器身份,DR(Designated Router,指定路由器)、BDR(Backup Designated Router,备用指定路由器)和DRother路由器。
只允许DR、BDR与其他OSPF路由器建立邻接关系。DRother之间不会建立全毗邻的OSPF邻接关系,双方停滞在2-way状态。
BDR会监控DR的状态,并在当前DR发生故障时接替其角色。
OSPF路由器根据其位置或功能不同,有这样几种类型:
区域内路由器(Internal Router)
区域边界路由器ABR(Area Border Router)
骨干路由器(Backbone Router)
自治系统边界路由器ASBR(AS Boundary Router)
不同类型的接口上OSPF工作发包特点
OSPF报文发送形式:
@点到点P2P类型:当链路层协议是PPP、HDLC时,缺省情况下,OSPF认为网络类型是P2P。在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。
@点到多点P2MP 类型(Point-to-Multipoint):没有一种链路层协议会被缺省的认为是Point-to- Multipoint类型。点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。在该类型的网络中以组播形式(224.0.0.5)发送Hello报文,以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)。
@NBMA类型(Non-broadcast multiple access):当链路层协议是ATM,FR,X.25时,缺省情况下,OSPF认为网络类型是NBMA。在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文),单播需要明确目的IP,故需要手动配置邻居。
@广播类型(Broadcast):当链路层协议是Ethernet、FDDI时,缺省情况下,OSPF认为网络类型是Broadcast。在该类型的网络中,通常以组播形式发送Hello报文、LSU报文和LSAck报文。其中,224.0.0.5的组播地址为OSPF路由器的预留IP组播地址;224.0.0.6的组播地址为OSPF DR的预留IP组播地址。以单播形式发送DD报文和LSR报文。
单播报文发送前提?
一对一 通信
p2p 接口封装协议是PPP,HDLC默认为p2p的网络类型
broadcast 接口的封装协议是eth ,FDDI 默认为broadcast(广播多路访问)
NBMA 接口的封装协议是帧中继,ATM,默认为NBMA(非广播多路访问)
P2MP 没有一种链路层协议被默认为P2MP的,由管理员手动配置。
NBMA,P2MP 实际上可以认为是OSPF为适配帧中继,ATM的链路而特定开发出的网络类型。
broadcast链路/nbma 邻居必须要进行DR/BDR的选举。
每条broadcast/nbma的链路都要进行DR/BDR选举。
@通过OSPF接口优先级进行DR/BDR选举,默认等于1,取值0-255
@优先级值越大,优先成为DR,次大,成为BDR,剩下的都是Drother.
@如果优先级相同,则比较router id,越大优先成为DR,次大成为BDR,剩下的都是drother
@BRO/NBMA链路有且只有一个DR以及BDR,DR必选,BDR可选。
@ DR,BDR没有抢夺性,保证邻居关系状态稳定性,防止网络震荡。
@ DR失效,BDR成为新的DR,选举新的BDR。
@ DR没失效,BDR失效,重新选BDR。
@ DR失效,BDR失效,重新进行DR, BDR的选举。
P2P/P2MP无需进行DR/BDR选举,直接建立full邻接关系。
广播性 NBMA型工作机制
@Drother产生的LSU通过224.0.0.6发送给DR,BDR,DR通过224.0.0.5发送给其他的DRothe和BDR,DROTHER通过224.0.0.6发送ACK确认,BDR通过组播224.0.0.5向DR确认。
@BDR产生的LSU通过224.0.0.5发送给drother和DR,DR通过224.0.0.5发送ack,drother通过224.0.0.6发送ack。
@DR产生的LSU通过224.0.0.5发送drother和BDR,BDR通过224.0.0.5发生ack, drother通过224.0.0.6发送ack。
链路支持广播/组播报文的泛洪称为BMA
链路不支持广播/组播报文的泛洪 称为NBMA
224.0.0.5 代表所有运行OSPF协议的路由器
224.0.0.6 代表DR,BDR
DR,BDR 即监听224.0.0.5 也监听224.0.0.6
drother发给DR,BDR,通常是224.0.0.6
DR,BDR发送OSPF报文都用224.0.0.5
正常情况下,drother之间处于two-way的邻居关系。
P2P/P2MP 无需选举,直接建立邻接关系。
broadcast链路/nbma 邻居必须要进行DR/BDR的选举。
每条broadcast/nbma的链路都要进行DR/BDR选举。
@通过OSPF接口优先级进行DR/BDR选举,默认等于1,取值0-255
@优先级值越大,优先成为DR,次大,成为BDR,剩下的都是Drother.
@如果优先级相同,则比较router id,越大优先成为DR,次大成为BDR,剩下的都是drother
@BRO/NBMA链路有且只有一个DR以及BDR,DR必选,BDR可选。
@ DR, BDR 没有抢夺性,保证邻居关系状态稳定性,防止网络震荡。
@ DR失效,BDR成为新的DR,选举新的BDR。
@ DR没失效,BDR失效,重新选BDR。
@ DR失效,BDR失效,重新进行DR,BDR的选举。
@ 优先级等于e的路由器,立即成为DRothe,不在具备DR/BDR的选举资格。
@ DR/BDR/Drother并不是路由器角色,而是路由器接口在链路上角色。
P2P/P2MP无需进行DR/BDR选举,直接建立full邻接关系。
区域设计规划原则:
1 骨干区域有且只有一个,而且必须连续
2 非骨干区域必须和骨干区域直接相连
IR 所有运行OSPF协议接口都在同一个区域路由器
ABR连接多个区域,至少有一个接口属于区域e的路由器/存在Vlink的路由器
BR 区域0中的IR以及ABR
ASBR执行引入其他协议路由到OSPF网络中路由器
区域的边界在路由器上,划分区域就是把不同的接口加入到不同的区域
把不同的接口加入到不同的协议/加入到同一个协议不同进程,都可以实现路由信息隔离
进程号本地有效,不需要全局相同。为方便管理,同一个domian建议配置相同的进程号