本节介绍ospf路由选择协议 为链路状态 路由选择协议
一 分类
open shortest path first 开放最短路优先 公有协议
单区域的ospf实施 运行在一个自治系统之内 igp 与eigrp是同一个级别 不建议在多个园区网之间部署ospf
算法1 spf 最短路优先
2 迪杰斯特拉
链路状态协议 算法: 传递拓扑连接信息 共享信息 放入lsdb的链路状态数据库 spf算法 将路由器自身作为树根
来计算去往所有非直连网段有哪些路径 按照开销的大小来判断哪条路径较好 哪条差 并将
开销最低的路径加入到路由表中 形成路由条目 转发数据层面的流量
一定不会出现环路 是链路状态选路协议的优点
无类协议
与ripv2和eigrp的区别
1.距离协议执行自动汇总是我们不愿意看的; 而ospf的链路状态协议 由于不传路由信息 所以没有路由汇总
2.是否支持cidr 路由聚合 能否传递超网路由 与eigrp一样 ospf支持路由聚合
封装报文格式
layer 2 | ip | ospf | fcs
1.ospf中有可靠传输机制 确认重传机制
2.有延迟或丢包时 可以优先传输 type of service tos 用来实现QOS服务质量 优先级
二 报文 五种
1.hello
2.dbd
3.lsr
4.lsu
5.lsack
与eigrp的区别
建立邻居关系 建立完成之后 路由器之间传递lsa 放入lsdb 三张表与eigrp一致
有细微的区别 追踪路由状态 ospf 既基于链路状态维护邻接关系 又基于lsa本身的状态来维护
所以有两种计时器
a 一种用来描述多久没有收到hello
10s 40s(holdtime) 30s 120s
网络类型 逻辑分为6种 (ccnp介绍)
loopback
point-to-point 典型为串行线路
broadcast 以太网
point-to -multipoint
point-to-multipoint non-boradcst
non-broadcast 非广播的多路访问
b lsa 信息 路由互传 (与eigrp的区别)
计时器为60min 3600s lsa的老化计时器
如果没有更新 就会将其删除 在lsdb中将lsa
一台路由器 始发lsa之后 每30min钟一次 再次泛洪
c eigrp中的拓扑表放置路由条目 没有拓扑信息
ospf中的拓扑表lsdb放置的都是lsa 既标识路由信息 又有拓扑信息
d ospf传递lsa是泛洪到所有的ospf路由器
eigrp只是传递给邻居
e 传递的报文的区别
EIGRP 路由器a b c
a>b>c 路由条目流向 邻居之间传送的路由 度量值和出站接口 下一跳 每个路由器传送都会改变
ospf中的lsa 仅仅描述网络如何连接 全部为客观信息 所以在路由器传递时不会改变 路由器a发送的lsa 与路由器c所接收的完全一致 整网所有路由器中的lsdb中所放的lsa信息完全一致 才能根据相同的拓 扑地图计算去往每个非直连网段的最优路由 用spf算法
ospf的层级示例
多区域部署 ospf 划分区域基于路由器接口
2-3台等少量的路由器 可以规划为一个区域 部署ospf 推荐用rip
1.骨干区域 叫area 0 又叫传输区域(控制层面) 非骨干(常规)区域与此挂靠(目的是优化和防环) 中到大型网络中 如果 需要多个区域骨干区域 有且只有一个
2.常规区域编号从1-42亿 可以设置成一下四种 默认是常规区
stub 区域
totally stub 区域
nssa 区域
totally nssa 区域
3.多区域设计 ospf
区域与路由器的关系
a 基于路由器本身的规划 只能属于一个区域
b 基于路由器接口的规划 可以属于多个区域 ospf
图中的ab属于主干区域路由器
fgh属于常规区域1 2 3
c d e 的下面的接口又属于1 2 3
cde的上面的接口又属于主干区域
c 基于路由器本身的协议 IS-FS
d A B骨干路由器
F G H 非骨干的内部路由器
C D E-------ABR area border router 区域边界路由器 有的接口必须被宣告进主干区域 有的接口被宣告进常规 区域
4.路由条目
标记O 区域内路由
O ia 区域间路由 由abr路由器通告
O E1 1类外部路由 路由重分发 强行引入到ospf 例如从eigrp域引入到ospf域
O E2 2类外部路由
5.多区域的用处
a 可以减少路由表条目 减少lsdb中lsa的数量
b 当拓扑变更时 划分多个区域 可以限制变更影响的范围 仅影响单个区域内部
c 减少路由表条目数量的一种方式 是路由汇总 一组ospf的路由器拥有所有组内路由器的lsa信息 并非由邻居通 告 全部链接细节均了解 所以在一个区域内是无法实现路由汇总的
但对于其他区域的链接是不清楚的
6.LSA 分为 1 2 3 4 5 7类
a 比较重要的是1类和2类 减少条目
区域内的所有路由器都会生成1和2类的lsa信息 lsa信息报文 边界就是c d e边界路由器 非直连网段路由是根据计算得 来的
区域间 例如c将area 0的路由传给f路由器 此种lsa信息就是3类lsa 即area0的路由条目形成好由c传送给f 这和上 面是不同的 并非f用spf算法计算得来的 对于这类路由条目是可以进行路由汇总的 此为域间汇总 也只 有它才能在ospf中汇总
总结 区域内不能汇总 区域间可以汇总
b 域间汇总 拓扑变化影响域内 例如f后有4个连续的网段 c路由器会对这4个网段做一汇总路由 无论这4个网段 的路由器哪个down掉 都不会影响c中的这个汇总路由条目 除非 4个路由器都关闭 才将汇总路由删除
一般情况下 ospf部署的网络属于星型网络 物理属性杜绝环路的发生
区域内不会出现环路
多个区域组合成的网络有可能会出现环路 所以需要所有的常规区域都要链接到aera0 主干区域上 非骨干区域互相通信 需要主干区域进行中转
上图中分成两个大的独立的自治区域 0为主干 1-5为常规区域 上面的为自治区a
5没有直连到0主干区域 自治区a的路由信息不会传送的5 5中的路由信息也不会传送到自治区a
这种情况也可能会存在 当两个园区网络做合并时 需要割接 会用到图中的拓扑连接 做vpn
远离骨干区域的非骨干区域的出现 需要ospf中的virtual-link工具进行逻辑的区域修复 ospf虚拟链路 仅仅是临时解 决方案 需要进一步优化
OSPF 细节
一 邻居关系 hello数据包
邻居建立分为两类
1.eigrp无状态化的邻居 建立不需要条件 down和up 两个状态 收到hello就up 未收到就down
2.ospf是复杂的有状态化的邻居 需要条件 按层级建立
7级邻接关系状态
down
init
two-way ---neighbor 邻居 只经过hello报文的交互 最多能到这一层级 未交互过lsa
exstart
exchange
loading
full ---adjacency 邻接
只有到达full层级的邻居关系后 ospf域间的路由器之间才能传各种报文
只有当所有的 hello dbd lsr lsu lsack 这ospf五类报文都交互完成之后 两台路由器才能够到达最下面 的full层级的邻接关系 所有路由器的lsdb已经同步 之后才能传送各种各样的报文
3. hello报文需要满足的条件为上图中*号的条件
hello时间和dead时间 区域id 身份验证口令 末节区域标志
所有这四条都一致 才能建成邻居的关系
修改dead时间不影响hello的时间 但是hello影响dead
4.其中除主干区域和常规区域外的四个特殊区域stub totally stub nssa totally nssa叫做末节区域标 志 互为邻居的末节区域标志需要一致 才能建立邻居成功
6.不同网络的邻居建立
ethernet MA 多路 需要选择dr指定路由器/bdr备份指定路由器
邻居子网掩码必须一致
但是serial p2p 掩码不一致同样可以建立 不受约束
7.接口的ospf网络类型可以修改 可能会导致邻居关系down掉
链路两端的接口的ospf网络类型一致 才能建立邻居成功
一种特例情况除外 一端为p2p 另一端为p2mp 可以建立邻居
8.exstart 会交换dbd报文 报文中会包含接口的mtu参数需要一致 选择主从关系
ospf的进程号只具有本地意义 两台邻居路由器 进程号可以不同
hello报文的其他信息
路由器id router -id命令手工指定 必须定义 点分十进制的值 域内任何一个路由器的id值必须唯一
自动指定 1.loopback环回口自动up up 作为id 一般情况下用路由器的loopback模拟pc机
2.如果没有环回口 则选择物理接口中所有up up的最大的ip地址作为id
建议手工指定 1. 可控 2. 如果自动指定之后需要手工修改id 则需要重新启动路由器ospf进程
邻居字段 通过接口接收到谁发送的hello信息 内容为路由器id
优先级 a p2p网络建邻居会顺利的从down一直到full 称为普通的建邻居
b 在以太网中 建邻居需要在two-way 暂停 需要在ma网段接口中选举 出指定路由器dr和备份指定 路由器bdr 先比较接口的ospf优先级的值 取值范围为0-255 默认值为1 高为dr 次高为bdr
优先级一样 则比较路由器id 高为dr 次高为bdr
选举时间称为wait interval 是hello时间的四倍
dr ip地址和bdr ip地址
在12.4老版本的ios中
ospf v2 针对ipv4
ospf v3 针对ipv6
在15.x的ios版本中可以在ospf v3中可以在同一个进程中同时启用ipv4和ipv6 集成度更高
ospf 针对环回口
v2和v3版本都将环回口理解为一个末节网络 代表只有一个节点存在 所以环回口的掩码无论配置多少 默认情况 都会使其在路由表的条目掩码为32位 可以防止路由黑洞 但有些情况 例如mpr需要路由信息不能被串改时 会造成问题
如果想与设置的值一致 需要将环回口个ospf网络类型修改为p2p类型
修改方法
r1#int loopback0
#ip ospf network point-to-point 旧版本中的命令
#ospfv3 network point-to-point 新版本中的命令
二 SPF算法
cost开销就是metric度量值 越大 路径越差 越小 越好
计算基于每个链路 分别计算 所有开销加在一起是完整路径的总开销 再次比较 如果度量值相同 则同时加入到路 由表中
ospf只支持等价负载均衡
默认为10的8次方/BW 单位为b/s 百兆比带宽 当前为千兆或更高 所以修改分子的值为10的10次方/BW
三 ospf的配置
ios分为12.4和15.x的两种不同的配置命令 15.x的版本需要设置router-id
举例:区域0=0.0.0.0
1=0.0.0.1
255=0.0.0.255
256=0.0.1.0
宣告方式:
方式1
#router ospf 110
#router-id 2.2.2.2
#network 12.1.1.1.2 0.0.0.0 area 0 或者 0.0.0.0代替前面的0
方式2 进入接口
#interface loopback0
#ip ospf 110 area 0.0.0.0
查看接口宣告信息
#show ip ospf interface brief
实例1
命令
r2 #router ospf 110 设置进程号
#router-id 2.2.2.2 设置路由器id
#network 24.1.1.2 0.0.0.0 area 0.0.0.0
#network 12.1.1.2 0.0.0.0 area 0.0.0.0
#int loopback 0
#ip ospf 110 area 0.0.0.0
验证
#show ip ospf interface brief
15.x新版ios版本的命令
r1 #ipv6 unicast-routing 在路由器上开启ipv6版本的单播路由选择协议的功能 和普通的ipv4的 IP routing 命令一样
#int serial 1/0
#IPv6 enable 在接口上开启ipv6的可用功能
#end
#router ospfv3 110
#address-family ipv4 unicast 生命协议簇 使用ipv4的单播
#router-id 1.1.1.1 然后再 设置路由器id
#exit
#int serial 1/0
#ospfv3 110 ipv4 area 0.0.0.0 宣告
#int serial 1/1
#ospfv3 110 ipv4 area 0.0.0.0
#int loopback 0
#ipv6 enable
#ospfv3 110 ipv4 area 0.0.0.0
验证
#show ospfv3 int brief
r3 #ipv6 unicast-routing
#int se1/0
#ipv6 enable
#int lo0
#ipv6 enable
#int fa 0/1
#ipv6 enable 以上需要在r3的全局配置中开启ipv6的支持
#router ospfv3 110
#address-family ipv4 unicast
#router-id 3.3.3.3
#int ser1/0
#ospfv3 110 ipv4 area 0.0.0.0
#int fa 0/1
#ospfv3 110 ipv4 area 0.0.0.0
r1中查看邻居和接口和路由
老命令show ip ospf neighbor show IP ospf interface brief show ip route ospf
新命令show ospfv3 neighbor show ospfv3 interface brief show ip route ospfv3
查看接口的具体路由信息
#show ospfv3 interface serial 1/1
一个接口的多个ospv进程宣告 以先宣告的ospf协议为准 后宣告的不工作 int serial 1/1 先宣告ospfv2 后宣告ospfv3 以ospfv2为准
修改hello dead wait时间
#int serial 1/1
#ospfv3 hello-interval xx
#ospfv3 dead-interval xx
#ospfv3 wait-interval xx
查看全局
#show ospfv3
排错 简单的方式
1.show run | section router ospf
2.show run int ser1/1
实验2
手工汇总 修改路径度量值 重分发及被动接口
利用实验1中的图
条件 r4和r6属于area 1
其他属于area0
其中r2是abr
r6 网段192.168.8.0/24
r4网段192.168.9.0/24
在r2上进行路由聚合 192.168.8.0/23
a 注意 路由器r2在进程中做路由汇总(聚合) 而不是接口上
新版 #router ospfv3 110
#address-family ipv4 unicast
#area 1 range 192.168.8.0 255.255.254.0
老版#router ospf110
#area1 range 192.168.8.0 255.255.254.0
形成的路由条目前面会标记 O IA 区域间路由的聚合 supernet
b 修改度量值
r2拥有35网段的路由
控制层面流向的入接口 与数据流向相反 数据从r2到r5
所以入接口是先从r3的fa0/1 到r1的ser1/1 再到r2的ser1/1
10的8次方除以以上每个接口的带宽 最后累加
10的8次方/百兆 +10的8次方/1.54m+10的8次方/1.54m
=1+64+64=129
修改的方法
1.直接在接口修改
#conf t
#int serial1/1
#bandwidth xxx 直接修改成想要的值
2.进入进程修改度量值 建议
#router ospfv3 110
#address-family ipv4 unicast
#auto-cost reference-bandwidth xxx 设置的值为需要的值
c ospf 重分发
#int range fa0/0-1
#no ospfv3 ipv4 area 0.0.0.1
#exit
#route-map 全局
#route-map connect permit 10
#match int fa 0/0 fa0/1
#exit
#router ospfv3 110
#address-family ipv4 Unicast
#redistribute connected route-map connect 新版如此 如果是老版本 需要在后面加上subnets
路由条目标志e2
做了重分发 r2叫做ASBR 自制系统边界路由器
汇总域外的路由
进入110进程
#address-family ipv4 unicast
#summary-prefix(老版本用summary-address) 192.168.8.0. 255.255.254.0
d 被动接口的声明
#router ospfv3 110
#address-family ipv4 unicast
#passive-interface fa0/1
#passive-interface fa0/0
e 组播地址
224.0.0.5 常规接口 默认监听地址
224.0.0.6 MA网段中只有在DR/BDR支持