zoukankan      html  css  js  c++  java
  • OSPF(Open Shortest Path First)——基于链路状态的内部网关协议详解

    OSPF简介

    OSPF是基于链路状态的内部网关路由协议,OSPF可以解决网络扩容带来的问题。

    当网络上路由器越来越多,路由信息流量急剧增长的时候,OSPF可以将每个自治区域划分为多个区域,并限制每个区域的范围。

    OSPF的优点

    1、无环路

    2、收敛快

    3、扩展性好

    4、支持认证

    OSPF原理介绍

    OSPF协议规定每个运行OSPF的路由器都需要对整个网络的链路状态信息和路由信息有了解,这样才能计算出到达目的网关的最优距离,通过LSA(Link State Advertisement) 链路状态通告泛洪开始,LSA中包含了路由器的接口IP地址、掩码、开销和网络类型等信息,并通过LSA信息建立自己的LSDB,并再LSDB的基础上通过SPF算法计算出到达目的网络的最优路由,并将其加入到路由表中。

    OSPF报文

    OSPF共五类报文

    1、Hello报文:

    Hello报文的作用是发现和维护邻居关系,在NBMA网络和广播中选举DR和BDR。

    2、DD(DataBase Description)报文

    DD报文用于在LSDB同步的过程中,DD报文来描述自身的LSDB DD报文存放着LSA的信息头部,可以减少路由器之间的协议报文流量。

    3、LSR(Link State Request)报文

    LSR报文用于LSDB数据同步结束后 请求获取对方拥有的而本地没有的LSA信息,LSR报文只包含了LAS的摘要信息

    4、LSU(Link State Update)报文

    LSU报文用于发送对方请求的LSA信息

    5、LSACK报文

    LSACK报文用来对接收到的LSU报文进行确认

    邻居状态

    OSPF共五种状态

    1、Down状态:

    这是邻居的初始状态,表示在邻居失效时间内未收到邻居发送的Hello报文

    2.1、Attempet状态:

    此状态只在NMBA网络上存在,表示没有接到任何邻居消息,但是已经周期性的向邻居发送报文,如果RouterDeadInterval间隔内未收到Hello报文,则转为Down状态

    2、Init状态:

    Init状态表示已经收到邻居发送的Hello包,但自己不在所收到的hello报文的邻居列表中,未形成双向通信

    3、2-Way状态:

    此状态表示已经和邻居建立双向通信,在接收到的hello报文邻居列表中

    4、ExStart状态:

    此状态是形成邻接关系的第一个步骤,表示LSDB同步的初始状态,这时会发送DD报文,但不包含链路状态信息,主从状态和初始化DD序列号均在此步骤完成

    5、ExChange状态:

    状态开始互相发送DD报文,描述本地LSDB的内容

    6、Loading状态:

    相互发送LSR报文请求LSA,发送LSU报文通告LSA

    7、Full状态:

    完成LSDB同步。

    Router ID、邻居和邻接

    Router是一个32位的值 和IP地址构成一样,它标志了一个自治系统的路由器,如果未手动指定,默认使用逻辑接口中最大的IP地址作为Router ID

    运行OSPF的路由器直接需要交换链路状态信息和路由信息,在交换这些信息之前需建立邻接关系

    邻居(Neighbor)

    OSPF路由器启动后,便会通过OSPF接口想外发送Hello报文用于发现邻居。收到Hello报文的OSPF路由器会检查报文中的一些参数,如果参数一致,就会彼此形成邻居关系。

    邻接(Adjacency)

    只有双方交换DD报文,完成LSDB同步后才可称之为邻接

    邻居发现

    Hello报文重要字段解析

    Network Mask:发送Hello报文的接口的子网掩码

    Hello Interval:发送Hello报文的间隔时间

    Options:可选功能

    Router Prioripty:路由优先级 用于选举DR和DBR

    Router Dead Interval:路由失效时间 一般为4倍的Hello Interval,为40

    数据库同步

    1、建立完邻居关系后,RTA向RTB发送DD报文,DD序列号被设置为X,RTA宣告自己是为主路由器

    2、RTB也向RTA发送DD报文,在报文中,DD序列号被设置为Y,RTB也宣告自己为主路由器,由于RTB的Router ID比RTA的大,所以RTB是真正的主路由器

    3、RTA发送一个新的DD报文,DD序列号为Y,因此RTB将邻居状态改变为ExChange。

    4、变为ExChange后,RTB发送一个新的DD报文,DD序列号为Y+1

    5、即使RTA不需要新的DD报文来描述自己的LSDB,但是作为从路由器,要向主路由器发送的每一个DD报文做确认,所以RTA发送一个内容为空的DD报文,发送完最后一个报文的时候,RTA将邻居状态改变为Loading;RTB收到最后一个DD报文之后,改变状态为FULL

    建立完全邻接关系

    1、邻居状态变为loading之后,RTA开始对RTB发送LSR报文,请求LSA信息

    2、RTB收到LSR报文后,向RTA发送LSU报文

    3、RTA收到LSU报文后,切换至FULL状态

    4、RTA向RTB发送LSACK报文,用于对已接收LSU报文的确认

    5、此时、RTA和RTB之间的邻居状态变为FULL,表示达到完全邻接状态

    DR&BDR选举

    DR和BDR可以减少网络中邻接关系的数量,从而减少链路状态信息和路由信息的交换次数,节省带宽

    一个广播上所有路由器都必须连接DR和BDR

    DR和BDR是基于端口优先级选举的,如果优先级相同时,则根据Router id来选举

    OSPF区域

    OSPF开销

    OSPF的开销公式为:带宽参考值/带宽

     

  • 相关阅读:
    Android 新建项目报错(CANNOT RESOLVE SYMBOL R)
    GIT相关
    Java 语言基础
    StarUML
    public static void main(String[] args)的理解
    软件安装以及环境搭配
    基础
    字符串的格式化
    python里的正则表达式
    集合
  • 原文地址:https://www.cnblogs.com/xiaowangtongxue/p/14751203.html
Copyright © 2011-2022 走看看