• OSPF基本简述


    1、动态路由协议

    在路由器间启动一种协议,之后路由器间进行数据沟通,相互学习计算来获取之前未知的目标网段的路径;
    RIP、OSPF、EIGRP、BGP、ISIS  
    
    • 1
    • 2

    2、动态路由协议分类

    1)基于AS进行分类

    AS-自治系统:标准16位二进制(0-65535):1-64511(公有)、64512-65535(私有)
              	扩展32位二进制
    
    AS内运行——IGP协议(内部网关路由协议):RIP/OSPF/ISIS/EIGRP
    AS间运行——EGP协议(外部网关路由协议):EGP/BGP
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2)IGP协议分类

    【1】基于更新时是否携带子网掩码

    - 有类别(不带掩码)
    - 无类别(携带掩码)
    
    • 1
    • 2

    【2】基于工作特点进行分类

    1. 距离矢量(DV):RIP / EIGRP【共享路由表——直接学习路由条目(更新量小)】
    2. 链路状态(LS):OSPF / ISIS【共享拓扑信息——本地计算路由条目(更新量大)】

    4、OSPF简介

    - 开放式最短路径优先协议
    - 无类别链路状态型路由协议
    - 公有协议;
    - 跨层封装到三层(IP报头),协议号89;
    - 组播更新:224.0.0.5  224.0.0.6;
    - 触发更新、周期更新(30min);
    - 需要结构化的部署:区域划分、地址规划
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    5、OSPF组播

    当OSPF路由器要发报文给所有路由器时,目的IP地址填入224.0.0.5;
    当OSPF路由器(Drother)要发送报文给DR、BDR的时候,目的IP地址填入224.0.0.6;
    224.0.0.5的组播地址为OSPF所有设备的预留IP组播地址;
    224.0.0.6的组播地址为OSPF DR/BDR的预留IP组播地址。
    
    • 1
    • 2
    • 3
    • 4

    6、OSPF协议的数据包:

    1)数据包结构

    在这里插入图片描述

    2)数据包种类

    在这里插入图片描述

    1: hello:
    		组播周期发送,用于邻居、邻接关系的发现、建立、周期保活;
    		在hello包中存在本地已知邻居的RID,用于保活这些邻居;
    		hello time 10s或者30s;
    		dead time为hello time的4倍
    2: DBD(数据库描述包)
    3: LSR(链路状态请求)
    4: LSU(链路状态更新包):携带具体的LSA信息
    5: LSack(链路状态确认)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    7、OSPF协议的状态机

    Down:双方不认识,一旦本地发出hello包进入下一个状态
    Init初始化:接收到的hello包中若存在本地的RID,进入下一个状态
    2way双向通讯:邻居关系建立的标志  
    
    	进行条件匹配:点到点网络将直接进入下一个状态; MA网络类型将进行DR/BDR选举,非DR/BDR间将无法进入下一状态;
    
    Exstart预启动:使用不携带信息的DBD包进行主从关系的选举,RID数值大为主,优选进入下一状态;主从关系可以避免后面exchange状态时出现重复更新量,减少更新量
    Exchange准交换:使用真正的DBD包进行数据库目录的共享,需要使用LSack确认
    Loading加载:基于对端的数据库目录,对照本地,然后使用LSR来获取未知的LSA信息,对端使用LSU共享LSA,需要LSack确认;
    Full转发:邻接关系建立的标志
     
    LSA:链路状态通告,在不同的网络条件下将产生不同类别的LSA信息来代表拓扑或者路由条目;
    LSDB:链路状态数据库  装载和存储所有各种类别的LSA;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    8、OSPF的工作过程

    OSPF协议启动后,A向本地所有启动了OSPF协议的直连接口组播224.0.0.5发送hello包;本地hello包中携带本地全网唯一的router-id;
    之后对端B运行OSPF协议的设备将回复hello包,该hello包中若携带了A的routerid,那么A/B建立为邻居关系;生成邻居表;
    邻居关系建立后,邻居间进行条件匹配,匹配失败就停留于邻居关系,仅hello包周期保活;
    条件匹配成功可以开始建立邻接关系:
    邻接间共享DBD包,将本地和邻接的DBD包进行对比,查找到本地没有的LSA信息目录;
    之后使用LSR来询问,对端使用LSU应答具体的LSA信息,之后本地再使用ack确认,可靠;
    该过程完成后,生成数据库表;
    再之后本地基于数据库表,启用SPF选路规则,计算到达所有未知网段的最短路径,然后加其加载到本地的路由表中;收敛完成,hello包周期保活,每30min再周期收发一次DBD来判断和邻接间数据库是否一致;

    结构突变:

    • 新增网段 直连新增网段的设备,将直接使用LSU包来告知本地所有邻接,之后邻接传邻接扩散到全网,需要ACK确认
    • 断开网段 直连断开网段的设备,将直接使用LSU包来告知本地所有邻接,之后邻接传邻接扩散到全网,需要ACK确认
    • 无法沟通 dead time 为hello time 的4倍;当dead time到时时,断开邻居关系,删除通过该邻接生成的路由协议;

    9、OSPF的基础配置

    [R1]ospf 1 router-id 1.1.1.1	//启动时,需要定义进程号;进程号仅具有本地唯一性;
    
    • 1

    建议同时配置全网唯一的router-id
    router-id生成顺序:手工—>本地环回接口中最大ip地址数值—>本地物理接口中最大数值的ip地址

    [R1-ospf-1]area 0		//进入对应区域
    [R1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0		//宣告
    
    • 1
    • 2

    宣告:ospf协议在宣告的同时需要进行区域划分

    区域划分规则:

    1. 星型拓补——非骨干区域需要连接骨干区域,其中的区域0为骨干区域,大于0的区域为非骨干区域
    2. 必须存在ABR——区域边界路由器——区域间必须存在一个边界设备(可以有n个)
    [r2-ospf-1]area 0     //先进入区域,之后再该区域内宣告属于该区域的接口,宣告时必须携带反掩码
    [r2-ospf-1-area-0.0.0.0]network 12.1.1.2 0.0.0.0
    [r2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0
    [r2-ospf-1-area-0.0.0.0]quit 
    [r2-ospf-1]area 1 
    [r2-ospf-1-area-0.0.0.1]network 23.1.1.1 0.0.0.0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    启动配置完成后,邻居间收发hello包,建立邻居关系,生成邻居表:

    [r2]display  ospf peer
    [r2]display  ospf peer  brief
    
    • 1
    • 2

    邻居、邻接关系的发现、建立、保活均依赖hello包进行;

    Hello包携带的参数:
    在这里插入图片描述

    抓包:
    在这里插入图片描述

    邻居间在进行邻居关系建立时,hello包有几个参数必须完全一致,否则无法建立邻居关系;
    Hello包中邻居间必须完全一致的参数:

    1. 子网掩码(华为独有)发送hello包接口的源ip地址其掩码
    2. Hello time / dead time——OSPF接口网络类型相关
    3. 认证字段——更新安全
    4. 区域ID——要求区域间存在ABR
    5. 末梢区域标记(特殊区域标记)

    邻居关系建立后,进行条件匹配,匹配失败将保持为邻居关系,仅hello包周期保活;匹配成功将可以建立为邻接关系;
    紧接着先用DBD包进行主从关系选举,再使用DBD包进行数据库目录的交互;
    关于DBD包的几个参数:
    1)MTU——OSPF协议会在DBD包中携带与邻居直连接口的MTU值;要求邻居的MTU值必须完全一致,否则将会卡在exstart状态机;默认华为设备间不检测MTU值;

    [R1]interface GigabitEthernet 0/0/1
    [R1-GigabitEthernet0/0/1]ospf mtu-enable
    
    • 1
    • 2

    【在邻居间直连接口上开启MTU检测,要求两端都要开启】
    2)隐形确认——一台设备使用和另一台设备一样的序列号来确认对端的数据,OSPF中从对主进行隐形确认;
    3)描述字段——分为三位,分别是I位、M位和MS位,I位为1表示本地发出的第一个DBD包,M位为0表示本地发出的最后一个DBD包,MS位为1代表主,MS为0代表从

    在使用DBD包相互交互完数据库目录后,再使用LSR/LSU/LSack来获取未知的LSA信息;
    最终实现所有设备的LSDB一致,生成数据库表;

    <R1>display ospf lsdb		//查看数据库表 
    
    • 1

    当数据库同步完成后,OSPF将基于本地的LSDB以及SPF算法,计算为有向图—>树形结构—>最短路径加载于路由表中;

    思科:

    O - OSPF, IA - OSPF inter area 
    N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
    E1 - OSPF external type 1, E2 - OSPF external type 2
    O 同一区域内,本地通过拓扑计算所得
    O IA 域间路由,ABR通过其他区域的拓扑计算所得路由,然后共享到另一个区域;本地区域另一区域
    O E1/2  域外路由    其他协议或其他进程产生后,通过ASBR重发布进入到OSPF协议
    O N1/2  NSSA域外路由   其他协议或其他进程产生后,通过ASBR重发布进入到OSPF协议,同时学习到这条路由的设备处于OSPF的一种NSSA的特殊区域中
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    华为设备优先级默认为10;

    <R1>display ospf routing		//查看本地所有与OSPF相关的路由,发出+接收的
    
    • 1

    度量为cost值=开销值=参考带宽/接口带宽
    OSPF选择整段路径cost值之和最小为最短路径,默认参考带宽为100M
    若接口带宽大于参考带宽,cost值仍然为1,可能导致选录不佳
    可以修改设备的参考带宽:

    [R1]ospf 1
    [R1- ospf-1]bandwidth-reference ?
       INTERGER<1-2147483648>  The reference bandwidth (Mbits/s)
    [R1- ospf-1]BANDWIDTH-REFERENCE 1000
    
    • 1
    • 2
    • 3
    • 4

    切记:若进行修改,整个网络中所有设备需要修改为一致

    10、OSPF协议邻居成为邻接关系的条件

    关注网络类型:
    1)点到点网络:邻居正常必然成为邻接关系
    2)MA网络:由于OSPF不支持接口的水平分割,故若两两设备间均为邻接关系,将导致大量的重复更新。因此必须进行DR/BDR选举,DR/BDR使用组播224.0.0.6;
    在该网段内的非DR/BDR设备间只能建立为邻居关系;

    DR/BDR选举规则:
    1)先比较参选接口的优先级0-255数值大优,为0表示不参选,优先级默认为1;
    2)若优先级相同,比较参选设备的RID值,数值大优;

    修改接口优先级可以干涉选举:

    [R1]interface GigabitEthernet 0/0/1
    [R1-GigabitEthernet0/0/1]ospf dr-priority        修改参选接口优先级
    
    • 1
    • 2

    注:DR选举为非抢占行为,故修改优先级需要重启OSPF进程

    <R1>reset ospf process         重启OSPF协议
    Warning: The OSPF process will be reset. Continue? [Y/N]:y
    
    • 1
    • 2

    11、OSPF的接口网络类型——OSPF的协议在不同网络类型的接口上,其工作方式不同

    <R1>display ospf interface GigabitEthernet 0/0/1		//查看OSPF协议在该接口的工作方式
    
    网络类型                                                 OSPF的工作方式
    LoopBack                        P-2-P,实际为环回专用工作方式,无hello包,32位主机路由传递
    点到点(串线HDLC/PPPP-2-P,hello time 10s,不选DR,直接建立邻居关系
    BMA(以太网)                                  Broadcast,hello time 10s,选DR/BDR
    NBMAMGRE)                      默认接口工作方式为P-2-P,该工作方式仅允许建立一个邻居关系;
                                                      导致在MGRE环境中无法建立所有的邻居关系;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    上述NBMA产生的问题可以通过修改接口的工作方式解决:
    1)修改所有接口的工作访问方式broadcast

    [R1-Tunnel0/0/0]ospf network-type broadcast
    
    • 1

    切记:在MGRE环境下,若一个网段的部分接口修改为broadcast,其它依然为点到点,由于建邻的条件匹配,故可以建立邻居关系,但broadcast需要选举DR/BDR,点到点不需要,所以最终不能正常收敛,需要该网段所有节点均为broadcast;

    拓补结构:
    ①中心到站点(轴辐状——星型结构,一个中心):DR必须定在中心站点,没有BDR需求
    ②部分网状结构(两个中心):基于实际环境关注是否固定DR
    ③全连网状结构(均为中心):DR/BDR选举正常

    2)修改所有接口的工作访问模式为P2MP

    [R1-Tunnel0/0/0]ospf network-type p2mp
    
    • 1

    Hello time 30s,不选DR/BDR,自动建立邻居关系;

    12、名词解释

    1. LSA:链路状态通告,在不同环境下产生不同的拓补或路由,一条信息为一个LSA
    2. LSDB:链路状态数据库,整个网络LSA的整合
    3. LSDB同步:OSPF的收敛性为,整个网络LSDB需要一致,通过LSA达到
    4. LSA洪泛:OSPF的收敛行为,需要整个网络接收到同一条LSA
  • 相关阅读:
    JAVA遍历Map的几种方法
    C++ --- Day04 继承
    leetcode 15. 三数之和
    企业浏览器安全管理
    信息安全管理与评估 21年国赛真题解析答案(待更新)
    C语言中的宏定义和内联函数有什么区别?
    第十章、python字符串操作与with语句及上下文管理器------字符串的匹配与分割、字符串连接
    JVM 性能调优参数
    web3相关教程资讯集锦
    使用golang+antlr4构建一个自己的语言解析器(二)
  • 原文地址:https://blog.csdn.net/JohnnyG2000/article/details/124917514