zoukankan      html  css  js  c++  java
  • CCNA-OSPF 基础

    OSPF Open Shortly Path First,开放最短路径优先选择,是一个企业级的(IGP Interior Gateway Protocol )高级路由协议,open代表是开放,公有的。
    是Link-State-Routing-Protocols,链路状态型协议。

    与距离矢量型的路由协议的区别:
    距离矢量型里有协议是个基于“谣言”的路由协议,因为不同的路由器之间相互交换的路由信息(怎么样到达目标网络)全部都靠邻居告诉,所有的路由协议都是靠别人判断,而且每个路由器不一定有保存全网的信息。而链路状态型协议,他的路由选择是每个路由器独立决策的,依据于每个路由器都会维护一个全网的网络信息,这个网络信息是通过不同的路由器相互交换链路状态信息而获取到的。

    链路状态信息:用来描绘网络拓扑的信息,类似于地图。
    链路状态型路由协议只要保证每个路由器都拥有全网的网络拓扑信息,并且所有的路由信息都是一致的,这样就能做到即使每个路由器都是独立决策的,所有的路由器的决策也是一致的。

    Link-State-Routing-Protocol
    1.相比距离矢量型路由协议,链路状态型路由协议保存更多的、更详细的网络拓扑信息
    2.每个路由器保存全网(或区域)拓扑信息
    3.一般来讲,链路状态协议比距离矢量型协议判断决策更加精确

    OSPF 是通过LSA数据结构进行描述,Link-State Advertisement,链路状态通告
    LSA总共有十几种,但在思科的设备上只支持6种(1-5,7)

    LSA 工作过程:路由器之间相互交换链路状态信息,去构成一个LSDB或者Topological Database,这个数据库就是全网的拓扑图/地图,然后基于这个拓扑图,运行SPF Algorithm算法构建全网的Shortest Path First Tree,最短路径拓扑树,然后从这个里面选择最优的路径(第二次运行Algorthm算法),放在路由表里

    ospf也是触发更新:在第一次更新之后,每个路由器之间只在发生拓扑变化的时候发送少量更新 。

    Link-State-Data-Structures 链路状态数据结构
    1.邻居表Neighbor Table:
    ①邻居数据库
    ②保存所有已知邻居
    2.拓扑表Topology Table:
    ①又称为链路状态数据库(LSDB)可以理解为网络的地图
    ②Contains all routers and their attached links in the area or network
    ③Identical LSDB for all routers within an area
    3.路由表 Routing Table
    ① 又称为转发数据库(forwarding database/RIB)
    ②保存到达目标网络的最优路径

    OSPF adjacencies 邻接
    1.路由器之间通过周期性发送hello 数据包发现维护邻接关系,发送周期有两个(老师讲的):
    局域网:10s
    NBMS:30s

    查了一下网上的资料:四种网络类型:
    point-point 点到点、broadcast 广播:10s
    point-multipoint 点对多、non-broadcast 非广播:30s
    2.路由器之间建立邻接关系需要满足一定条件
    3.在建立邻接关系之后路由器之间交换链路状态信息


    SPF Calculation

    LSDB 要经过两次SPF 运算,LSDB 同步完成后,首先通过第一次SPF 运算构建全网的拓扑图(可能存在环路),然后第二次运行SPF 算法,将中间的环路去掉,并将最优路由放到路由表中。

    OSPF 使用router-id 作为唯一标识,标识路由器。

    Router-ID 选举规则
    routerid必须要全局唯一的,所以使用IP地址就可以保证routerID是全局唯一的,也是32位的点分十进制,选举原则是自动选举的,规则如下:
    1.有手工指定的,则使用手工指定的routerID
    2.没有手工指定的,则是用环回接口中的IP 地址最高的一个作为routerID
    没有手工指定,优先选取环回接口的原因:环回接口不是真正通讯的接口,所以IP地址可以随意指定,限制少,自由度比较高,而物理接口是实际通讯接口,是别人分配的
    3.没有环回地址,则使用物理接口IP 地址最高的一个作为routerID
    注意:当作为routerID 的接口失效后,routerID不变;
               如果一个路由器上一个IP都没有,那么OSPF的进程是没法启动的
    建议做法:每台路由器上开起一个环回接口,指定IP,然后启动OSPF协议后,手动指定该环回接口的IP为router-id

    实验测试:三台相连接的路由器,拥有相同的环回IP,如1.1.1.1,启动OSPF协议后,指定这个相同的环回接口IP作为router-id,会一直弹出“detected duplicate router-id from xxx.xxx.xxx.xxx”的警告信息。因此,手工指定环回接口的时候,不能使用相同的环回接口IP作为路由器的router-id!

    OSPF LSA
    1.Each LSA in the LSDB maintains a sequence number。
    每一个LSA 在LSDB 里都有一个序列号
    2.The sequence number scheme is a 4-byte number that begins with 0x8000000 1 and ends with 0x7FFFFFFF.
    3.OSPF floods each LSA every 30 minutes to maintain proper adtabase synchronization. Each time the LSA is flooded the sequence number is incremented by one.
    为了防止LSA的老化,每30分钟就泛洪一次LSA,(其实是当时设计的一个缺陷,造成带宽的浪费)
    4.Ultimately, an LSA sequence number will wrap around to 0x80000001.When this occurs, the existing LSA is prematurely aged to the maximun age(one hour) and flushed.
    每个LSA 的最长存货年龄是一个小时,如果一个小时,LSA没有更新,就认为其太陈旧了,但是对于一个稳定的网络,可能一年都不会变动,所以就用到了第三条。
    5.When a router encouters two instances of an LSA, it must determine which is more recent. The LSA having the newer(higher) LSA sequence number is more recent.

    Link-State Data Structures:LSA Operation
    简单的处理过程(实际比这个复杂):

    收到一条LSA 后,先看是否在LSDB里面,如果不在,则加入到数据库中,并且返回收到确认码并泛洪LSA,然后运行SPF算法,更新路由表。如果LSDB中已经存在了,就查看这条LSA的序列号是否与LSDB里的那条LSA序列号一致,如果一致则忽略,如果不一致,则比较序列号的大小,如果新的LSA的序列号大,则在LSDB中旧的LSA替换成这条新的LSA,如果旧的LSA序列号大,则给LSU发送自己的这条旧的LSA信息。


    链路状态协议存在的问题
    1.每个路由器需要维护全网的拓扑信息
    ①占用大量内存 (因为维护全网的拓扑信息,比维护全网的路由信息要大的多)
    ②进行路由计算时占用大量CPU 资源
    ③每次路由计算时间较长
    ④当细节网络出现变动时,全网的路由器均需要重新收敛计算(10000个网络,100个路由器,有1个网络发生变动时,100个路由器的拓扑信息都要收到影响)

    Link-State Data Structures:
    采用分层的网络架构

    1.OSPF 强制使用分层架构
    2.OSPF 定义了网络双层结构,定义了区域概念,通过区域的划分,实现了双层的网络结构:
    ①传输区域Transit Area(骨干 backbone or area0)
    ②普通区域Regular Area (非骨干 nonbackbone areas)
    OSPF规定:一个网络可以没有普通区域,但必须有且只有一个骨干区域,即区域0
    区域编号是32bit,标准是点分十进制:如骨干区域编号为:0.0.0.0,简写为0

    OSPF Areas Features
    区域的定位是基于接口的,OSPF 所有的状态都是基于接口的,划分了区域后:
    1.最小化路由条目数量
    2. 本地化拓扑变动
    3.将LSA 泛洪限制在区域内
    4.需要一个分层的网络设计

    OSPF 设计原则
    1.网络内有且只有一个区域0
    2.普通区域 通过区域0互联,普通区域之间不能有邻接关系
    3.每个区域的网络最好是连续的,可汇总的
    4.ABR(area border router边界路由器)负责向区域0通告所在的区域汇总,最好进行汇总

    OSPF 不同区域之间不维护详细链路状态信息,而是通过ABR 通告的路由,所以OSPF 在不同区域之间实际可以看作类似距离矢量型的工作方式。

    如图,C/D/E就是ABR(area border router边界路由器),假如F或者G或者H再连接一个其他协议如RIP的路由器,则F/G/H被称为ASBR (自治系统边界路由器)
    一般骨干路由器和区域边界路由器都需要使用高性能的路由器,特别是区域边界路由器,因为它连接了两个区域,所以就需要维护两个LSDB,所以区域边界路由器的压力是最大的。


    OSPF 计算
    1.路由器通过对LSDB保存的信息使用Dijkstra's SPF 进行计算获得到达目标的最优路由
    2.每个路由拥有所在区域的而全部链路状态信息
    3.每个路由器将自己作为根,通过LSDB信息使用SPF算法构建SPF 树(即网络拓扑图)
    4.通过运算SPF 算法,比较不同路径的开销值(Cost)选择到达目标网络的最优路径,并删除环路
    5.计算出来的最优路径存入转发数据库,即路由表


    多路访问网络(MA, multi-access)有两种主要类型:①广播多路访问,broadcast如LAN,局域以太网②非广播多路访问(non-broadcast multi-access,NBMA)如FR(frame reply)帧中继网络,都是多路访问网络。
    1.MA网络:通过路由器的一个接口,不通过三层设备转发可以直接到达多台其他设备的网络叫做多路访问网络。
    2.MA网络自身特性会导致建立大量的邻接关系,LSA流量也会相应增大,为了解决这个问题,OSPF在MA网络中定义了DR/BDR 概念(Designated Router指定路由器和Backup Designated Router)
    3.在MA 网络中DR 和BDR 选举是必须的
    4.所有路由器只与DR和BDR 建立邻接关系,DR和BDR 也会建立邻接关系。
    5.发给DR和BDR的数据包使用组播地址224.0.0.6(allDRrouter,只有DR/BDR 才监听)
    6.DR发给其他路由器的数据包使用组播地址224.0.0.5(allSPFRouter,所有的SPF路由器都监听 )
    (rip v2使用的组播地址是224.0.0.9,eigrp使用的组播地址是224.0.0.10)

    选举DR 和BDR 
    首先只要DR和BDR 也是基于接口的,也就是说一个路由器可以在一个接口上是DR,在另一个接口上是BDR,在另一个接口上是DRothers(非DR且非BDR)
    1.Hello数据包通过组播形式发送
    2.接口拥有最高OSPF优先级的称为DR,拥有次高优先级的为BDR
    3.优先级相同时,使用router-id进行比较,最高的称为DR
    4.DR选举是非抢占 的
    注意:一个网络中一定有DR,但不一定有BDR
               将一个路由器的接口的优先级设置为0,则这个接口不参与DR和BDR的选举

    Maintaining Routing Information

    OSPF Packet Header Format
    OSPF 和EIGRP一样,也是使用IP 协议作为底层传输协议 协议端口是89,EIGRP的协议端口是88

    OSPF Packet Types
    IP 协议也是非周期性,所以除了Hello数据包是周期性发送,其他的几个数据包(database description、link-state request、link-state update)都要收到确认包(link-state acknowledgment),如果2-4类数据包在Retransmit 时间内(默认是5s)没有收到ack确认包,则会重发

    Neighborship:The hello Packet

    1. router id :用来唯一标识发送的路由器
    2.Hello and dead intervals *:hello(10s和30s)和死亡间隔 (40s和120s)永远是4倍的关系,且全网严格检查与其他接口的时间设置是否是一致的, 如过不一致,邻接关系则会down掉。不像eigrp,只是建议hello和hold时间全网一致
    3.Neighbors:记录所有已经知道的邻居
    4.Area ID *:这个接口所处的区域的区域ID
    5.Router priority:这个接口的优先级,用来选举DR和BDR
    6.DR IP addresss:只存在于MA网络,如果是点对点的网络,则为空
    7.BDR IP address:只存在于MA网络,如果是点对点的网络,则为空
    8.Authentication password *:认证密码
    9.Stub area flag *:末节区域标识
    2、4、8、9四点是建立邻接关系,必须匹配的

    Establishing Bidirectional Communication 建立双向通信

    必须完整的经过七个状态才能建立连接关系
    1. Down State:两个路由器还都没有收到对方发送的hello 数据包的时候,还都不知道对方的时候
    2.Init State:两个路由器A和B,其中A发送给Bhello数据包,且被B收到并记录到了B的邻居表中,也就是说,B知道A存在,但A不知道B存在
    3.Two-way State:B返回给A hello 数据包,也就说A 和B 都知道了对方的存在,且被记录到了各自的邻居表中
    选举DR和BDR 也是在这个状态进行的,并且为了公平,使用wait-time(与dead interval时间相同一般为40s,为了让所有的路由器都启动)结束后才选举出DR,也可能还有BDR。
    4.Exstart State:准启动状态,进行一个主从关系的协商, 规定由谁主持后面的LSDB的同步,协商是由二类数据包(DBD database description)规定,router-id大的是主,小的是从
    5.Exchange State:准交换状态,刚开始就同步LSDB,由主路由器发送LSDB的摘要信息/汇总信息
    6.Loading State:在上个状态信息中,如果A发现B中有自己没有的链路信息,则会发送一个三类数据包(LSR Link-State Request)请求这个没有的链路信息,B收到后,则会通过四类数据包(LSU Link-State Update:A请求的IP的完整的LSA),A收到后,返回一个五类数据包(LSAck)
    7.Full State:完成后进入,最后的状态,同步完成。

    OSPF Metric
    OSPF 协议使用Cost作为度量标准(RIP 使用跳数hop,EIGRP使用复合度量值)
    Cost = 100M/BW
    参考带宽默认未100M


    链路状态型路由协议的优点
    1.快速收敛Fast convergence:拓扑发生变化会立即被通告出去(相比EIGRP还是慢一点)
    2.更强的路由环路防止:(没有说是100%防环,EIGRP明确100% loop free)
    ①路由器知道全网拓扑
    ②链路状态数据包时顺序的和可靠传输的
    3.通过合理的网络设计,可以最优化路由资源使用(如果没有合理的网络设置,甚至不如使用其他小型的路由协议)

    链路状态型路由协议需要注意的地方
    1.对资源的使用:
    ①内存(三张表adjacency,topology,forwarding)
    ②CPU(Dijkstra算法可能占用大量的CPU时间)
    2.需要严格的网络设计(当区域数量很多时)
    3.当出现区域断裂时会出现严重问题(特别是ABR,区域边界路由器除了问题后,造成的问题比较严重)
    4.配置较为复杂,尤其是在WAN网络中
    5.排错较为复杂,很多时候需要人工分选LSDB

  • 相关阅读:
    JavaScript类型转换
    JavaScript中的 typeof,null,和undefined
    JavaScript循环
    JavaScript条件语句
    JavaScript运算符
    JavaScript字符串
    JavaScript事件
    JavaScript对象,函数,作用域
    JavaScript基础
    数值数据的特征预处理
  • 原文地址:https://www.cnblogs.com/yungiu/p/12766376.html
Copyright © 2011-2022 走看看