OSPF协议基础(OSPF工作过程)

目录

  • OSPF基本工作原理
  • 邻居建立过程
    • Router ID
    • 发现并建立邻居 - Hello报文
    • OSPF邻居建立过程
  • 链路状态信息
    • 丰富的数据链路层支持能力
    • 网络类型 - P2P网络
    • 网络类型 - 广播型网络
    • 网络类型 - NBMA网络
    • 网络类型 - P2MP网络
    • OSPF的度量方式
  • 报文类型及作用
    • OSPF协议报文头部
    • OSPF报文类型
    • OSPF报文的功能需求
  • LSDB同步过程
    • OSPF邻居状态机
    • LSA头部
  • DR与BDR的选举及作用
    • DR与BDR作用
    • DR与BDR选举
    • 邻居与邻接关系

OSPF基本工作原理

邻居建立过程

Router ID

用于在自治系统中唯一标识一台运行OSPF的路由器,每台运行OSPF的路由器都有一个Router ID。

在这里插入图片描述

  • 企业网中的设备少则几台多则几十台甚至几百台,每台路由器都需要有一个唯一的ID用于标识自己。
  • Router ID是一个32位的无符号整数,其格式和IP地址的格式是一样的,Router ID选举规则如下:
    • 手动配置OSPF路由器的Router ID(通常建议手动配置);
    • 如果没有手动配置Router ID,则路由器使用Loopback接口中最大的IP地址作为Router ID;
    • 如果没有配置Loopback接口,则路由器使用物理接口中最大的IP地址作为Router ID。
  • OSPF的路由器Router ID重新配置后,可以通过重置OSPF进程来更新Router ID。

发现并建立邻居 - Hello报文

  • Hello报文的作用:
    • 邻居发现:自动发现邻居路由器。
    • 邻居建立:完成Hello报文中的参数协商,建立邻居关系。
    • 邻居保持:通过Keepalive机制,检测邻居运行状态。
      在这里插入图片描述
  • OSPF路由器之间在交换链路状态信息之前,首先需要彼此建立邻居关系,通过Hello报文实现。
    • OSPF协议通过Hello报文可以让互联的路由器间自动发现并建立邻居关系,为后续可达性信息的同步作准备。
    • 在形成邻居关系过程中,路由器通过Hello报文完成一些参数的协商。
    • 邻居关系建立后,周期性的Hello报文发送还可以实现邻居保持的功能,在一定时间内没有收到邻居的Hello报文,则会中断路由器间的OSPF邻居关系。

OSPF邻居建立过程

在这里插入图片描述

  • 状态含义:
    • Down:这是邻居的初始状态,表示没有从邻居收到任何信息。
    • Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己的Router ID不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。
    • 2-Way:在此状态下,路由器发现自己的Router ID存在于收到的Hello报文的邻居列表中,已确认可以双向通信。
  • 邻居建立过程如下:
    • RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2。当RTA启动OSPF后,RTA会发送第一个Hello报文。此报文中邻居列表为空,此时状态为Down,RTB收到RTA的这个Hello报文,状态置为Init。
    • RTB发送Hello报文,此报文中邻居列表为空,RTA收到RTB的Hello报文,状态置为Init。
    • RTB向RTA发送邻居列表为1.1.1.1的Hello报文,RTA在收到的Hello报文邻居列表中发现自己的Router ID,状态置为2-way。
    • RTA向RTB发送邻居列表为2.2.2.2的Hello报文,RTB在收到的Hello报文邻居列表中发现自己的Router ID,状态置为2-way。
  • 因为邻居都是未知的,所以Hello报文的目的IP地址不是某个特定的单播地址。邻居从无到有,OSPF采用组播的形式发送Hello报文(目的地址224.0.0.5)。对于不支持组播的网络,OSPF路由器如何发现邻居呢?

链路状态信息

链路信息主要包括:

  1. 链路的类型;
  2. 接口IP地址及掩码;
  3. 链路上所连接的邻居路由器;
  4. 链路的带宽(开销)。

在这里插入图片描述- 区别于RIP路由器之间交互的路由信息,OSPF路由器同步的是最原始的链路状态信息,而且对于邻居路由器发来的链路状态信息,仅作转发。最终所有路由器都将拥有一份相同且完整的原始链路状态信息。

  • 每台运行OSPF协议的路由器所描述的信息中都应该包括链路的类型、接口IP地址及掩码、链路上的邻居、链路的开销等信息。
  • 路由器只需要知道目的网络号/掩码、下一跳、开销(接口IP地址及掩码、链路上的邻居、链路的开销)即可,为什么要有链路的类型呢?

丰富的数据链路层支持能力

  • 数据链路层协议类型多种多样,工作机制也各不相同。
  • 为适配多种数据链路层协议,必须考虑各类链路层协议在组网时的应用场景。

在这里插入图片描述

网络类型 - P2P网络

在这里插入图片描述

  • OSPF划分了四种网络类型并以此来组成拓扑信息的一部分。
  • P2P网络连接了一对路由器,广播、组播数据包都可以转发。
  • P2P网络的例子:两台通过PPP(Point-to-Point Protocol)链路相连的路由器网络。

网络类型 - 广播型网络

在这里插入图片描述

  • 两台或两台以上的路由器通过共享介质互连。
  • 支持广播、组播。

网络类型 - NBMA网络

在这里插入图片描述

  • 两台或两台以上路由器通过VC互连。
  • 不支持广播、组播。

网络类型 - P2MP网络

在这里插入图片描述

  • 多个点到点网络的集合。
  • 支持广播、组播。

OSPF的度量方式

  • 某接口cost=参考带宽/实际带宽。
  • 更改cost的两种方式:
    • 直接在接口下配置;
    • 修改参考带宽(所有路由器都需要修改,确保选路一致性)。

在这里插入图片描述

  • OSPF在计算接口的cost时,cost=参考带宽/实际带宽,默认参考带宽为100M。当计算结果有小数位时,只取整数位;结果小于1时,cost取1。
  • 若需要调整接口cost值有两种方式:
    • 直接在接口下配置,需要注意的是,配置的cost是此接口最终的cost值,作用范围仅限于本接口。
    • 修改OSPF的默认参考带宽值,作用范围是本路由器使能OSPF的接口。建议参考整个网络的带宽情况建立参考基线,所有路由器修改相同的参考带宽值,从而确保选路的一致性。
  • OSPF以“累计cost”为开销值,也就是流量从源网络到目的网络所经过所有路由器的出接口的cost总和,以RTA访问RTC Loopback 1接口192.168.3.3为例,其cost=G1’s cost+G3’s cost。
  • 相比于RIP,OSPF的度量方式不仅考虑“跳数”,而且还考虑了“带宽”,比RIP更可靠的选择最优的转发路径。
  • 那么OSPF路由器怎么表达链路状态信息并完成同步呢?

报文类型及作用

OSPF协议报文头部

在这里插入图片描述- RIP路由器之间是基于UDP 520的报文进行通信,OSPF也有其规定的通信标准。OSPF使用IP承载其报文,协议号为89

  • 在OSPF Packet部分,所有的OSPF报文均使用相同的OSPF报文头部:
    • Version :对于当前所使用的OSPFv2,该字段的值为2。
    • Type:OSPF报文类型。
    • Packet length:表示整个OSPF报文的长度,单位是字节。
    • Router ID:表示生成此报文的路由器的Router ID。
    • Area ID:表示此报文需要被通告到的区域。
    • Checksum:校验字段,其校验的范围是整个OSPF报文,包括OSPF报文头部。
    • Auth Type:为0时表示不认证;为1时表示简单的明文密码认证;为2时表示加密(MD5)认证。
    • Authentication:认证所需的信息。该字段的内容随AuType的值不同而不同。

OSPF报文类型

Type报文名称报文作用
1Hello发现和维护邻居关系
2Database Description交互链路状态数据库摘要
3Link State Request请求特定的链路状态信息
4Link State Update发送详细的链路状态信息
5Link State Ack发送确认报文

OSPF报文的功能需求

功能实现
发现邻居与保持Hello机制即可实现
LSA同步双方互相发送LSA,完成同步;
同时同步速度更快,占用资源更少
可靠性确保LSA同步过程的可靠性

LSDB同步过程

在这里插入图片描述

  • 状态含义:
    • ExStart:邻居状态变成此状态以后,路由器开始向邻居发送DD报文。Master/Slave关系是在此状态下形成的,初始DD序列号也是在此状态下确定的。在此状态下发送的DD报文不包含链路状态描述。
    • Exchange:在此状态下,路由器与邻居之间相互发送包含链路状态信息摘要的DD报文。
    • Loading:在此状态下,路由器与邻居之间相互发送LSR报文、LSU报文、LSAck报文。
    • Full:LSDB同步过程完成,路由器与邻居之间形成了完全的邻接关系。
  • LSDB同步过程如下:
    • RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2并且二者已建立了邻居关系。当RTA的邻居状态变为ExStart后,RTA会发送第一个DD报文。此报文中,DD序列号被随机设置为X,I-bit设置为1,表示这是第一个DD报文,M-bit设置为1,表示后续还有DD报文要发送,MS-bit设置为1,表示RTA宣告自己为Master。
    • 当RTB的邻居状态变为ExStart后,RTB会发送第一个DD报文。此报文中,DD序列号被随机设置为Y(I-bit=1,M-bit=1,MS-bit=1,含义同上)。由于RTB的Router ID较大,所以RTB将成为真正的Master。收到此报文后,RTA会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。
    • 当RTA的邻居状态变为Exchange后,RTA会发送一个新的DD报文,此报文中包含了LSDB的摘要信息,序列号设置为RTB在步骤2中使用的序列号Y,I-bit=0,表示这不是第一个DD报文,M-bit=0,表示这是最后一个包含LSDB摘要信息的DD报文,MS-bit=0,表示RTA宣告自己为Slave。收到此报文后,RTB会产生一个Negotiation-Done事件,并将邻居状态从ExStart变为Exchange。
    • 当RTB的邻居状态变为Exchange后,RTB会发送一个新的DD报文,此报文包含了LSDB的摘要信息,DD序列号设置为Y+1, MS-bit=1,表示RTB宣告自己为Master。
    • 虽然RTA不需要发送新的包含LSDB摘要信息的DD报文,但是作为Slave,RTA需要对Master发送的每一个DD报文进行确认。所以,RTA向RTB发送一个新的DD报文,序列号为Y+1,该报文内容为空。发送完此报文后,RTA产生一个Exchange-Done事件,将邻居状态变为Loading。RTB收到此报文后,会将邻居状态变为Full(假设RTB的LSDB是最新最全的,不需要向RTA请求更新)。

在这里插入图片描述

    • RTA开始向RTB发送LSR报文,请求那些在Exchange状态下通过DD报文发现的、并且在本地LSDB中没有的链路状态信息。
    • RTB向RTA发送LSU报文,LSU报文中包含了那些被请求的链路状态的详细信息。RTA在完成LSU报文的接收之后,会将邻居状态从Loading变为Full。
    • RTA向RTB发送LSAck报文,作为对LSU报文的确认。RTB收到LSAck报文后,双方便建立起了完全的邻接关系。
  • 从建立邻居关系到同步LSDB的过程较为复杂,错误的配置或设备链路故障都会导致无法完成LSDB同步。为了快速排障,最关键的是要理解不同状态之间切换的触发原因。

OSPF邻居状态机

在这里插入图片描述

  • 这是形成邻居关系的过程和相关邻居状态的变换过程。
    • Down:这是邻居的初始状态,表示没有从邻居收到任何信息。在NBMA网络上,此状态下仍然可以向静态配置的邻居发送Hello报文,发送间隔为PollInterval,通常和Router DeadInterval间隔相同。
    • Attempt:此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为HelloInterval。如果Router DeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。
    • Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己所发送的Hello报文的邻居列表中。
    • 2-Way Received:此事件表示路由器发现与邻居的双向通信已经开始(发现自己在邻居发送的Hello报文的邻居列表中)。Init状态下产生此事件之后,如果需要和邻居建立邻接关系则进入ExStart状态,开始数据库同步过程,如果不能与邻居建立邻接关系则进入2-Way。
    • 2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。
    • 1-Way Received:此事件表示路由器发现自己没有在邻居发送Hello报文的邻居列表中,通常是由于对端邻居重启造成的。
    • ExStart:这是形成邻接关系的第一个步骤,邻居状态变成此状态以后,路由器开始向邻居发送DD报文。主从关系是在此状态下形成的;初始DD序列号是在此状态下决定的。在此状态下发送的DD报文不包含链路状态描述。
    • Exchange:此状态下路由器相互发送包含链路状态信息摘要的DD报文,描述本地LSDB的内容。
    • Loading:相互发送LS Request报文请求LSA,发送LS Update通告LSA。
    • Full:两台路由器的LSDB已经同步。

LSA头部

在这里插入图片描述

  • LSA(Link State Advertisement)是路由器之间链路状态信息的载体。LSA是LSDB的最小组成单位,也就是说LSDB由一条条LSA构成的。
  • 所有的LSA都拥有相同的头部,关键字段的含义如下:
    • LS age:此字段表示LSA已经生存的时间,单位是秒。
    • LS type:此字段标识了LSA的格式和功能。常用的LSA类型有五种。
    • Link State ID:此字段是该LSA所描述的那部分链路的标识,例如Router ID等。
    • Advertising Router:此字段是产生此LSA的路由器的Router ID。
    • LS sequence number:此字段用于检测旧的和重复的LSA。
  • LS type,Link State ID和Advertising Router的组合共同标识一条LSA。
  • LSDB中除了自己生成的LSA,另一部分是从邻居路由器接收的。邻居路由器之间相互更新LSA必然需要一个“通道”。

DR与BDR的选举及作用

DR与BDR作用

  • 减少邻接关系。
  • 降低OSPF协议流量。

在这里插入图片描述

  • DR(Designated Router)即指定路由器,其负责在MA网络建立和维护邻接关系并负责LSA的同步。
  • DR与其他所有路由器形成邻接关系并交换链路状态信息,其他路由器之间不直接交换链路状态信息。这样就大大减少了MA网络中的邻接关系数量及交换链路状态信息消耗的资源。
  • DR一旦出现故障,其与其他路由器之间的邻接关系将全部失效,链路状态数据库也无法同步。此时就需要重新选举DR,再与非DR路由器建立邻接关系,完成LSA的同步。为了规避单点故障风险,通过选举备份指定路由器BDR,在DR失效时快速接管DR的工作。

DR与BDR选举

在这里插入图片描述

  • 选举规则:DR/BDR的选举是基于接口的。
    • 接口的DR优先级越大越优先。
    • 接口的DR优先级相等时,Router ID越大越优先。

邻居与邻接关系

在这里插入图片描述

  • 邻居(Neighbor)关系与邻接(Adjacency)关系是两个不同的概念。OSPF路由器之间建立邻居关系后,进行LSDB同步,最终形成邻接关系。
  • 在P2P网络及P2MP网络上,具有邻居关系的路由器之间会进一步建立邻接关系。
  • 在广播型网络及NBMA网络上,非DR/BDR路由器之间只能建立邻居关系,不能建立邻接关系,非DR/BDR路由器与DR/BDR路由器之间会建立邻接关系,DR与BDR之间也会建立邻接关系。
  • 邻接关系建立完成,意味着LSDB已经完成同步,接下来OSPF路由器将基于LSDB使用SPF算法计算路由。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/650682.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s-调度

调度 从上面的架构图我们可以看到,调度是工作在Master,负责调度Pod,为POD分配Node。 调度的工作原理 #查看所有的Node kubectl get nodes 我们可以看到节点有一个Name,这就是调度的关键。 调度的步骤: 1 创建POD的时候每一个POD都会有一个叫NodeName的…

老板为何都对项目经理毕恭毕敬!因为这个职位一念成佛一念成魔

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 老板为何都对项目经理毕恭毕敬!因为这个职位一念成佛一念成魔 曾几何时&am…

Linux:命名管道及其实现原理

文章目录 命名管道指令级命名管道代码级命名管道 本篇要引入的内容是命名管道 命名管道 前面的总结中已经搞定了匿名管道,但是匿名管道有一个很严重的问题,它只允许具有血缘关系的进程进行通信,那如果是两个不相关的进程进行通信&#xff0…

《佛法修学概要》009-012集研讨

课程摘要 9、只有走出心中的妄想,才可能接觸彌陀的光明! 佛陀在經典裡講出一個譬喻,說有一座動物園,這座動物園關了很多動物。其中有一隻袋鼠,就是澳洲那種很會跳的袋鼠。動物園的管理員,給牠圈了一個十公尺…

《合成孔径雷达成像算法与实现》Figure5.16

clc clear close all距离向参数 R_eta_c 20e3; % 景中心斜距 Tr 25e-6; % 发射脉冲时宽 Kr 0.25e12; % 距离向调频率 Fr 7.5e6; % 距离向采样率 Nrg 256; % 距离线采样点数 Bw abs(Kr*Tr); …

【vue oidc-client】invalid_requestRequest Id: 0HN0OOPFRLSF2:00000002

需求:完成统一登录,需要从三方平台跳到我们的平台。 oidc-client报错记录。这个一般是配置信息出错,需要和三方平台进行沟通,一定要把client_id,密钥进行对应; 同时关于此次出错还修改了以下代码&#xff…

主成分分析(PCA)Python

实际问题研究中,常常遇到多变量问题,变量越多,问题往往越复杂,且各个变量之间往往有联系。于是,我们想到能不能用较少的新变量代替原本较多的旧变量,且使这些较少的新变量尽可能多地保留原来变量所反映的信…

按配置数据绘制配置型地图marker的icon,自定义marker

一、需求 需要自定义配置数据的marker&#xff0c;其中图片内容要灵活可配置自动生成。此处项目用的百度地图。 效果图&#xff1a; 二、思路 用背景图canvas绘制数字的方式生成icon的图片资源。 再将icon生成对应地图marker。 三、代码 canvasImg.js <!-- * descrip…

进程地址空间(Linux)

进程地址空间 一、引入概念1. 程序的地址分布2. 线性地址和物理地址 二、进程地址空间1. 初步认识2. 地址空间和物理内存的联系3. 区域划分4. 拓展——关于“线” 三、进一步理解进程地址空间四、页表总结 一、引入概念 1. 程序的地址分布 测试代码&#xff1a; #include &l…

Nginx安装以及具体应用

文章目录 Centos7安装NginxNginx命令Nginx具体应用反向代理 location指令说明负载均衡动静分离 Nginx.conf配置详解 Centos7安装Nginx 下载地址&#xff1a;nginx: download 中间这个就是tar.gz包 Centos7安装Nginx 下载nginx-1.16.1.tar.gz上传到Centos7中的/user/local目…

java8 流到底是什么呢?

引入背景&#xff1a; 1、想像写SQL那样操作集合 2、为了提高性能&#xff0c;需要并行处理&#xff0c;并利用多核架构 流到底是什么呢&#xff1f; 流是Java API的新成员&#xff0c;它允许你 以声明性方式处理数据集合&#xff08;通过查询语句来表达&#xff0c;而不是临时…

springboot+vue3组合,对接支付宝付款第一节:内网穿透

springbootvue3组合,对接支付宝付款第一节:内网穿透&#xff01;接下来会为大家展示&#xff0c;使用java的springboot搭建一个简单的后台。提供业务接口。实现在线下单&#xff0c;支付。支付宝付款的案例。 前端页面布局我们使用vue3element-plus来实现绘制。 今天是第一个…

海康实时监控预览视频流接入web

我们采取的方案是后端获取视频流返回给前端&#xff0c;然后前端播放 海康开放平台海康威视合作生态致力打造一个能力开放体系、两个生态圈&#xff0c;Hikvision AI Cloud开放平台是能力开放体系的核心内容。它是海康威视基于多年在视频及物联网核心技术积累之上&#xff0c;…

Jmeter连接数据库报错Cannot load JDBC driver class‘com.mysql.jdbc.Driver’解决

问题产生: 我在用jmeter连接数据库查询我的接口是否添加数据成功时,结果树响应Cannot load JDBC driver class com.mysql.jdbc.Driver 产生原因: 1、连接数据库的用户密码等信息使用的变量我放在了下面,导致没有取到用户名密码IP等信息,导致连接失败 2、jmeter没有JDB…

CodeGPT--(Visual )

GitCode - 开发者的代码家园 gitcode.com/ inscode.csdn.net/liujiaping/java_1706242128563/edit?openFileMain.java&editTypelite marketplace.visualstudio.com/items?itemNameCSDN.csdn-codegpt&spm1018.2226.3001.9836&extra%5Butm_source%5Dvip_chatgpt_c…

Elasticsearch介绍以及基本操作

目录 一、Elasticsearch介绍 二、关于Elasticsearch的基本操作 &#xff08;1&#xff09;索引操作 &#xff08;2&#xff09;文档操作 三、域的属性 &#xff08;1&#xff09;index &#xff08;2&#xff09;type &#xff08;3&#xff09;store 一、Elasticsearc…

使用Go语言编写安全的HTTP代理服务器

构建一个安全的HTTP代理服务器是至关重要的&#xff0c;因为这可以保护用户的数据和隐私。让我们来看看如何使用Go语言编写一个安全的HTTP代理服务器。 首先&#xff0c;确保你的代理服务器使用HTTPS协议进行通信。HTTPS使用SSL/TLS加密来保护数据传输&#xff0c;可以确保数据…

源聚达科技:抖店的专营店怎么开

在数字化浪潮的推动下&#xff0c;抖音平台不仅为人们提供了丰富的娱乐内容&#xff0c;也成为了电商的新战场。不少创业者和品牌商纷纷选择在抖音上开设自己的专营店&#xff0c;以此抓住流量红利&#xff0c;拓宽销售渠道。那么&#xff0c;如何在抖音平台上成功开设一家专营…

每日一题——LeetCode1346.检查整数及其两倍数是否存在

方法一 循环查找 用indexOf查找每个元素的两倍是否存在在数组中&#xff0c;找到了就直接return true&#xff0c;循环结束还没找到就return false var checkIfExist function(arr) {for(let i0;i<arr.length;i){let index arr.indexOf(arr[i]*2)if(index>0 &&…

听力下降为什么会影响到言语感知?

一、听力障碍对阈值、听觉频率范围和分辨能力的影响 听力障碍使得听障者的听敏度降低&#xff0c;提高了阈值&#xff0c;不利于言语信号的接收。听障者听力阈值的变化在不同频率并不相同&#xff0c;一般而言&#xff0c;高频部分的听力损失往往大于低频部分&#xff0c;而言…