- OSPF 基本配置命令
-
- 进入 OSPF 进程配置模式:Router(config)#router ospf <进程号>
- 在 OSPF 进程中宣告接口:Router(config-router)#network <接口 IP 地址> 0.0.0.0 area <区域号>
- 0.0.0.0 为反掩码,用于匹配一部分接口,能够被最短反掩码匹配到的接口优先宣告。
- 在接口配置模式中直接宣告接口(优先级高于进程宣告):Router(config-if)#ip ospf <进程号> area <区域号>
- Show 命令
- 查看 OSPF 配置:Router#show running-config | section ospf
- 查看哪些接口被宣告进 OSPF 进程中:Router#show ip ospf interface brief
- 查看 OSPF 邻居:Router#show ip ospf neighbor
- 查看 OSPF 路由表:Router#show ip route ospf
- 查看 LSDB 报头:Router#show ip ospf database
- 重置 OSPF 进程: Router#clear ip ospf process
- OSPF 运行于 IP 协议之上, 协议号 为 89 。
- OSPF 的 ToS 字段为 IP 优先级 6 。
- ToS 字段的前 3 bit 为 110。
- OSPF 报文只支持 单播 或 组播 发送。
-
-
- OSPF 是基于 链路状态 的路由协议,同一区域内的路由器之间不交互路由表(而是交互 LSA )。
- OSPF 支持无限的跳数。
- OSPF 既支持 触发更新 ,也支持 周期性更新 (默认每 30min 泛洪一次 LSA)。
- OSPF 的 进程号 只具有 本地意义 。
- 如果一个接口同时被多个进程宣告,那么只有 第一个 宣告它的进程有效。
-
- OSPF 是一种 层次化 的路由协议
- 它可将整个网络 基于接口 分为 众多区域 (不同的接口可宣告进不同区域)。
- 一个区域可以看作是一个 AS 的子集 。
- 小型网络设计多区域的意义不大。
- 如果某个区域内的某台路由器某个宣告进 OSPF 的 接口不停地 Up/Down ,将会导致该区域内所有路由器的 LSDB 不停地变动 。在这种情况下,划分多区域可以减小由于接口不停地 Up/Down 造成的影响范围。
- 在多区域 OSPF 网络中,必须指定一个编号为 0( Area 0 )的 骨干区域 (也叫 传输区域 )。
- 在 同个区域 内 绝对不可能出现路由环路 。
- 区域中的每台路由器都知道区域中其它所有路由器是怎么连接的。
- 非骨干区域都必须和骨干区域有连接 。
- 强制 形成星型拓扑 ,防止环路产生。
- 由于 区域间无法传递拓扑信息 ,因此 只有区域或 AS 间才可进行路由汇总或聚合 。
- 区域间的路由 使用 距离矢量 协议的算法来计算。
- 非骨干区域的类型
- 常规区域
- Hello 报文中的 Flag 字段: E=1 ( 允许 5 类 LSA 存在), N=0 (不是 NSSA 区域)。
- Stub 区域 :末节区域
- 不允许 ASBR ( 4、5 类 LSA )存在。
- ABR 不会让 4、5 类 LSA 进入 Stub 区域。
- Hello 报文中的 Flag 字段: E=0 ( 不允许 5 类 LSA 存在 ), N=0 ( 不是 NSSA 区域 )。
- Stub 区域内的 ABR 会下放度量值为 1 的 默认路由 ( 3 类 LSA )到该 Stub 区域内。
- 区域内 所有路由器均要配置 。
- 配置 Stub 区域 可减少 LSA 的数目及路由表条目 。适用于 没有多余选路需求 (要 访问区域外的网段只能通过 ABR )的区域。
- Stub 区域中 不允许存在 Virtual Link 。
- Area 不允许配置成 Stub 区域 。
- 配置命令
- Router(config-router)#area <区域号> stub
- Totally Stub 区域 :完全末节区域
- 在 Stub 区域的基础上 , 不允许 3 类 LSA (ABR 生成默认路由对应的 LSA 除外)存在。
- 在 Totally Stub 区域中, 只允许 一条 由 ABR 产生的默认路由对应的 3 类 LSA 存在。
- 只需在 ABR 上配置 Stub 区域命令的后面加上 no-summary 就可以了。
- NSSA (No-so-Stubby) 区域 :不那么末节区域
- Hello 报文中的 Flag 字段: E=0 ( 不允许 5 类 LSA 存在), N=1 ( NSSA 区域 )。
- 在 Stub 区域的基础上 支持 ASBR 。
- NSSA 区域内的 ABR 以及 ASBR 不会主动下放默认路由 。
- ASBR 重分发进 OSPF 的路由条目以 7 类 LSA (特殊的 5 类 LSA)的方式发送。
- 7 类 LSA 在扩散到其他区域之前必须 由该区域内路由器 ID 最高的 ABR 转换为 5 类 LSA ,且 转换者对其他区域来说才是 ASBR (前提是转换后的 5 类 LSA 不带FA)。
- 在新版的 IOS 中,也可强制指定转换者。
- 强制指定转换者的命令:Router(config-router)#area <区域号> nssa translate type7 always
- 区域内 所有路由器均要配置 。
- NSSA 区域中 不允许存在 Virtual Link 。
- Area 不允许配置成 NSSA 区域 。
- 如果 NSSA 区域中 存在伪 ABR ,而恰巧该 伪 ABR 的路由器 ID 是 NSSA 区域中最大的 ,则会导致 转换后的 5 类 LSA 不能发往 NSSA 区域外 。
- 应尽量确保 NSSA 区域内只包含一台 ABR ,否则可能会出现 非对称路由 、 次优路径 或 环路 。
- 非对称路由可能会出现的环境:非转换者 ABR 下放的默认路由的度量值比转换者 ABR 下放的默认路由的度量值小,这就导致了 NSSA 区域内主机访问区域外网络时去包走的是非转换者 ABR,而回包走的却是转换者 ABR(因为只有转换者 ABR 才能向 NSSA 区域外通告 5 类 LSA,这导致了 NSSA 区域外的主机访问 NSSA 区域内的网络只能走转换者 ABR)。
- 配置命令
- Router(config-router)#area <区域号> nssa [default-information-originate] [no-redistribution]
- default-information-originate 表示 以 7 类 LSA 的方式向该区域内下放默认路由 (如果是 ASBR ,则路由表中 必须要有默认路由 才能生效)。
- no-redistribution 表示不要将重分发进 OSPF 的路由条目下放到 NSSA 区域中。如果路由器在 NSSA 区域中既是 ABR 也是 ASBR,且还是 NSSA 区域的出口的话,可以添加这个关键字。
- Totally NSSA 区域 :完全 NSSA 区域
- 在 NSSA 区域的基础上 , 不允许 3 类 LSA (ABR 生成默认路由对应的 LSA 除外)存在。
- 在 Totally NSSA 区域中, 只允许 一条 由 ABR 产生的默认路由对应的 3 类 LSA 存在。
- 该区域内的 ASBR 不能是整网的出口 (ASBR 不能有默认路由)。
- 因为该区域内 ABR 下放的默认路由 ( O IA ) 的优先级要比 ASBR 下放的默认路由 ( O N1/2 ) 的优先级高 。
- 比较少用。
- 只需在 ABR 上配置 NSSA 区域命令的后面加上 no-summary 就可以了。
- 常规区域
- 路由器类型
- 普通路由器
- ABR ( 区域边界 路由器)
- ASBR ( 自治系统边界 路由器)
- 查看 ABR 和 ASBR 的命令:Router#show ip ospf border-routers
- ABR 一定要 和 Area 0 挂靠 ,否则 不能产生 3 类 LSA 。
- 伪 ABR :在 Area 0 中 没有 Full 邻居 。
- 不遵循 3 类 LSA 防环原则。
- 例如:一台路由器只有环回口宣告进了 Area 0。
- 真 ABR :在 Area 0 中 有 Full 邻居 。
- 遵循 3 类 LSA 防环原则 。
- 伪 ABR :在 Area 0 中 没有 Full 邻居 。
- ASBR 可以放在任意区域中(Stub 以及 Totally Stub 区域除外)。
- Area 0 不允许过滤 LSA (必须包含 全路由 )。
- 它可将整个网络 基于接口 分为 众多区域 (不同的接口可宣告进不同区域)。
- 目前 OSPF 一般使用 iSPF 以及 PRC 算法计算同一区域内的路由。
- 每台路由器都以自身为根,计算从自身去往每一个网络的路径,再结合 LSA 中的网络信息生成路由条目。
- OSPF 是一种 层次化 的路由协议
-
- 运行 OSPF 的路由器 必须有一个路由器 ID 。
- 如果不指定路由器 ID,OSPF 默认使用 环回口中最大的 IP 地址 作为路由器 ID。如果 没有设置环回口 则使用 接口中最大的 IP 地址 作为路由器 ID。
- 如果在已经有 OSPF 邻居的情况下修改了路由器 ID,那么必须 重置 OSPF 进程 才能让设置生效。
- 指定路由器 ID 的命令:Router(config-router)#router-id <路由器 ID>
- OSPF 的 网络类型 (不同网络类型的 OSPF 的运行方式有所不同)
- Loopback :环回
- 环回口 默认的网络类型。
- 不发送 Hello 。
- 不建立邻居 。
- 只能通告 /32 路由 。
- 可能会 影响 MPLS 标签分发 。
- 仅限环回口 使用。
- Broadcast :广播
- 以太网 默认的网络类型。
- 10s 发送一次 Hello 。
- 支持组播发送 OSPF 报文 。
- 选举 DR/BDR 。
- 所有节点逻辑直连
- 通告路由条目的 下一跳为生成这条路由条目的路由器接口的 IP 地址 。
- Non-Broadcast (MBMA):非广播
- 帧中继 (含 多点子接口 )默认的网络类型。
- 30s 发送一次 Hello 。
- 不支持组播发送 OSPF 报文 。
- 需要 手动指定 OSPF 邻居 (思科只需要单向指定)。
- 选举 DR/BDR 。
- 在帧中继环境中,必须 让 Hub 节点当 DR 。然后让 所有 Spoke 节点当 DROthers 就好了(当 BDR 没有任何意义,因为如果 Hub Down 了的话整个网络就都不可用了)。
- 所有节点逻辑直连
- 通告路由条目的 下一跳为生成这条路由条目的路由器接口的 IP 地址 。
- Point-to-Point :点对点
- PPP 、 HDLC 、 帧中继点对点子接口 、 BRI 等默认的网络类型。
- 10s 发送一次 Hello 。
- 支持组播发送 OSPF 报文 。
- 只能建立一个邻居 。
- 如果用在 MA 网络中且邻居不止一个的话会造成邻居频繁 Up/Down。
- 不选举 DR/BDR 。
- Point-to-MultiPoint :点对多点
- 无默认对应接口类型 (需要通过命令才能使用)。
- 30s 发送一次 Hello 。
- 支持组播发送 OSPF 报文 。
- 不选举 DR/BDR 。
- 邻居一旦建立完毕,会把 自身接口的 IP 地址以 /32 形式的路由 通告给对方。
- 所有节点不逻辑直连
- 通告路由条目的 下一跳为发出这条路由条目的路由器接口的 IP 地址 。
- 帧中继的完美解决方案(不用在 Spoke 节点做额外的 DLCI 映射)。
- Point-to-MultiPoint Non-Broadcast :点对多点非广播
- 跟 Point-to-MultiPoint 基本相同,只是 不支持组播 ,需要手动指定邻居而已。
- Loopback :环回
- 如果帧中继中 Hub 节点用 Point-to-MultiPoint , Spoke 节点用 Point-to-Point 的话,默认是无法建立邻居的(因为 Hello 周期不一致 )。
- Point-to-Point 可以和 Broadcast 建邻居 ,但 无法传递路由 (因为 1 类 LSA 中链路的类型不一致 )。
- 环回口只能使用 Loopback、Point-to-Point 网络类型
- 使用 Point-to-Point 时可以通告 非 /32 路由。
- 修改网络类型的命令:Router(config-if)#ip ospf network <网络类型>
-
- OSPF 使用的 组播组地址
- 224.0.0.5 : 所有 OSPF 路由器都监听 。
- 224.0.0.6 : MA 网络中的 DR、BDR 监听 。
- OSPF 的 报文
- Hello
- 用于 邻居建立 及 邻接关系维护 。
- 发送周期和网络类型有关 。
- 邻居建立之后,如果在 4 倍 Hello 周期 ( Dead 时间 ) 内都没有收到回应则 Down 邻居 。
- 强制指定 Hello 周期的命令:Router(config-if)#ip ospf hello-interval <秒数>
- 设定 Hello 周期为最小值(50 毫秒)的命令:Router(config-if)#ip ospf dead-interval minimal hello-multiplier 20
- 指定 Hello 周期的同时 Dead 时间也会被修改 (前提是 没有指定 Dead 时间 )。
- 强制指定 Dead 时间的命令:Router(config-if)#ip ospf dead-interval <秒数>
- 路由器之间如果 只交互过 Hello 报文 ,则 只能将邻接关系建立到 2-way 状态机 。
- DBD (数据库描述)
- 包含 LSA 报头 ( LSA 的名字 ( LSID )、 通告的路由器 ( Adv Router )、 校验和 、 序列号 )。
- 包含 Flags 字段 ( Init 位 、 More 位 、 M/S 位 )。
- 在 2-way 邻接状态机之后 发送。
- 支持 显式确认 和 隐式确认 。
- LSR (链路状态请求)
- 包含 LSA 三元组 ( LSA 的名字 ( LSID )、 通告的路由器 ( Adv Router )、 LSA 的类型 )。
- LSU (链路状态更新)
- 包含 完整 LSA 。
- 一个 LSU 报文 中可包含 多个 LSA 。
- LSAck (链路状态确认)
- 针对 LSU 中的 LSA 进行确认 。
- 包含 LSA 报头 ( LSA 的名字 ( LSID )、 通告的路由器 ( Adv Router )、 校验和 、 序列号 )。
- Hello
- 隐式确认与显式确认
- 显式确认 :使用 独立、具有确认功能的其它类型报文 ( LSU 、 LSAck )作确认。
- LSR 、 LSU 使用 显式确认 ( LSR 使用 LSU 作为确认, LSU 使用 LSAck 作为确认)。
- 隐式确认 :使用 相同类型的回应报文 作确认。
- 只用于 DBD 交互 。
- 邻居路由器可使用 相同序列号的 DBD 既做确认又做回应 。
- 只用于 DBD 交互 。
- 显式确认 :使用 独立、具有确认功能的其它类型报文 ( LSU 、 LSAck )作确认。
- 隐式确认的 序列号谁说了算?
- 需要在邻接状态机为 Exstart 时选举出 Master/Slave 路由器。
- 路由器 ID 大 者做 Master 。
- 序列号由 Master 说了算 。
- 需要在邻接状态机为 Exstart 时选举出 Master/Slave 路由器。
- OSPF 使用的 组播组地址
-
- OSPF 邻居的分类
- Neighbor (邻居): 只交互过 Hello 报文 (状态机为 2-way )。
- Adjacency (邻接): 交互过全部类型的 OSPF 报文、LSDB 已经同步完成 (状态机为 Full )。
- DR (指定路由器)、 BDR (备份指定路由器)
- DR、BDR 指的是 路由器的某些接口 。
- 选举一般只在 某些网络类型的 MA 网络 中进行。
- 用来解决 MA 网络中邻接关系过于复杂的问题 。
- MA 网络中 每添加一台路由器 ,整网邻居数量将 呈几何倍数 增长。
- 通过 网络类型 来决定 是否进行选举 。
- 用来解决 MA 网络中邻接关系过于复杂的问题 。
- 到达 2-way 状态机之后再进行选举。
- 选举最多花费 4 倍 Hello 周期 。
- 不是 DR、BDR 的路由器称为 DROthers 。
- DROthers 之间不需要交互 DBD。
- DR/BDR 选举规则
- 先比较优先级 , 优先级相同再比较路由器 ID 。优先级或路由器 ID 最高者当选 DR , 次高者当选 BDR , 其他路由器做 DROthers 。
- 优先级为 的接口 只能做 DROthers ,即 没资格参选 。
- 设置接口优先级的命令:Router(config-if)#ip ospf priority <优先级>
- 先比较优先级 , 优先级相同再比较路由器 ID 。优先级或路由器 ID 最高者当选 DR , 次高者当选 BDR , 其他路由器做 DROthers 。
- 如果 DR 挂了 , BDR 将会 接替 DR 的角色 ,同时 选举出另一个 BDR 。
- DR/BDR 在 正常情况下不能被抢占 ,如需抢占只能 重置 OSPF 进程 。
- Hello 报文 中会包含 当前网络已认可的 DR、BDR 。
- 需要选举 DR/BDR 的网络中 可以没有 BDR ,但 一定要有 DR 。
- DR/BDR 的选举要求 接口地址在同一个子网段内 。
- 如果一个 MA 网络中有 不同网段 的邻居,那么选举会 分网段 进行。
- 所有路由器 需要 与 DR、BDR 建立 Full 邻居 。 DROthers 之间 只需要 建立到 2-way 邻居 即可。
- 所有路由器只需要把 自身的 LSA 发送给 DR、BDR ( 目的 IP 为 224.0.0.6 ),由 DR 整理之后再统一通告 ( BDR 只会整理不会通告 ) 给所有路由器 ( 目的 IP 为 224.0.0.5 )。
- OSPF 邻居的分类
-
- OSPF 邻接状态机
- Down
- 刚刚在接口上启用 OSPF,还 没有收发过 OSPF 流量 。
- Attempt(可选)
- MBMA 网络 、 点到多点网络 手动指定邻居之后 尝试与邻居建立连接的过程 。
- Init
- 收到邻居的 Hello、但邻居没有收到我的 Hello ( 邻居发送的 Hello 报文中没有包含我的路由器 ID )。
- 2-way
- 邻居已经收到我的 Hello ( 邻居发送的 Hello 报文中已经包含我的路由器 ID )。
- 2-way 之后开始选举 DR/BDR 。
- 到达该状态机需要满足的条件
- OSPF 版本号一致 。
- 不能冲突的路由器 ID 。
- 区域一致 。
- Hello 周期、Dead 时间一致 。
- E、N 位一致 。
- 认证信息一致 。
- 接口在同一子网中 ( Point-to-Point 网络类型 除外 )。
- Exstart
- 邻居双方交互它们的 第一个 DBD , Flags 位中的 Init=1 , More=1 , M/S=1 ,用于 选举 Master ( 序列号为随机 )。
- 选举出 Master 之后, Slave 将进行第一次隐式确认 ( Flags 位中的 Init=0 , More=1 , M/S=0 , 序列号为 Master 指定的序列号 )。
- 包含链路的 MTU 信息 。
- 在思科路由器上如果 链路两端的 MTU 不一致 ,会 卡在这个状态机 。
- 这两个 DBD 均不包含 LSA 信息 。
- Exchange
- 交互 DBD (当两台路由器的 DBD 大小不一致时将使用显式确认 )。
- Loading
- 交互 LSR 、 LSU 。
- Full
- 两台路由器的 LSDB 已经同步 。
- Down
- OSPF 可以 在邻接关系建立的过程中生成路由条目 。
- 被动接口
- 将某个接口 设置为被动接口之后 ,该接口 不能发送 Hello 报文 。
- 也就 没法建立邻居 , 没法收发路由条目
- 设置某个接口为被动接口的命令:Router(config-router)#passive-interface <接口名>
- 将某个接口 设置为被动接口之后 ,该接口 不能发送 Hello 报文 。
- OSPF 邻接状态机
-
- OSPF 的 LSA
- 1 类 : 路由器 LSA (常用)
- 产生的路由器:所有路由器。
- 扩散范围:该区域内所有路由器。
- 主要包含信息:宣告进 OSPF 的接口的详细信息以及度量值。
- 以 链路的形式来描述各个接口信息 。
- 链路类型
- Point-to-Point
- 不用选 DR/BDR (例如 Point-to-Point 网络类型的接口)。
- 须 配合 Stub 类型的链路才可生成路由条目 。
- Link ID : 邻居的路由器 ID 。
- 包含的数据 : 该链路本地接口的 IP 地址 。
- Transit
- 需要选 DR/BDR (例如 Broadcast 网络类型的接口)。
- 须 配合 2 类 LSA 才可生成路由条目 。
- Link ID : DR 连接该 MA 网络接口的 IP 地址 。
- 包含的数据 : 该链路本地接口的 IP 地址 。
- Stub
- 连接 主机 的链路( 末节链路 )。
- 配合 Point-to-Point 类型的链路可生成路由条目 。
- Link ID : 该链路本地接口的前缀 。
- 包含的数据 : 该链路本地接口的掩码 。
- Virtual
- 虚链路 专用。
- Link ID : 虚链路对端路由器的路由器 ID 。
- 包含的数据 : 去往对端路由器的本地始发地址 。
- 作用:让路由器知道 该区域内的网络是如何分布的 ,并 画出该区域的拓扑图 (如果该路由器 存在需要选举 DR/BDR 的网络 ,那么 还需要 2 类 LSA 辅助 )。
- 一些特征
- LSID : 通告路由器的 ID 。
- Adv Router : 与 LSID 相同 。
- Type 字段
- 无 : 普通路由器 。
- B : ABR 。
- E : ASBR 。
- 每台路由器 关于它所属的每个区域只会产生一条 1 类 LSA 。
- 前缀抑制
- 在 1 类 LSA 中只通告环回(类型)接口以及被动接口的信息。
- 启用前缀抑制的命令:Router(config-router)#prefix-suppression
- 如果不想通告被动接口的信息,也可在接口配置模式下执行命令:Router(config-if)#ip ospf prefix-suppression
- 查看 1 类 LSA 的命令:Router#show ip ospf database router
- 2 类 : 网络 LSA (常用)
- 产生的路由器 : MA 网络中的 DR 。
- 扩散范围 : 该区域内所有路由器 。
- 主要包含信息 : 该 MA 网络中所有路由器的 ID 及子网掩码 。
- 作用:作为 一类 LSA 的补充 。
- 一些特征
- LSID : DR 连接 MA 网络接口的 IP 地址 。
- Adv Router : DR 的路由器 ID 。
- 网络中 有多少个 DR 就有多少条 2 类 LSA 。
- 查看 2 类 LSA 的命令:Router#show ip ospf database network
- 3 类 : 汇总 LSA (常用)
- 产生的路由器 : ABR 。
- 扩散范围 : 整个 AS 。
- 主要包含信息 : 区域中的路由条目 ( 不包含拓扑信息 ,可 汇总/聚合 ,一个路由条目对应一个 LSA)。
- 不含拓扑信息也能防环的原因:去往同一区域中的 ABR 的路径是无环的(因为能够得知拓扑信息),ABR 去往其他区域的路径也是无环的(因为 OSPF 强制各个区域连成星型拓扑)。把这两段链路连接在一起,只要保证拓扑是无环的,整条路径就是无环的。
- 作用:在 区域间传递路由条目 。
- 一些特征
- LSID : 区域间路由的前缀 。
- Adv Router : ABR 的路由器 ID 。
- 当一条 3 类 LSA 跨越 ABR 时会修改 Adv Router 为当前被跨越 ABR 自身的路由器 ID (相应的 度量值也会被修改 )。
- 防环原则
- 当 真 ABR 从非骨干区域收到 3 类 LSA 时,不会进行路由计算 。
- 非骨干区域形成的 3 类 LSA 在传递给另一个非骨干区域时必须经过骨干区域中转。
- 在 MPLS 中的防环机制
- 当绑定到 VRF 的 OSPF 进程在收到邻居发送的三类 LSA 时不会计算路由。
- 关闭该防环机制的命令:Router(config-router)#capability vrf-lite
- 查看 3 类 LSA 的命令:Router#show ip ospf database summary
- 4 类 : 汇总边界路由器 LSA (常用)
- 产生的路由器 : ASBR 所在区域内的 ABR 。
- 扩散范围 : 除了 ASBR 所在区域外的其它区域 。
- 主要包含信息 : ASBR 路由器的 ID 、 该 ABR 到达 ASBR 的度量值 。
- 作用: 告诉其它区域内的路由器通过该 ABR 可到达 ASBR 及该 ABR 到达 ASBR 的度量值 。
- 一些特征
- LSID : ASBR 所在区域内 ABR 的路由器 ID 。
- Adv Router : 与 LSID 相同 。
- 当一条 4 类 LSA 跨越 ABR 时会修改 Adv Router 为当前被跨越 ABR 自身的路由器 ID (相应的 度量值也会被修改 )。
- 查看 4 类 LSA 的命令:Router#show ip ospf database asbr-summary
- 5 类 : AS 外部 LSA (常用)
- 产生的路由器 : ASBR 。
- 扩散范围 : 整个 AS 。
- 主要包含信息 : 重分发进 OSPF 的路由条目 ( 不包含拓扑信息 ,可 汇总/聚合 ,一个路由条目对应一个 LSA)。
- 作用:向 AS 内通告 重分发的路由条目 。
- 一些特征
- LSID : 外部路由的前缀 。
- Adv Router : ASBR 的路由器 ID 。
- 当一条 5 类 LSA 跨越 ABR 时 Adv Router 不会被修改 ( 需要 4 类 LSA 或 Forward Address 辅助 才能计算路由)。
- 如果路由器 只收到 5 类 LSA ,那么它只能加入到 LSDB 中但并 不能计算路由 (包含 Forward Address 的除外)。
- 支持使用 tag 进行路由标记。
- tag 的默认值为 0。
- 查看 5 类 LSA 的命令:Router#show ip ospf database external
- 6 类:组播 LSA
- MOSPF 专用。
- 仅通过 6 类 LSA 不能产生组播分发树。
- 7 类 : NSSA LSA (常用)
- 产生的路由器 : NSSA 区域中的 ASBR 。
- 扩散范围 : 该 NSSA 区域内的所有路由器 。
- 一些特征
- 特殊的 5 类 LSA 。
- 只存在于 NSSA 区域中 。
- 扩散出 NSSA 区域时必须由 ABR 转换为 5 类 LSA 。
- 查看 7 类 LSA 的命令:Router#show ip ospf database nssa-external
- 1 类 : 路由器 LSA (常用)
- LSA 的 三元组 ( 唯一标识一个 LSA ):LSA 的名字( LSID )、通告的路由器( Adv Router )、 LSA 的类型 。
- 1、2 类 LSA 包含拓扑信息。
- 包含 路由器 ID 、 运行 OSPF 的接口及网络 、 接口连接了哪些邻居 、 接口的地址 等。
- LSA 存放在路由器的 LSDB (俗称 拓扑表 )中。
- OSPF 收敛完成 的标志: 每台路由器 ( 同一区域 内) 的 LSDB 都一致 。
- 只有路由器在 相同区域 中,LSDB 才能保持一致。
- LSA 有 老化计时器 ,默认为 60min , 正向计时 。计时器 超时之后 LSA 将自动被删除 。
- LSA 可 原封不动地发送多跳 ( 扩散泛洪传递 )。
- 仅限 同一区域 。
- 距离矢量协议中 的路由条目 每传递一跳都会改变 。
- LSA 的 防环机制
- 当一台路由器收到 LSA 之后,若 LSDB 中没有 ,则 接收并回复 LSAck ,然后 泛洪给其它邻居 ;
- 若 LSDB 中有 ,则 比较 LSA 的新旧程度 。
- 先比序列号,大的新;再比老化计时器,小的新,相差小于 15min 视为一致;最后比校验和,大的新)。
- 若 本地的 LSA 比接收到的 LSA 旧 ,则 接收并回复 LSAck ,然后 泛洪给其它邻居 ;
- 若 本地的 LSA 与接收到的 LSA 新旧程度相同 ,则 丢弃收到的 LSA ;
- 若 本地的 LSA 比接收到的 LSA 新 ,则 丢弃收到的 LSA ,然后 反向通告本地的 LSA 。
- LSA 的 序列号
- 线性 空间: 0x80000001 (负数) ~0x7FFFFFFF (正数)
- 每 新生成一个 LSA 序列号 +1 。
- 当 LSA 的 序列号达到最大值 时, 新的 LSA 的序列号将会被重置 。这就导致了 新的 LSA 的序列号比旧的 LSA 小 ,邻居不接收反而会 反向通告旧的 LSA 。这时就需要等到 最大序列号的LSA 的老化计时器超时 之后才能恢复正常。
- 解决方案:当 LSA 的序列号 接近最大值时 ,LSA 的 老化计时器将会缩短 ,以便及时重置全部 LSA 的序列号。
- LSDB 过载保护
- 思科专有。
- 可限制接收 LSA 的数目,超过之后自动 Down 邻居。当 Down 邻居超过一定次数后,不再自动建立邻居。
- 可防止低性能路由器在 OSPF 上消耗过多资源。
- 路由器自身产生的 LSA 不耗费资源。
- 基本配置命令
- Router(config-router)#max-lsa <最大 LSA 数目>
- OSPF 度量值
- 度量值 = 参考带宽 (bps) / 接口带宽 (bps)
- 默认参考带宽为 100,000,000 bps ( 100 Mbps )
- 取 控制层面路由流向的所有入接口 的带宽。
- 修改接口的带宽 不会影响 从该接口 发出路由条目的带宽 。
- 整条链路的度量值 等于 每条链路的度量值之和 ( 分段 计算)。
- 由 DR 去往 同一网段中其他路由器 的度量值为 。
- 修改参考带宽的命令
- Router(config-router)#auto-cost reference-bandwidth <带宽值(Mbps)>
- 参考带宽不一致不会影响邻居的建立。
- Router(config-router)#auto-cost reference-bandwidth <带宽值(Mbps)>
- 修改接口带宽的命令
- Router(config-if)#bandwidth <带宽值(Kbps)>
- 直接修改接口度量值的命令
- Router(config-if)#ip ospf cost <度量值>
- 度量值 = 参考带宽 (bps) / 接口带宽 (bps)
- OSPF 的 LSA
-
- SPF 矢量图
- 包含元素
- 树干 / 树枝 :基于 1 (Point-to-Point、Transit、Virtual、Stub 链路) 、2 类 LSA 形成。
- 树叶 :基于 3、4、5、7 类 LSA 形成。
- 基本元素画法
- 包含元素
- SPF 矢量图
-
- SPF 矢量图画法原则
- 先画 Point-to-Point、Transit、Virtual 链路,再画 Stub 链路,最后挂上相应的路由条目。
- Point-to-Point、Transit、Virtual 链路先画度量值小的那节。
- 每台路由器 只会画单向路径 。
- 3、5 类 LSA 产生的路由条目挂在本区域的 ABR 上。
- OSPF 的 路由类型
- O : 区域内路由 (通过 1、2 类 LSA 获取)。
- O IA : 区域间路由 (通过 3 类 LSA 获取)。
- O E1 : 重分发进 OSPF 的路由 (通过 4、5 类 LSA 获取),且 度量值在路由条目传递过程中会累加 。
- 如果同时收到多条相同目的地的 O E1 路由,直接 比较度量值 ,谁小谁加表。
- 如果 既关注内部开销 , 又关注外部开销 ,那么在重分发时可以使用这类路由。
- O E2 : 重分发进 OSPF 的路由 (通过 4、5 类 LSA 获取),且 度量值在路由条目传递过程中保持不变 。
- 如果同时收到多条相同目的地的 O E2 路由, 先比较外部度量值 ( Seed Metric ), 再比较内部度量值 (本地 去往 ASBR 的度量值 )。谁小谁加表。
- 如果 只关注外部开销 ,那么在重分发时可以使用这类路由。
- O N1 : NSSA 区域中重分发进 OSPF 的路由 (通过 7 类 LSA 获取)。其他特性 同 O E1 。
- O N2 : NSSA 区域中重分发进 OSPF 的路由 (通过 7 类 LSA 获取)。其他特性 同 O E2 。
- 各路由类型的优先级: O > O IA > O E1 = O N1 > O E2 = O N2
- OSPF 默认所有类型的路由 管理距离 均为 110 。
- 修改 OSPF 管理距离的命令
- Router(config-router)#distance ospf inter-area <区域间路由管理距离> intra-area <区域内路由管理距离> external <外部路由管理距离>
- 修改 OSPF 管理距离的命令
- OSPF 支持修改 某条内部或外部路由 的管理距离,也支持修改 由某台路由器产生 的所有路由条目的管理距离。
- SPF 矢量图画法原则
-
- OSPF 路由 重分发
- 重分发进 OSPF 的路由(包含通告的默认路由)可设置一个 默认度量值 ( Seed Metric )。
- BGP 重分发进 OSPF 的 Seed Metric 为 1 , 其它路由协议 为 20 。
- 设定 Seed Metric 的命令
- Router(config-router)#area <区域号> default-cost <度量值>
- 默认路由 在 无法重分发 进 OSPF。
- 重分发命令
- 标准重分发:Router(config-router)#redistribute <路由协议> [路由协议的参数] [metric-type 1|2] [subnets] [nssa-only] [metric <度量值>]
- metric-type 用于指定度量值的计算方式(见上面的 O E1、O E2 路由类型)。
- subnets 用于开启子网路由宣告(OSPF 默认 只重分发主类路由 )。
- nssa-only 用于 NSSA 区域的 ABR 上,只把重分发的路由下放到 NSSA 区域中。
- metric 用于指定该路由条目的 Seed Metric。
- 以 5 类 LSA 通告路由器为默认网关:Router(config-router)#default-information originate [always]
- 后面加 always 可以在路由器 没有配置默认网关 的情况下通告。但需要注意的是,加了 always 之后路由器 将不会把别人通告 (从 OSPF) 的默认路由加入到路由表 中。
- 也可使用 route-map 工具为通告的默认路由添加某些参数。
- 标准重分发:Router(config-router)#redistribute <路由协议> [路由协议的参数] [metric-type 1|2] [subnets] [nssa-only] [metric <度量值>]
- OSPF 重分发进其它路由协议 默认 不会重分发外部路由 。如果需要重分发外部路由的话可以在重分发命令后面加上 match internal external。
- Forward Address ( FA )
- 5、7 类 LSA 特有的字段。
- 用来 强行指定外部路由下一跳的方向 ,可 防止非对称路由 、 次优路径 或 路由环路 。
- 当 5 类 LSA 中包含 FA 时 不用 4 类 LSA 就可计算路由。
- 5 类 LSA 的 FA 为 重分发进 OSPF 的路由条目本身 的 下一跳地址 。
- 7 类 LSA 一定有 FA 。
- 5 类 LSA 需要满足以下条件才能产生 FA。
- ASBR 宣告重分发进 OSPF 的路由条目的下一跳接口进入 OSPF ,且该接口 不能是被动接口 。
- ASBR 对于该重分发进 OSPF 的路由条目的下一跳接口不能是 Point-to-Point、Point-to-MultiPoint 类型 。
- 7 类 LSA 的 FA 为 NSSA 中的 ASBR 的最大环回口地址 ( 没有环回口 地址则为 最大接口地址 )。
- 当 7 类 LSA 转换为 5 类 LSA 之后, FA 默认保持不变 。
- 7 类 LSA 转 5 类 LSA 时不保留 FA 的命令(只能在转换者 ABR 上执行)
- Router(config-router)#area <区域号> nssa translate type7 suppress-fa
- 7 类 LSA 转 5 类 LSA 时如果 不保留 FA ,那么当 7 类 LSA 所对应的路由条目是 O N1 类型的话,转换后的 O E1 类型的路由条目 NSSA 区域内的那段内部度量值 将设为 。
- FA 必须通过 OSPF 路由可达 ( 1、2、3 类 LSA ),否则该外部路由将只会被加入 LSDB。
- 去往 FA 的 静态路由可以覆盖 OSPF 路由 ,这会导致 FA 不是通过 OSPF 可达的。
- OSPF 路由 重分发
-
- Virtual Link 是在 一个区域内 的 虚拟点到点 链路。
- Virtual Link 的用途
- 分离的 Area 0 相连接 (例如 Area 0 <--> Area 1 <--> Area 0)
- 远离 Area 0 的区域连接 (例如 Area 0 <--> Area 1 <--> Area 2)
- 没有 Area 0 的区域连接 (只是 ABR 的环回口宣告进 Area 0(伪 ABR),例如 Area 1 <--> Area 2 <--> Area 3)
- 只有在 相同区域 内的两台路由器才能使用 Virtual Link。
- Virtual Link 会造成 OSPF 的星型拓扑被破坏 , 大大增加出现环路的可能性 。因此 不应该长时间使用 。
- Virtual Link 做 区域间汇总 可能会出现 环路 。
- 通过 Virtual Link 传递的路由条目的出接口 为 去往 Virtual Link 对端地址的树形结构出接口 ( 物理接口 )。
- 思科在 Virtual Link 上面默认 不会发送 Hello 。
- 该特性称为 Hello 抑制 。
- 思科通过 Virtual Link 获取的 LSA 永不过期 (不用定时泛洪)。
- 该特性称为 DNA 。
- 该特性可以减少 LSA 泛洪的数量。
- 配置命令
- Router(config-router)#area <区域号> virtual-link <目的路由器 ID>
- <目的路由器 ID> 需要两台路由器 互指 。
- Router(config-router)#area <区域号> virtual-link <目的路由器 ID>
- 查看 Virtual Link 状态的命令
- Router#show ip ospf virtual-links
- OSPF 路由 汇总/聚合
- 区域间 路由汇总/聚合
- 做完汇总之后,路由器会先 抑制所有明细路由 ,再 产生汇总路由发送给其他区域 。
- 如果在汇总命令后面加上了 not-advertise 关键字,则既抑制明细路由,又不发送汇总路由(等于做了路由过滤)。
- 使用 filter-list 工具调用前缀列表可进行区域间的路由过滤。
- 汇总路由的度量值 取 所有明细路由的最小度量值 。
- 配置命令
- Router(config-router)#area <区域号> range <汇总网段> <子网掩码>
- 外部 路由汇总/聚合
- 由 ASBR 进行。
- 配置命令
- Router(config-router)#summary-address <汇总网段> <子网掩码>
- 如果在汇总命令后面加上了 not-advertise 关键字,则既抑制明细路由,又不发送汇总路由(等于做了路由过滤)。
- 区域间 路由汇总/聚合
-
- OSPF 认证级别
- 0 级: 不认证
- 1 级: 明文认证
- 2 级: HMAC 密文认证
- HMAC 值 = MD5(报文 + 密码)
- OSPF 认证范围
- 接口级认证
- 先设定认证密码,再设定认证方式。
- 配置命令
- 设定密文认证密码:Router(config-if)#ip ospf message-digest-key <密码 ID> md5 <密码>
- 设定明文认证密码:Router(config-if)#ip ospf authentication-key <密码>
- 设定密文认证方式:Router(config-if)#ip ospf authentication message-digest
- 设定明文认证方式:Router(config-if)#ip ospf authentication
- 密文认证邻居两边的 <密码 ID> 和 <密码> 必须 一致 。
- 区域级认证 (只支持 HMAC 密文认证)
- 依旧要在 每个接口上设置认证密码 。
- 配置命令
- Router(config-router)#area <区域号> authentication message-digest
- Virtual Link 认证
- 配置命令
- 密文认证:Router(config-router)#area <区域号> virtual-link <目的路由器 ID> authentication message-digest message-digest-key <密码 ID> md5 <密码>
- 明文认证:Router(config-router)#area <区域号> virtual-link <目的路由器 ID> authentication authentication-key <密码>
- 在思科路由器上由于存在 Hello 抑制 特性,在 已经建立完成的 Virtual Link 上配置认证需要重置 OSPF 进程才能生效 。
- 配置命令
- 接口级认证
- 由 1、2 类 LSA 生成的路由条目 只能做 本地抑制 。
- OSPF 调用前缀列表进行路由过滤的命令
- Router(config-router)#area <区域号> filter-list prefix <前缀列表名称> in|out
- OSPF 认证级别
-
- 目前 用于 IPv4 路由的 OSPF 版本为 v2 。
- OSPFv2 最大的缺陷就是 将某些重要 LSA 中的路由信息和拓扑信息绑定起来 ,这导致了 OSPFv2 根本无法支持 IPv6。不过后来的 OSPFv3 也有这种缺陷,导致最初的 OSPFv3 也只支持 IPv6。后来思科改进了 OSPFv3(称为 二代 OSPFv3 ),把 LSA 中的拓扑信息和路由信息剥离开来(LSA 类型可自定义),才解决了这个问题(增加了协议的可扩展性)。但改进后的 OSPFv3 依然不能和OSPFv2 互操作。
- 思科路由器通过 OSPFv3 来为 IPv4 做路由的命令
- Router(config)#ipv6 unicast-routing % 开启 IPv6 路由功能
- Router(config)#router ospfv3 <进程号>
- Router(config-router)#address-family ipv4 unicast % 进入 IPv4 单播地址簇配置模式
- Router(config)#interface <接口名>
- Router(config-if)#ipv6 enable % 开启接口的 IPv6 功能
- Router(config-if)#ospfv3 <进程号> ipv4 area <区域号>
-
- 思科路由器通过 OSPFv3 来为 IPv6 做路由的命令
- Router(config)#ipv6 unicast-routing % 开启 IPv6 路由功能
- Router(config)#router ospfv3 <进程号>
- Router(config-router)#address-family ipv6 unicast % 进入 IPv6 单播地址簇配置模式
- Router(config-router-af)#router-id <路由器 ID> % 如果路由器没有 IPv4 地址,必须手动指定一个路由器 ID
- Router(config)#interface <接口名>
- Router(config-if)#ospfv3 <进程号> ipv6 area <区域号>
- OSPFv3 的 LSA 简介
- 1、2 类 LSA
- 和 OSPFv2 的 1、2 类 LSA 相比 少了与网络相关的参数 。
- 没有 接口 IP、掩码、度量值等 形成路由条目的必备参数 。
- 只能形成拓扑 , 不能形成路由 。
- 8 类 LSA : 链路 LSA
- 只能 在本地链路中发送 。
- 配合 1、2 类 LSA 可形成直连网络 Link Local 地址的路由条目 。
- 9 类 LSA : 区域内前缀 LSA
- 携带 AGUA 地址及掩码 。
- 在为 IPv4 做路由时将携带 IPv4 地址及掩码。
- 配合 1、2 类 LSA 可形成 AGUA 地址的路由条目 。
- 在为 IPv4 做路由时可配合 1、2 类 LSA 形成 IPv4 路由条目。
- 携带 AGUA 地址及掩码 。
- 1、2 类 LSA
- OSPFv3 先形成拓扑 , 后计算路由 。
- 思科路由器通过 OSPFv3 来为 IPv6 做路由的命令