IERS-OSPF基本工作原理
IERS-OSPF基本工作原理
一、邻居建立建立过程
1、Router ID
用于在自治系统中唯一标识一台运行OSPF的路由器,每台运行OSPF的路由器都有一个ROUTER ID
Route ID 是一个32位的无符号的整数,其格式和IP地址是一样的,Route iD 的选举规则如下:
1)、手动配置OSPF路由器的Router ID通常建议手配置
2)、如果没有手动配置Router ID,则路由器使用LoopBack接口中最大的IP地址作为Router ID;
3)、如果没有配置loopback 接口,则路由器使用物理接口中最大的ip地址作为route id
OSPF的路由器Router ID重新配置后,可以通过重置OSPF进程来更新router id;
2、发现并建立邻居-hello报文
2.1、hello报文的作用
邻居发现:自动发现邻居路由器
邻居建立:完成Hello报文中的参数协商,建立邻居关系
邻居保持:通过keepalive机制,检测邻居运行状态
2.2、OSPF邻居建立过程
邻居建立过程如下:

1)、现在RTA和RTB的router id 分别为1.1.1.1 和2.2.2.2 ,当RTA启动OSPF后,RTA会发送第一个hello报文,此报文中邻居列表为空,此时状态为down,RTB收到RTA的这个hello报文,状态置为init.
2)、RTB发送发送hellor报文,此报文中邻居列表为空,RTA收到RTB的hello报文,状态置为init.
3)、RTB向RTA发送邻居列表为1.1.1.1的hello报文,RTA在收到的hello报文邻居列表中发现自己的router id ,状态置为2-way。
4)、RTA向RTB发送邻居列表为2.2.2.2的hello报文,RTB在收到的hello报文邻居列表中发现自己的router id ,状态置为2-way;
因为邻居都是未知的,所以hello报文的目的IP地址不是某个特定的单播地址,ospf采用组播的形式发送hello报文(目的地址为224.0.0.5)。
5)、对于不支持组播的网络,ospf路由如何发现邻居呢?
ospf支持通过单播的方式建立邻居关系,对于不支持网络可以通过手动配置实现邻居的发现与维护,
ospf路由器之间建立邻居关系是为了同步链路状态信息,接下来学习OSPF如何实现链路状态数据库同步。
二、链路状态信息
1、OSPF链路状态信息主要包括
链路的类型、接口ip地址及掩码、链路上所连接的邻居路由器、链路的带宽(开销)
OSPF有丰富的数据链路层能力,数据链路层协议类型多种多样,工作机制也各不相同,为适配多种数据链路层协议必须考虑各类链路层协议在组网时的应用场景
2、OSPF是如何定义多种网络的?
p2p网络:仅两台路由互连,支持广播、组播,
广播型网络:两台或两台以上的路由器通过共享介质互连,支持广播,组播,广播型网络的例子:通过以太网链路相连的路由器网络。是OSPF最常见的网络类型
NBMA网络:两台或两台以下路由器通过VC互连,不支持广播、组播,在NBMA网络上OSPF模拟在广播网络上的操作,但是每个路由器的邻居需要手动配置;NBMA型网络的例子,通过全互连的帧中继链路相连的路由器网络
P2MP网络:多个点到点网络的集合,支持广播、组播,没有一种链路层协议默认属于P2MP类型网络,也就是说必须是由其他的网络类型强制更改为P2MP,常见的做法是将非完全连接的帧中继或ATM必为P2MP网络。
3、OSPF链路状态信息中的开销值是如何度量的呢?
某接口COST=参考带宽/实际带宽,默认参考带宽为100M,当计算有小数位时,只取整数位,结果小于1时,COST取1
标记: 优先级 1
更改COST的两种方式:1、直接在接口下配置;2、修改参考带宽(所有路由器都需要修改,确保选中一致性)
三、报文类型及作用
1、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的报文头部定义了OSPF路由器之间的通信标准与规则
2、OSPF报文类型
type=1为hello报文,用来建立和维护邻居关系,邻居关系建立之前,路由器之间需要进行参数协商
type=2为数据库描述报文(DD),用来向邻居路由器描述本地链路状态数据库。使得邻居路由器识别出数据库中的LSA是否完整。
type=3为链路状态请求报文(LSR),路由器根据邻居的DD报文,判断本地数据库是否完整,如不完整,路由器把这些LSA记录进链路状态请求列表中,然后发送一个LSR给邻居路由器
type=4为链路状态更新报文LSU,用于响应邻居路由器发来的LSR,根据LSR中的请求列表,发送对应LSA给邻居路由器,真正实现LSA的泛洪与同步
type=5为链路状态确认报文(LSACK),用来对收到的LSA进行确认,保证同步过程的可靠性。
3、DD报文和LSACK中包含LSA头部信息:包括 LS type ls id advertising router ls sequence ls checksum; LSU报文中包含完整的LSA信息, LSR 包含LS type ls id advertising router
四、LSDB同步过程
五种报文可以高效地完成LSA的同步 ,那么实际的报文交互过程是什么样的呢?
同步状态图

各个状态含义:
exstart:邻居状态变成此状态后,路由器开始向邻居发送DD报文。master和slave关系是在此状态形成的,初始DD序列号也是在此状态下确定的,在此状态下发送的DD报文不包含链路状态描述。
exchange:在此状态下,路由器与邻居之间相互发送包含链路状态信息摘要的DD报文。
loading:在此状态下,路由器与邻居之间相互发送LSR报文,LSU报文,LSAck报文
full:lsdb同步过程完成。路由器与邻居之间形成了完全的邻接关系。
LSDB同步过程如下:
1、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,表示RYA宣告自己为master。
2、当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。
3、当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。
4、当RTB的邻居状态变为exchange后RTB会发送一个新的DD报文,此报文包含了LSDB的摘要信息,DD序列号设置为Y+1,MS-bit=1,表示RTB宣告自己为master
5、虽然RTA不需要发送新的包含LSDB摘要信息的DD报文,但是作为slave,RTA需要对master发送的第一个DD报文进行确认,所以RTA向RTB发送一个新的DD报文,序列号为Y+1,该报文内容为空,发送完此报文后,RTA产生一个exchange-Done事件,将邻居状态变为loading。RTB收到此报文后,会将邻居状态变为full。(假设RTB的LSDB是最新最全的,不需要向RTB请求更新)
五、LSA头部
LSA是OSPF链路状态信息的载体
LS type,link state id 、advertising router的组合共同标识一条LSA
IERS-OSPF基本工作原理的更多相关文章
- OSPF的基本工作原理
OSPF的基本工作原理 1.定义 2.特点 3.基本概念 4.OSPF五种分组类型 5.DR/BDR 6.区域 1.定义 开放最短路径优先OSPF,是为了克服RIP的缺点在1989年开发出来的. &q ...
- DDNS 的工作原理及其在 Linux 上的实现--转
http://www.ibm.com/developerworks/cn/linux/1305_wanghz_ddns/index.html DDNS (Dynamic DNS) 扩展了 DNS 将客 ...
- CentOS 6.5环境下heartbeat高可用集群的实现及工作原理详解
Linux HA Cluster高可用服务器集群,所谓的高可用不是主机的高可用,而是服务的高可用. 什么叫高可用:一个服务器down掉的可能性多种多样,任何一个可能坏了都有可能带来风险,而服务器离线通 ...
- 菜鸟学Struts2——Struts工作原理
在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- HashMap的工作原理
HashMap的工作原理 HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- ThreadLocal 工作原理、部分源码分析
1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...
- Servlet的生命周期及工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...
随机推荐
- SpringBoot读取静态资源文件
ClassPathResource resource = new ClassPathResource(publicKeyCer); File file = null; try { file = res ...
- Robot Framework自动化测试一(第一个脚本)
创建测试项目 选择菜单栏file----->new Project Name 输入项目名称,Type 选择Di ...
- RPC的故事
今天我跟几个RPC框架之间发生了一些事,情节跌宕起伏一波三折,不吐不快,以至于我这个从来不写博客的人也忍不住写下来分享一下. 背景 主系统部署在Windows上(.NET 4.5),子系统(.NET ...
- EntityFrameWork Code First 一对多关系处理
场景1: 一个文章类别(Category)下含有多篇文章(Article),而某篇文章只能对应一个类别 Article和Category的代码如下: /// <summary> /// 文 ...
- sharding-jdbc集成spring+mybatis分表分库
maven: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...
- Mac新手问题
[现象:]MAC下checkout代码时,报svn:E170013-unable to connect to a repository at url xxx, svn:E1700113: unable ...
- 架构实战项目心得(七):使用SpringBoot+Dubbo+Mybatisplus+Oracle搭建后台项目框架(二)
接下来我们将整合mybatisplus+Oracle,实现一个简单的查询.(期间踩了很多坑,遇到一些问题,还好慢慢解决了.现在是通过配置文件的方式来进行dubbo服务的注册和发布,希望以后能在学习和实 ...
- IE9 和IE10 兼容性判断及效果
仅IE9可识别 .d1{ width:100px; height:100px; background:blue; } IE9及一下使用<!--[if IE 8]><![endif]- ...
- 修改npm包管理器的registry为淘宝镜像(npm.taobao.org)<转>
起因 安装了node,安装了npm之后,官方的源实在是 太慢了! 看了看淘宝的npm镜像, http://npm.taobao.org/ 竟然说让我再下载一个cnpm,要不然就每次都得install ...
- DataTables获取指定元素的行数据
法1: 用jquey获取,var row = $('.edit').parent().parent(); 缺点:只能获取dom上的东西,不能获取没有渲染的数据 法2: 首先绑定行号到元素上 $('#e ...