ospf 协议是网络层协议

此篇文章适合有一定网络基础的人

ospf 协议最多应用在企业网络中,针对于运营商网络并不是特别的适用,端口号为 89 通过 IP 进行数据的转发

ospf 基础知识

  • ospf 的路由更新通过组播地址:224.0.0.5 / 224.0.0.6 进行更新

  • spf 算法是 ospf 路由协议的基础,spf 算法有时也被称为 Dijkstra (迪杰斯特拉)算法

  • ospf 协议的普及率要比 is-is 协议的普及率高

  • ospf 协议的内部路由优先级为 10 ,外部路由优先级为 150 ,开销值为 1

  • ospf 中修改带宽的参考值命令:

    ospf 的度量值计算:参考带宽除以实际带宽

  • Stub 网络没有邻居(末节网络),Transnet 网络有邻居(记录出去的开销)

  • ospf 协议在域内是链路状态协议,在域间是距离矢量协议

    因为 ABR 会把一类和二类的 LSA 一同转换为三类的 LSA 传递出去

  • ospf 的进程号只具有本地意义,如果只有一个区域,那么任何区域都可以作为骨干区域

路由协议通用小知识

  • ospf 可以直接配置负载均衡

    配置通过多种路径进行转发报文

  • 不配置等价路由的情况下影响路由选路

ospf 中的网络类型

在 ospf 协议中一共有四种网络类型:

  • 广播网络(broadcast)

  • 点到点网络(P2P)

  • 点到多点网络类型(P2MP)

  • NBMA 网络

ospf 的工作流程

1、邻居建立

  • DOWN 状态习互相发送 Hello 报文,双方在接收到报文之后会进入 Init 状态

  • Init 状态习会发送带有邻居 ID 的 hello 报文,对方会进入 2-way 状态,之后邻居也会向本设备发送同样的带有邻居 ID 的 hello 报文----此状态经历完成之后,标志着邻居建立完成

  • 对于不支持组播网络的网络需要进行手动指定邻居

  • ospf 支持手动指定邻居,通过单播的方式

  • 帧中继网络建立邻居会进入 Attempt 状态尝试唤醒状态

2、同步链路状态数据库

Exstart 状态,发送 DD 报文,确认主从

Exstart 状态里面有一些序列号:

  • x 为序列号
  • I 表示为第一个数据包
  • MS 确认是否为 Master (主从关系)
  • M 表示后面还有其他的数据包

主从关系的选举是根据谁的 RID 大的为主,选举主从是为了隐式确认(主从序列号)

当 ospf 开启了 MTU 检测之后,当 MTU 超过 1500 之后邻居的状态会卡在 Exstart 状态

Exchange 状态

Exchange 状态,第一次发送的 DD 里面携带各自的序列号,选举主从之后会响应主设备的序列号,之后开始对比 LSDB 数据库进行摘要信息的交互,此状态可以直接进入 Full 状态

Loading 状态

经过 exchange 状态的对比,双方都会知道自己缺少什么信息,在 Loading 状态就会向对方请求回复以及进行确认消息

LSR -- 请求

LSU -- 回复--最重要的 LSA 就存在于 LSU 报文中

LSACK -- 确认--当对方之后收到路由信息之后会发送一个确认收到的信息

3、计算最优路由

执行 spf 算法进行计算最短路径树

ospf 邻居状态机

  • Down:在此状态下的路由器不会从邻居收到任何的信息。
  • Init:发送 hello 报文,此状态发送的 hello 报文是单向的 hello 报文。
  • Attempt:此状态只存在于 NBMA 环境中手动配置邻居的情况(一般情况下见不到此状态)。
  • 2-way:发送 hello 报文,此状态下邻居双发都发送过彼此的 hello 报文,此状态标志着邻居状态建立成功。
  • Exstart:此状态发送的 DD 报文是一个假的 DD 报文,主要是用来选举主从关系的报文。
  • Exchange:真的 DD 报文,发送 DD 报文用于告诉对方自己简要的 LSDB 摘要信息。
  • Loading状态:里面包含 LSR、LSU、LSACK LSU(里面包含的LSA),通过请求、发送信息和确认最后进入 Full 状态进行计算最短路径树。
  • Full:开始计算到各个节点的路由--标志着邻接关系的建立成功。

作者:Joker

最新文章

  1. 成就PHP高手的五个必由之路
  2. [nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)
  3. Object.prototype和Function.prototype一些常用方法
  4. Boost 安装
  5. 62. Unique Paths
  6. Java反射的理解
  7. [记录]关于vertical-align单/多选框与说明文字对齐效果
  8. Android-DataBinding入门1
  9. ng-if ng-show ng-hide区别(面试题)
  10. 新版MATERIAL DESIGN 官方动效指南(三)
  11. 分布式事务Hmily TCC源码--学习整合
  12. 初窥Java之二
  13. sqlite+ef+powertools
  14. aws linux主机root帐号登录
  15. git命令之git clone用法
  16. springboot面试题总结
  17. Python全栈-magedu-2018-笔记11
  18. SQL SERVER 2016研究一
  19. 使用BEEGO建立一个基本的API框架
  20. vim+ctags用法

热门文章

  1. RabbitMQ入门-5.6-课堂笔记-01
  2. Docker——容器数据卷
  3. office online在线预览服务与https的tls证书兼容问题
  4. vue学习过程总结(02)- 网上开源项目vue-element-admin的启动
  5. Vue中import和require的对比
  6. 在centos7上安装iptables防火墙
  7. 深入理解RPC—序列化
  8. MySQL 数据库作发布系统的存储,一天五万条以上的增量, 预计运维三年,怎么优化?
  9. @Required 注解 ?
  10. 在虚拟机里面安装mysql