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基本工作原理的更多相关文章

  1. OSPF的基本工作原理

    OSPF的基本工作原理 1.定义 2.特点 3.基本概念 4.OSPF五种分组类型 5.DR/BDR 6.区域 1.定义 开放最短路径优先OSPF,是为了克服RIP的缺点在1989年开发出来的. &q ...

  2. DDNS 的工作原理及其在 Linux 上的实现--转

    http://www.ibm.com/developerworks/cn/linux/1305_wanghz_ddns/index.html DDNS (Dynamic DNS) 扩展了 DNS 将客 ...

  3. CentOS 6.5环境下heartbeat高可用集群的实现及工作原理详解

    Linux HA Cluster高可用服务器集群,所谓的高可用不是主机的高可用,而是服务的高可用. 什么叫高可用:一个服务器down掉的可能性多种多样,任何一个可能坏了都有可能带来风险,而服务器离线通 ...

  4. 菜鸟学Struts2——Struts工作原理

    在完成Struts2的HelloWorld后,对Struts2的工作原理进行学习.Struts2框架可以按照模块来划分为Servlet Filters,Struts核心模块,拦截器和用户实现部分,其中 ...

  5. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  6. HashMap的工作原理

    HashMap的工作原理   HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道HashTable和HashMap之间 ...

  7. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)

    RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...

  8. ThreadLocal 工作原理、部分源码分析

    1.大概去哪里看 ThreadLocal 其根本实现方法,是在Thread里面,有一个ThreadLocal.ThreadLocalMap属性 ThreadLocal.ThreadLocalMap t ...

  9. Servlet的生命周期及工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

随机推荐

  1. app接口,如何保证是由app内部调用而非外部模拟post请求调用。

    在爬虫快手主播信息的时候,发现只要我改动一下参数,比如第一页 page=1的时候,需要爬下一页,把page改为2发现提示sign验证失败了 也就是说,快手在开发的时候考虑了有人抓包到接口后,通过修改参 ...

  2. Oracle PL/SQL编程之包(packages)

    1.简介 包用于在逻辑上组合过程和函数,它由包规范和包体组成. 我们可以使用create package来创建包,代码如下: ok,包创建完成,通过包的代码发现包的功能就是申明包中包含的过程和方法,红 ...

  3. Oracle Schema

    1.这是Schema的definition: A schema is a collection of database objects (used by a user.) Schema objects ...

  4. CCF 201409-4 最优配餐

    问题描述 试题编号: 201409-4 试题名称: 最优配餐 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务.随着连锁店越来越多,怎么 ...

  5. 45 Useful Oracle Queries--ref

    http://viralpatel.net/blogs/useful-oracle-queries/ Here’s a list of 40+ Useful Oracle queries that e ...

  6. org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.jboss.resteasy.plug

    之前做的项目是resteasy的上传,代码没有问题,断点都不进来呢. 我以为可以直接移植到SpringMVC,但是SpringMVC不支持MultipartFormDataInput , 用Multi ...

  7. Shiro - 关于session

    Shiro Session session管理可以说是Shiro的一大卖点. Shiro可以为任何应用(从简单的命令行程序还是手机应用再到大型企业应用)提供会话解决方案. 在Shiro出现之前,如果我 ...

  8. CommandLineRunner预加载数据

    在使用SpringBoot构建项目时,我们通常有一些预先数据的加载.那么SpringBoot提供了一个简单的方式来实现–CommandLineRunner. CommandLineRunner是一个接 ...

  9. mybatis向数据库插入数据 (传入的是一个实体类)

    /** * 插入用户信息 user为实体类 * @param user */ public int insert( User user); //实体类不用@param标注 //mybatis的xml文 ...

  10. ArcSDE 10.2 for Oracle 12C安装注意事项

    ArcSDE 10.2 for Oracle 12C安装注意事项 1.环境说明 从ArcSDE10.2.1开始支持Oracle 12C. 2.安装注意事项 SDE空间数据库可以安装到PDB中,使用Cr ...