OSPF协议原理及配置2-理解邻居和邻接关系
OSPF是一个动态路由协议,运行OSPF的路由器之间需要交换链路状态信息和路由信息,在交换这些信息之前首先需要建立邻接关系。邻接关系用来交换链路状态及路由信息。
注意:并非所有的邻居关系都可以成为邻接关系,不同的网络类型,是否建立邻接关系的规则也不同。
也就是说链路状态信息只在建立了邻接关系的路由器间传递,这点很生要。
四种网络类型:
1 点对点:两台路由器间仅有一条链路,不需要选举,直接通过hello报文建立邻接关系。这种类型的网络建立邻接关系时端口有不同状态的变化,见下图
各种状态的解释如下:
Down: 这是端口的初始状态,在该状态下,底层协议显示该端口不可用,所有定时器被关闭。
Loopback: 此状态表示端口被环回。在该状态下的端口被通告为一个Stub网段。
Point-to-point(P-to-P): 在此状态下,端口是可用的,而且端口是连接到点到点、点到多点或者虚连接,此状态下的端口试图与邻居建立邻接关系,并以HelloInterval的间隔发送Hello报文。
各种事件解释如下:
UnloopInd: Unloopback Indication,表示端口解除环回状态。处于Loopback状态下的端口如果收到此事件,则进入Down状态。
InterfaceUp: 端口的链路层协议变成可用状态,即常说的链路层Up。由于不需要选举DR和BDR,因此点到点、点到多点网段以及虚连接的端口状态变换比较简单,在Down状态下收到InterfaceUp事件后,转为Point-to-point(P-to-P)状态,此状态即为稳定工作状态。
2 点对多点:邻居通过反向地址解析协议来发现,不需要选举适用于非全连接,用于帧中继环境,通过动态映射,使FR支持组播。端口状态变化和点对点型网络相同。不完全连接的帧中继网络是典型的点对多点网络。
3 广播:这种网络类型中存在过多的LSA, 为减少邻接关系的数量,从而减少链路状态信息以及路由信息的交换次数,需要选举DR和BDR,其它路由器只与DR和BDR建立邻接关系,并交换链路状态信息。以太网是典型的广播型网络。
如果Router Priority被设置为0,那么该路由器将不允许被选举成DR或者BDR。
Router Priority越大越优先。如果相同,Router ID大者优先。
4 NBMA(非广播多路访问):全连接,不支持组播,邻居需要手动指定,全连接的ATM网络是典型的NBMA网络。
5 广播型和NBMA端口状态的转换
Waiting: 在此状态下,路由器通过监听接收到的Hello报文检测网络中是否已经有DR和BDR。在此状态下的路由器不可以参与选举DR和BDR。
Backup: 在此状态下,该路由器成为所连接网络上的BDR,并与网段中所有的其他路由器建立邻接关系。
DR: 在此状态下,该路由器成为所连接网络上的DR,并与网段中所有的其他路由器建立邻接关系。
DROther: 该路由器连接到一个广播型网段或者NBMA网段,而且该路由器不是一个DR或者BDR。此状态下的路由器与DR和BDR形成邻接关系并交换路由信息。
BackupSeen: 路由器已经检测到网络上是否存在BDR。
一个OSPF路由器在广播型网段和NBMA网段上选举DR和BDR之前,首先会等待一段时间(RouterDeadInterval),在这段时间里检测网络上是否已经存在DR和BDR,如果已经有DR和BDR,则不启动选举过程,直接进入DROther状态。
因此,网络上Router Priority最大的路由器不一定是DR,Router Priority第二大的路由器也不一定是BDR。
6 不同网络类型邻接关系的建立
原文地址:https://www.cnblogs.com/niewd/p/11019346.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 响应式架构与 RxJava 在有赞零售的实践
- Centos 7搭建Gitlab服务器超详细Centos 7搭建Gitlab服务器超详细(搭建成功)
- Netty之旅二:口口相传的高性能Netty到底是什么?
- 前端知识复习(一)
- Powershell运行脚本报错:此系统上禁止运行脚本
- git rebase解决合并冲突
- npm相关操作
- Angular html property的值如何被更新的
- Centos 7 使用mailx发送邮件
- Centos 7 备份MySQL
- Centos 7 备份MySQL/MongoDB并发邮件脚本
- Nginx启动报错:sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object
- 有赞美业店铺装修前端解决方案
- nginx部署react项目
- Golang 标准库 限流器 time/rate 设计与实现