概述
OSPF全称开放最短路径优先(Open Shortest Path First)是一种链路状态路由协议。v2版本的OSPF基于IPv4,v3版本的OSPF基于IPv6。在IPv4网络中OSPF应该是被使用最广泛的IGP了。
基本特点
- OSPF属于IGP,是链路状态协议,基于IP协议号89
- 采用分区域的设计,所有区域需要和骨干区域ar0相连
- 区域内采用SPF(Dijkstra算法)计算最佳路径
- 可以快速响应网络拓扑变化(触发更新)
- 支持等价路径负载
三张表
OSPF的运行涉及三张表
- 邻居表
用于记录与opsf邻居之间的状态、参数等; - 拓扑表
本质是LSDB,通过LSA来更新数据。用于记录接收的LSA信息,在区域内和ma网络中保持一致 - 路由表
通过DJ算法将最佳路由提交到路由表
OSPF路由器类型
路由器类型 | 功能 |
---|---|
内部路由器 | 在一个普通区域内部的路由器 |
骨干路由器 | 在区域0的内部路由器 |
ABR | 区域边界路由器,连接两个不通区域的路由器 |
ASBR | 自治系统边界路由器,连接OSPF到另一个自治系统的路由器 |
OSPF报文类型
类型 | 内容 |
---|---|
HELLO | hello包,用于建立/维护邻居 |
DBD | 数据库描述,用于同步自身LSDB摘要 |
LSR | 链路状态请求,用于请求LSA |
LSU | 链路状态更新,用于传播LSA详细,可单播可组播 |
LSAck | 用于确认收到LSU |
OSPF邻居
OSPF通过hello报文来建立和维护邻居
ospf邻居建立过程
down:周期性发送hello包;收到不带自己RID的hello包时进入init
init:继续正常周期性发送hello包;收到带自己RID的hello包进入2way
2way:通过hello包携带的DR/BDR信息(如有)选举DR/BDR;然后进入exstart
exstart: 双法开始单播发送第一个DBD;根据对方的第一个DBD选取主从;然后进入exchange
exchange: 开始交换DBD,以master序列号为基准,slave先发DBD,通过序列号隐式确认;发送完毕后进入Loading
loading: 双方开始根据DBD的LSA摘要,单播发送LSR请求详细的LSU,同步完成后进入full
full: 邻接完成
OSPF LSA内容
一个LSA可由{Type,LS ID,ADV Router}唯一描述
- Type,LSA类型,常见有1,2,3,4,5,7
- LS ID,链路状态ID,可理解为一个LSA的名称,每类LSA的该字段有不通含义
- ADV Router,通告路由器
- Age,老化时间,一般为3600s,每1800s会无触发更新
- Seq,序列号,0x80000001开始计数,越大表示LSA越新
- Checksum,校验和
- Do Not Age Flag,不老化标识,虚链路LSA该位为1
OSPF LSA类型
类型 | 传播范围 | 产生与功能 | LS ID字段 | ADV字段 |
---|---|---|---|---|
1类Router | 区域内 | 每台路由器都会产生,传输本地链路状态 | Router ID | Router ID |
2类Network | 区域内,广播域内 | DR产生,标识本MA网络中掩码和路由器 | DR接口IP | DR RouterID |
3类Router Summary | 泛洪整个AS(除totally stub区域) | 由ABR重新产生(根据1、2类或其它3类),用于传递区域间路由 | 域间路由(网络号) | ABR的Router ID,经过一个ABR就会变为该ABR的RID |
4类ASBR Summary | 除ASBR外的非stub区域 | 由ASBR所在区域的ABR产生并发出,用于告知ASBR的位置 | ASBR的Router ID | ABR的Router ID,经过一个ABR就会变为该ABR的RID |
5类AS-External | 全域泛洪,stub区域除外 | ASBR产生,保持ADV不变,传递域外路由 | 域外路由(网络号) | ASBR的Router ID |
7类NSSA-External | 只存在于NSSA区域内,NSSA的ABR会做7转5 | 由NSSA区域内ASBR产生,传递域外路由 | 域外路由(网络号) | ASBR的Router ID |
OSPF区域类型
ospf采用层次设计,用区域分割路由器;区域中路由器保存该区域中所有链路和路由器详细信息,但只保存其它区域路由器和链路的摘要信息
骨干区域主要为高速快速传递数据,通常不接用户
常规区域主要连接用户。所有数据需经过骨干区域中转。
非骨干区域主要包含以下几种类型
区域 | 特点 |
---|---|
普通区域 | 区域内泛洪1、2类LSA,也会传递3,4,5类LSA |
Stub | 不能配置外部重分发,阻止4,5类路由,ABR自动下发OIA默认路由 |
Totally Stub | 不能外部重分发,不会传3,4,5类LSA,会传递1,2类和3类默认LSA,ABR自动下发OIA默认 |
NSSA | 可以重分发外部路由作为7类LSA在ABR转成5类。允许1,2,3,7类LSA,ABR不会自动下发OIA默认 |
Totally NSSA | 阻止3,4,5类LSA,允许1,2,7和3类默认LSA,ABR自动下发OIA默认 |
OSPF路由类型
OSPF的LSA类型较多,不同LSA传递的路由类型也不一样,共有一下几种类型
- O路由
区域内路由,由1类LSA和2类LSA通过DJ算法计算得出 - O IA路由
区域间路由,由3类LSA习得 - O E1/N1路由
1类外部路由/1类NSSA外部路由,由4/5/7类LSA习得; - O E2/N2路由
2类外部路由/1类NSSA外部路由,由4/5/7类LSA习得;
OSPF选路
度量
OSPF路由管理距离(AD)默认是110 (CISCO), 度量单位是cost
cost=reference/interface bandwidth
reference默认是100000000 (10^8),其中每台路由器可以配置不一样,但建议全局一致。另外cost是分方向的,因为ospf区域内收敛算法(dj)需要画有向权重图,cost即为单向权重。
外部路由度量 /Forward Address
Forward Address 字段用于优化外部MA网络路由下一跳的问题。在ASBR产生LSA5时填充FA,若该外部路由下一跳接口是MA、且是有效ospf接口则FA填充为改路由实际下一跳地址。
Forward Metric 是本地到Forward Address 的cost,当forward
address=0.0.0.0时,forward metric是本路由器到ASBR的metric
OSPF外部路由type2(默认),默认种子metric为20,且metric不变
OSPF外部路由type1,metric是种子metric+forward metric
另外,在 NSSA 区域,协议规定不能发送为0的FA;
当把直连重分布进来,Forward Address:
1、加入 ospf 最新的回环口作为 Forward Address;
2、如果没有回环口,那么加入 ospf 最新的激活的接口地址;
如果把外部路由重分布进来,Forward Address:
1、外部接口没有运行 ospf,Forward Address 同上;
2、外部接口运行了 ospf,Forward Address 是外部路由的下一跳地址。
O 路由选路
- 依次比较AD Metric 小的优先
- 当收到来自不同的AR的1 2类LSA,计算的O路由,AD与Metric,先到的优先,不会负载
- 当收到来自相同AR的LSA1 2类,计算的O路由,AD与Metric相同,负载
O IA 路由选路
- O>OIA,不考虑AD、Metric
- 当收到来自Area 0的3类LSA时,不考虑其它区域的3类LSA,优选Area 0的,不考虑AD、Metric。若均来自Area0,一次比较AD、Metric,若相同,则负载;
- 当收到来自非Area0的3类LSA时,依次比较AD、Metric,小的有限,若相同,则负载
O E 选路
- OIA>OE,不考虑AD、metric
- OE1>OE2,不考虑AD、meitric
- OE1路由,比较AD与Metric,相同则负载
OSPF路由汇总
3类LSA汇总
1 | area 2 range 100.1.0.0 255.255.252.0 |
- 含义:把区域2的1,2类转为3类时做汇总,即area 后面跟的区域。不能把本来就是OIA的路由做汇总;
5类LSA汇总
1 | Summary-address 100.1.0.0 255.255.252.0 |
- 含义:5类LSA的汇总,只能在ASBR上做,即对自己产生的5类路由汇总,对于别的路由器产生的5类路由,没有汇总能力
OSPF网络类型
网络物理连接可分为三种
- POINT_TO_POINT
- BROADCAST
- NBMA
根据物理网络连接类型,OSPF网络类型分为以下几种:
类型 | 二层 | Hello/Dead | DR/BDR | 手动邻居 | /32路由 |
---|---|---|---|---|---|
P2P | HDLC\PPP\FRp2p | 10/40 | NO | NO | NO |
BROADCAST | Eth、令牌环、FDDI | 10/40 | YES | NO | NO |
NBMA | FR/X.25/ATM | 30/120 | YES | YES | NO |
P2MP(Multi) | HUB-SPOKE | 30/120 | NO | NO | YES |
P2MP(NB) | CISCO私有 | 30/120 | NO | YES | YES |
Loopback | loopback | 当作host处理 |
OSPF建立邻接关系与网络类型无关,与hello/dead有关,但不同的网络类型建立邻居后有可能学不到路由。
如果参与建邻的路由器都需要选举或都不需要选举DR/BDR,则可以学习到路由,否则学不到,具体关系如下:
p2p | broadcast | NBMA | p2mp | p2mp NB | |
---|---|---|---|---|---|
p2p | NO | NO | YES | YES | |
broadcast | YES | NO | NO | ||
NBMA | NO | NO | |||
p2mp | YES | ||||
p2mp NB |
OSPF虚链路
OSPF虚链路用于解决OSPF区域设计上的问题。
假设R0-R1-R2-R3互联,R0-R1之间,R1-R2之间,R2-R2之间区域分别为0,1,2。R3由于现实原因无法与R0互联,那么可以采用虚链路。在ABR R1和中转区域R2上配置虚链路,相当于R2与区域0相连。
虚链路在使用上有一些限制:
- 虚链路只在建立邻居的时候发送hello包,邻居建立后不再发送
- 虚链路的LSA只会触发更新,并且不会老化
- 虚拟链路cost继承物理链路
- 虚链路不能跨区域建立(只能在‘被分割的’中转区域建立)
- 不能建立再STUB区域
OSPF认证
OSPF认证是指在发送hello包时添加认证字段达到认证邻居的效果,可以保护自己的路由传给通过认证的邻居。
OSPF认证分接口认证和区域认证,区域认证本质就是所有属于该区域的接口都参与认证。同时配置接口认证和区域认证,以接口认证配置优先。
接口认证
接口明文认证
1 | int s1/1 |
接口md5认证
1 | int s1/1 |
其中1是key-id,cisco是md5原文
区域认证
区域明文
1 | router ospf 1 |
区域md5
1 | router ospf 1 |
多 key md5 认证规则:
当配置了最新的 key,将最新 key 与旧 key 都发送到对端:
- 若最新的 key,到对端没有找到对应的 key-id,则两端采用旧 key 完成认证。
- 若最新的 key,到对端找到相同的key-id,比较密钥,密钥不一致,认证失败;密钥一致,则认证通