OSPF协议基础

OSPF协议是什么名字?

开放式最短路径优先

路由协议:

  • 动态路由:配置协议,让路由器自己去学习相关的网段
    • 距离矢量路由协议(典型代表RIP)

RIP是基于跳数的,但是有一个致命缺陷:超过15跳即不可达

会存在收敛速度慢,度量值不科学,可扩展性等问题

度量值(类似于高速公路上的过路费,同样的流量经过每一个路由器都需要有一个度量值):基于跳数的;基于链路带宽的

此时对于RIP而言上面的跳数是3,下面的跳数是1

那么此时RIP这个人会选择下面的路

  • 链路状态(OSPF):基于链路带宽的,链路带宽越大,其开销值越小,我们就会选择上面的路径

假设上面的道路有1G,下面的道路假设是100M

  • 静态路由:ip route 192.168.3.0 255.255.255.0 192.168.2.2 (目标网段IP地址 目标子网掩码下一路由器接口ip地址)

所以为什么说RIP不科学?

因为我们假设去买宽带的话,肯定是想买20兆不会去想买10兆的吧,那肯定越快越好呢

可扩展性差:超过15跳(15个路由器之后就不可达)所以在大型网络中可扩展性比较差

  • 静态路由:由管理员手工配置(ip route+目标网段IP地址 目标子网掩码+下一路由器接口ip地址)

RIP在大型网络中面临的挑战

  1. 网络规模扩大
  2. 可靠性提高
  3. 异构化(华为,华三,思科等不同类型的设备)

OSPF是一个协议(也可以说是一个标准)

标准的话就是大家都可以去进行使用的吧,就类似于我们买手机只要你是Type-c的接口那我都可以充电,这样子不管你是华为,小米,三星等等都可以使用吧,OSPF同样他也是一种标准很多产商都能进行使用,那这样子就可以避免说一个公司只能买一家公司的产品吧有一定的局限性

RIP在大型网络中部署所面临的问题

  • 收敛速度慢:逐跳收敛

什么叫做收敛?指的就是网络完全可以正常工作

运行过程:

此时运行的协议是RIP,RTA左边有一个网段

  1. 需要把路由信息进行传递对于RTA会把网段加入自己的路由表,计算出到达每一个路由器路怎么走
  2. 计算完成之后会把路由信息进行向下传递给RTB,这里有一个新的路由N1,同样也会去计算到达各个路由器的路程
  3. 计算完成之后会给到RTC或者RTD,最后传递到RTE,这样子的话对于RTE而言是不是收敛速度就会很慢,因为收敛的话是指所有的网络都可以完全正常工作嘛,就意味着我们必须等到RTE也完成了计算之后才算是整体的网段收敛了(类似于本来3桶饮用水可能一次性三个人搬运的话是不是速度会很快,但是现在我就一个人来搬运,一桶一桶搬运,这样子的话是不是整体速度就会变得缓慢很多)
  • 传闻路由更新机制——缺少对全局网络拓扑的了解
  • RIP就有点类似于开车时候不认识路一样,导航怎么说就这么走,有时候会比较坑爹,就比如你在桥上导航让你掉头,是不是就很过分
  • 但是如果是比较有经验的司机,就可以对整个路径比较了解

我们是先传给RTA再传给RTB,万一RTA计算错误了,那RTB也错了

就类似于我们传话一样(我在抖音上看到一个段子,就是本来老师让班长叫一个学生过来解释一下为什么没交作业啊,如果是没做的话要叫家长的,最后传递到那个学生的耳朵里面已经变成了你的家长已经在办公室里面等你了)

  • 最多有效条数位15跳
  • 以“跳数”位度量方式

如何解决RIP问题

  1. 本来是先计算再传递的一个机制吧,现在我们优化成先传递在计算
  2. 独立计算
  3. 改成不限定跳数
  4. 选择链路带宽的参考值

这些相对应的也是OSPF的优点

链路状态路由协议OSPF

  1. 路由信息传递于路由计算分离
  2. SPF算法(最短路径树:以自己为根,计算出到达每一个节点的最短路径)
  3. 以“累计链路开销”作为选路参考值(就像最一开始我们经过3个收费站,一个站收费100块,一共三个站是不是累计收费300块)这里我们是看累计收费的

LS(Link State——链路状态):包含了接口的IP地址,接口的掩码,接口的开销值等等

可能大家之前IA有很多老师会选择用Router因为不怎么占电脑内存,我们IP阶段尽量用AR系列,但是不要用AR201

LSA(Link State Advertisement——链路状态通告):

LSDB(Link State Database——链路状态数据库):路由器中的链路状态数据库不但会包含自己的LSA,也会包含其他路由器的LSA

是不是逐渐的我们到最后大家的LSDB都会形成一样的状态,就会达到我们同步的一个状态

OSPF工作过程

  1. 邻居建立(在三个路由器上配置好OSPF之后,都会往外发送一个报文告诉别人我加入了OSPF这个组织)AR2为什么会把23这个链路状态发送给AR1呢就是因为AR1和AR2是邻居
  2. 同步LSDB
  3. 计算最优路由

邻居建立过程

OSPF中第一步就是手工配置好Router ID(建议手工配置,如果自动选择的话会选择IP地址最大的作为自己的Router ID)

自动选择:

  1. 首先会从逻辑地址中选择一个最大的IP地址
  2. 如果没有配置逻辑地址的话就会从物理地址中选择一个最大的IP地址

有一种情况就是我们假设先配置了一个1.1再配置了一个1.2那我们Router ID会选择哪一个?

会选择我们的1.1,因为我们在1.1配置好之后在其他都没有配置IP地址的情况下是不是1.1就是最大的,而且我们Router ID是不会随意更换的,会基于稳定的机制,不会随意改变除非是我们重启了路由器

地址分为:

  • 逻辑地址(loopback):不需要有物理链路去进行对应的,一旦配置好就永久开启了,除非手动去删除
  • 物理地址:就是有物理的接口对应还要有对应的物理链路连接上

Router ID:路由器身份标识(就类似于身份证号码一样不会和别人的一样)

  1. 唯一性
  2. 任意性(也是和IP地址一样是用点分十进制——点分开的十进制来表示的)

发现并建立邻居的过程

  1. Hello报文

我们配置一下AR2的左边的IP地址,给一个ospf,宣告一个网段,这样子就会有hello报文

  • 邻居发现:自动发现邻居路由器。
    • 此时我AR1中也配置一下OSPF此时也会发Hello报文吧,都会发送到224.0.0.5中,那这个时候AR2会见监听到这个消息,此时是不是就发现到邻居路由器了
  • 邻居建立:完成Hello报文中的参数协商,建立邻居关系。
    • 两者之间假设hello interval一个是10s一个是5s那么两者的参数协商不成功,那就不能建立邻居关系

Network Mask:子网掩码

hello interval:hello间隔(10s左右发送一个hello报文)

hello dead interval:hello死亡间隔(消息失效时间间隔)类似于心跳

  • 邻居保持:通过Keepalive机制,检测邻居运行状态。

如果超过了hello dead interval时间之后,就自动解除邻居关系

实验:

全部启动,对AR2进行操作

先对AR2左边的端口进行抓包

进入改名字

进入左边的端口0/0/0

配置IP地址:ip address 10.1.12.2 24

退出

OSPF 1 router-id 2.2.2.2

area 0

network 10.1.12.0  0.0.0.255

做完这一些列操作之后再去看抓包就会看到有一个Hello报文

我们可以看到源地址IP是我们自己配的10.1.12.2

目的IP 是224.0.0.5(是一个组播地址)

OSPF中会有两个组播地址:

  • 224.0.0.5
  • 224.0.0.6

A类地址:0.0.0.0 ~ 127.255.255.255

B类地址:128.0.0.0-191.255.255.255

C类地址:192.0.0.0-223.255.255.255

D类地址(用于组播):224.0.0.0-239.255.255.255

E类地址(用于科研):240.0.0.0-255.255.255.255

OSPF邻居建立过程

  • down:这是邻居的初始状态,表示没有从邻居收到任何信息,在此状态下会互相发送hello报文,报文中会携带邻居列表和自己的router id

前提是还要再配置一个路由器的信息

  • init:在此状态下,路由器已经从邻居收到了Hello报文,两者的参数协商都一样了,但是自己的Router ID不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。
  • 2-way(邻居关系的稳定状态):在此状态下,路由器发现自己的Router ID存在于收到的Hello报文的邻居列表中,已确认可以双向通信。

发现并建立邻居—手动建立

一般情况下都是自动建立的,要是手动建立的话会比较麻烦

在刚才的PPT中我们是采用自动发送hello报文,hello报文的目的地址是组播地址224.0.0.5,是以组播的方式自动去发送发现邻居

此时我们也可以采用单播的方式(不支持组播的前提下)建立邻居关系

ospf 1 peer+IP地址不是router id

链路状态信息(LSA

  • 链路的类型;
  • 接口IP地址及掩码;
  • 链路上所连接的邻居路由器;
  • 链路的带宽(开销)

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

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

TCP/IP五层:物理层,数据链路层,网络层,传输层,应用层

OSI七层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层

 OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。

        ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。

<1>    应用层

        OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。

        公司A的老板就是我们所述的用户,他要发送的商业报价单,就是应用层提供的一种网络服务,当然,老板也可以选择其他服务,比如说,发一份商业合同,发一份询价单,等等。

<2>    表示层

        表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。

        由于公司A和公司B是不同国家的公司,他们之间的商定统一用英语作为交流的语言,所以此时表示层(公司的文秘),就是将应用层的传递信息转翻译成英语。同时为了防止别的公司看到,公司A的人也会对这份报价单做一些加密的处理。这就是表示的作用,将应用层的数据转换翻译等。

<3>    会话层

        会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。      

        会话层的同事拿到表示层的同事转换后资料,(会话层的同事类似公司的外联部),会话层的同事那里可能会掌握本公司与其他好多公司的联系方式,这里公司就是实际传递过程中的实体。他们要管理本公司与外界好多公司的联系会话。当接收到表示层的数据后,会话层将会建立并记录本次会话,他首先要找到公司B的地址信息,然后将整份资料放进信封,并写上地址和联系方式。准备将资料寄出。等到确定公司B接收到此份报价单后,此次会话就算结束了,外联部的同事就会终止此次会话。

<4>   传输层

        传输层建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。我们通常说的,TCP UDP就是在这一层。端口号既是这里的“端”。

        传输层就相当于公司中的负责快递邮件收发的人,公司自己的投递员,他们负责将上一层的要寄出的资料投递到快递公司或邮局。

<5>   网络层

       本层通过IP寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。就是通常说的IP层。这一层就是我们经常说的IP协议层。IP协议是Internet的基础。

        网络层就相当于快递公司庞大的快递网络,全国不同的集散中心,比如说,从深圳发往北京的顺丰快递。首先要到顺丰的深圳集散中心,从深圳集散中心再送到武汉集散中心,从武汉集散中心再寄到北京顺义集散中心。这个每个集散中心,就相当于网络中的一个IP节点。

<6>   数据链路层 

      将比特组合成字节,再将字节组合成帧,使用链路层地址 (以太网使用MAC地址)来访问介质,并进行差错检测。

      数据链路层又分为2个子层:逻辑链路控制子层(LLC)和媒体访问控制子层(MAC)。

      MAC子层处理CSMA/CD算法、数据出错校验、成帧等;LLC子层定义了一些字段使上次协议能共享数据链路层。 在实际使用中,LLC子层并非必需的。

 装拆箱子工人

<7>  物理层     

        实际最终信号的传输是通过物理层实现的。通过物理介质传输比特流。规定了电平、速度和电缆针脚。常用设备有(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆。这些都是物理层的传输介质。

         快递寄送过程中的交通工具,就相当于我们的物理层,例如汽车,火车,飞机,船。

   

OSPF是支持四种网络类型的(广播,非广播,点到点,点到多点)

  • 点到点(P2P——一般是serial口)但是一般情况下直接是没有s口的,我们需要去增加板卡,加之前需要关闭电源(但是不能关,我们新建一个新的AR尝试)

一个接口到另外一个接口,中间没有任何别的接口;支持广播和组播

  • 广播型网络(MA)(接口都是以太网的口——ethernet)
  • NBMA网络(非广播-多路访问网络)——RTA,RTB,RTC都可以互相通信
    • 不支持广播,组播,此时可以通过peer指
  • P2MP网络(点到多点网络)——RTA可以和RTB通信,RTA可以和RTC通信,但是RTB和RTC之间不能直接通信(如果要通信可以通过RTA通信)

OSPF的度量方式

cost(开销)=参考带宽值(默认为100M兆)/实际带宽

更改cost的两种方式:

  • 直接在接口下配置;(一般选择这种方式)

  • 修改参考带宽(所有路由器都需要修改,确保选路一致性)。
  1. OSPF
  2. int g0/0/1
  3. bandwidth-reference ?

E口是百兆

G口是千兆

cost=0.1但是OSPF中开销值必须是整数所以我们取成1

所以这样子的话E和G口都是1了这样子的话就不太好

所以我们有的时候会把参考带宽价值改为1000M

  • E口cost=10
  • G口cost=1

OSPF协议报文头部

首先OSPF是封装在IP报文里面的

二层,三层后面就是OSPF

我们如何判断IP报文后面跟的是OSPF呢,里面有一个协议字段是89的话就意味着后面跟的是OSPF

报文头部包含了

  • version:版本(一般是2,3的话一般是运用在IPV6里面的)
  • type:OSPF报文类型
  • packet length:报文长度
  • router id:表示生成此报文的路由器的Router ID
  • area id:表示此报文需要被通告到的区域
  • checksum:校验位
  • auth type:认证类型:为0时表示不认证;为1时表示简单的明文密码认证;为2时表示加密(MD5)认证。

OSPF报文类型

1.type为1时就为hello报文:在路由器各自配置好OSPF协议之后,就会向其他邻居发送hello报文,发送好之后就会建立邻居关系

2.database description:数据库描述(摘要信息)——DD报文:建立好邻居关系之后就会发送DD报文(数据库摘要信息)

3.Link State Request:链路状态请求——LSR

4.Link State Update:详细的链路状态信息——LSU

5.Link State ACK:确认报文——LSAck

具体顺序:

  • AR1和AR2各自配置好OSPF协议之后会发送hello报文建立邻居关系
  • 建立好邻居关系之后AR1会发送给AR2一个DD报文(数据库摘要信息),此时AR2中有两条LSA信息自己的和AR1发过来的吧,AR1此时只有自己的LSA信息
  • 此时AR1会向AR2发送一个LSR去请求自己缺少的一个LSA
  • 那AR2收到之后就会回复给AR1一个LSU
  • AR1收到之后也会回复给AR2一个LSAck

这个过程我们生活化例子一下:

  • 我们和一个陌生人做好朋友,第一步肯定是互相打招呼sayhello
  • 第二部就是双方互相简单的介绍一下自己(比如名字,兴趣爱好什么)
  • 觉得对方和我比较合那我可能会向对方要一个电话方便联系
  • 对方觉得你也蛮合得来,比如还会给你微信,QQ这些可能更加接近生活圈子的聊天软件
  • 微信加我之后发一个确认信息

OSPF报文的功能需求

功能

实现分析

发现邻居与保持

Hello机制即可实现(只要在死亡间隔之内发送就可以一直保持邻居关系,一旦比如超过死亡间隔了,那我们就取消关系)

LSA同步(LSR,LSU,DD报文同步)

双方互相发送LSA,完成同步;

同时同步速度更快,占用资源更少

可靠性(LSAck)

确保LSA同步过程的可靠性

OSPFLSDB同步

LSDB同步的前提是双方已经在2-way的状态了(邻居的最终状态)

我们称下面的是邻接关系

  • extart(重新开始):发送DD报文(假的DD报文确定谁先发就是确定一个主从关系——Master,Slave,主的话先发DD报文)这个假的DD报文中包含的就不是数据库一些简要信息,主要是包含的是序列号,主从,Router ID等,谁的Router ID大谁就是主,因为RTB的router id大所以RTB变为主
  • exchange:确定为主从关系之后就会变成exchange状态,此时我们可以看到DD报文中序列号变成Y变成了以RTB为主,此时DD报文就是真的了(就会包含真正的链路状态数据库)
  • loading:交互好真正的DD报文之后会发现双方的数据库不是同步的,那此时就需要进入loading的状态即是加载(加载过程中就会发送LSR,LSU,LSAck)
  • full:当最后数据库完全同步之后就变成full状态

OSPF邻居状态机

Attempt:是NBMA中特有的状态(和Init状态差不多属于初始化状态就是收到了hello报文但是邻居列表中还没有对方)

这是形成邻居关系的过程和相关邻居状态的变换过程。

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已经同步。

邻居状态的稳定关系是在2-way

邻接状态的稳定关系是在full

邻接是更深的邻居,但是邻居不是邻接

 

LSA头部

LSA是OSPF链路状态信息的载体

  • LS age(年龄):越小越新,越新越好,越好就越可靠
  • LS tyoe:表示我们LSA的格式
  • LS ID:用来标识链路的
  • Advertising Router:指的是这个LSA的发送者
  • LS seq num:序列号码(越大越好,越大表示越新)

MA(广播)网络中的问题

DR是指定路由器

  • 管理复杂,因为邻接关系多,要达到full状态的话必须要先使LSDB同步完成,那此时就需要泛洪很多的LSA
  • LSA信息太多的话占用很多链路带宽,就会导致我们有用的信息堵车了

选举DR的作用就类似于我们现在要收作业,我可能带5个班级一个班级20个人那我就要收取100份作业,都发给我的话我还要去统计信息,下载作文文档等,那如果我每个班级选择5个班长,班长帮我统计作业上交信息,把每位同学的word作业下载好打包成一个压缩包给我,这样子是不是就会节约很多时间

DRBDR作用

DR就类似于伪节点,所有的路由器都会把LSA传递到DR上,DR再把一个完整的LSDB发布给每个路由器,减少中间LSA大量泛洪信息

DR故障了,就需要BDR(备份的DR)

DRBRD选举

选举规则:DR/BDR的选举是基于接口的。

  • 接口的DR优先级(路由器的优先级0-255;缺省(默认)的路由器优先级为1,优先级为0是代表这个路由器不参与选举)越大越优先。
  • 接口的DR优先级相等时,Router ID越大越优先。

这里面有几条链路?1条因为大家都是属于10.1.1.0这个网段的

这个图是这样子的原先是RTA,RTB,RTC三个路由器,那RTA优先级是100,那肯定就是DR,95的RTC就作为BDR,此时加进来一个RTD,最后的DR还是RTA

OSPF里面有一个机制就是不抢占机制(为了整个网络的稳定性,所以不抢占)

如果此时RTA宕机了,那么继承者是谁?是RTC因为RTC是BDR(顺位继承)那此时RTD可以被选举成一个新的BDR(DR other就是什么都不是)

 

邻居关系(DR other之间的关系)

邻接关系(DR,DR other之间的关系)

邻居关系不一定是邻接关系,但是邻接关系一定是邻居关系

邻居与邻接关系

display ospf peer brief

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值