OSPF原理

  • 简介

OSPF(Open Shortest Path First),即开放式最短路径优先。是IETF组织开发的一个基于链路状态的内部网关协议。针对OSPFv2(工作在IPv4环境)RFC 2328进行了说明。

  1. OSPF把自治系统AS在逻辑上划分成一个或多个区域
  2. OSPF通过LSA(Link State Advertisement)的形式计算路由
  3. OSPF依靠在OSPF区域内各设备间交互OSPF报文来学习路由信息。
  4. OSPF报文封装在IP内,可采用组播或单播形式发送。
  • 链路状态

链路状态包含了设备自身被OSPF所激活接口的信息,例如:

  1. 接口IP、掩码
  2. 接口开销
  3. 接口所连邻居
  4. 接口类型
  • 工作过程
  1. 使用Hello报文发现、建立和维护邻居
  2. 泛洪自身的LSA
  3. 收集其他设备的LSA,形成LSDB
  4. 执行SPF(最短路径优先)算法,生成SPT(最短路径树)
  5. 添加路由信息
  6. 经过开销比对后,加入OSPF协议路由表
  7. 经过全局的各协议比对后,加入IP路由表。
  • 身份标识
  1. Router ID为32bit的无符号整数,采用点分十进制表示方法,格式与IP地址一致,用于在OSPF网络中唯一标识一台路由器。
  2. Router ID手工配置分为系统试图下全局配置和OSPF进程下配置
  3. Router ID自动选举首先寻找环回接口IP地址最大的,如果没有则选择物理接口IP地址最大的
  • 邻居和邻接
  1. 当设备接口被宣告以后,发送HELLO报文进行发现和建立邻居,邻居关系仅代表了双方建立了双向通信。收到hello报文中的相关参数协商通过后,且hello报文中的neighbor字段包含自己的router id时,此时状态达到2-way,建立邻居关系
  2. 当建立了邻居关系后,双方开始通过DD报文,LSR报文,LSU报文,LSACK报文进行同步LSDB,此时状态达成FULL,只有达到FULL状态才能生成OSPF路由。在P2P、P2MP中,两台设备会成为FULL关系。在broadcast和NBMA中,DR和BDR会和所有设备建立FULL关系,DRother和DRother之间仅保持2-way。
  • OSPF报文
  1. OSPF公共头

    • Version:版本,目前是OSPFv2
    • Type:表示报文类型,总共有Hello、DD、LSR、LSU、LSACK
    • Packet Length:表示OSPF报文长度,单位是字节
    • Router ID:发送此报文的设备Router ID
    • Area ID:发送此报文设备的接口所属区域ID
    • Checksum:校验和
    • Auth Type:认证类型,总共有NULL、simple、MD5
    • Authentication:认证内容
  1. Hello报文

用于发现、建立、维护邻居,目的地址是224.0.0.5,在NBMA中采用手工配置的单播发送

  1. DD报文

用于交互双方的LSDB摘要信息,携带的是LSDB中所有LSA的头部信息。DD报文头部会携带序列号、MTU、I位、M位、MS位。I位置位只存在Exstart状态下的用于选举主从的空DD报文中。M位置位表明后续有更多的DD报文发送。MS位表明主或从,主设备MS=1,从设备MS=0。

  1. LSR报文

用于请求特定的LSA,携带的是LSA的三元组,即LS type、LS ID、Advertisement

  1. LSU报文

用于发送完整的LSA内容,携带的是完整的LSA内容

  1. LSACK报文

用于对收到的LSU确认

  • OSPF的开销
  1. 基于带宽计算,公式为参考带宽/实际带宽,得出的值不足1按1算。参考带宽默认为100Mbps
  2. 也可手工配置接口的OSPF Cost值,范围是1-65535
  • OSPF的网络类型
  1. Broadcast类型
  1. 当链路层协议为Ethernet时,OSPF缺省情况会认为网络类型是Broadcast。
  2. 通常以组播形式发送Hello报文、LSU报文和LSAck报文。其中,224.0.0.5的组播地址为OSPF设备的预留IP组播地址;224.0.0.6的组播地址为OSPF DR/BDR的预留IP组播地址。
  3. 以单播形式发送DD报文和LSR报文。
  1. NBMA类型
  1. 当链路层协议为FR、ATM时,OSFP缺省情况会认为网络类型是NBMA
  2. 以单播形式发送Hello、DD、LSR、LSU、LSACK
  1. P2P类型
  1. 当链路层协议为PPP、HDLC时,OSFP缺省情况会认为网络类型是P2P
  2. 在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)。
  1. P2MP类型
  1. 没有一种链路层协议会被OSPF缺省情况下认为是P2MP点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网络。
  2. 以组播形式(224.0.0.5)发送Hello报文。
  3. 以单播形式发送其他协议报文(DD报文、LSR报文、LSU报文、LSAck报文)。
  • 邻居状态机
  1. Down

表明当前没有接收到Hello报文

  1. Attempt

此状态只在NBMA中存在,表明单播发送向对方周期性发送Hello报文,但是没有收到Hello报文

  1. Init

表明收到了Hello报文,但是收到的Hello报文中没有发现本端的Router ID

  1. 2-way

表明收到了Hello报文且发现了本端的Router ID

  1. Exstart

表明已发送空DD报文,用于选举主从关系,确定主的序列号,保证后续DD报文发送的有序性。

  1. Exchange

表明已发送有内容的DD报文,用于描述本设备的LSDB的摘要信息

  1. Loading

表明正在加载LSA,即发送LSR、LSU、LSACK的过程

  1. Full

表明设备间的LSDB已同步。

  • 邻接关系建立
  1. 当接口被OSPF宣告时,通过该接口自动向外发送HELLO报文,目的IP地址为224.0.0.5
  2. 运行OSPF协议的路由器,会监听224.0.0.5这个组播地址。此时收到一个hello报文,通过查看hello报文中所携带的参数,如果协商通过,向其224.0.0.5回复一个hello报文,其中neighbor字段填充为对方的router id
  3. 收到一个hello报文中,参数协商通过且neighbor字段中包含自己的router id,那么把和对方的状态变为2-way,再次将对方的router id填充到neighbor字段中。
  4. 通过hello报文到达2-way后,双方开始发送DD报文(单播)
  5. 首次发送的DD报文,称为first DD(空DD),用于确定一个主从关系,保证后续DD报文的一个有序性,可靠性。其first DD不携带LSDB的摘要信息(Exstart状态)
    1. 两端发送first DD报文,其中携带了序列号,MTU,I,M,MS
    2. I位置1代表是一个first DD报文,M位置1代表后续还有更多的DD报文,MS位置1代表自己是master设备,要参加竞选
    3. 两端收到first DD报文后,选择router id大的一方作为master,小的一方作为slave
    4. 作为slave设备,每次都需要使用master设备提供的序列号发送自己的DD报文
    5. 作为master设备,每次发送DD报文都将序列号+1
    6. 提供确认机制,保证连续性,可靠性
  6. 随后两端发送DD报文,其中携带了各自的LSDB的摘要信息,以便让对方知道自己所需要的LSA(Exchange状态)
  7. 根据DD报文,自己已经知道了所需要的LSA,通过LSR报文(单播)向对方请求完整的LSA(Loading状态)
  8. 收到LSR报文后,通过LSU报文(组播)向其发送完整的LSA内容
  9. 收到LSU报文后,通过回复LSACK(组播)报文,作为确认。(Full状态)
  • DR和BDR
  1. 邻居关系(2-way状态后)建立成功之后,在广播/NBMA网络上需要选举DR/BDR
  2. 产生原因:当MA网络中,任意两台路由器之间都要传递以及建立FULL状态的话,那么假设网络中有20台路由器,建立的数量为N*(N-1)/2。不仅建立FULL关系的数量特别多,而且任何一台路由器都会收到重复的LSU报文,同样的LSU会传递很多次,造成大量带宽浪费。
  3. 所有DRother设备只和DR和BDR建立FULL状态,DRother之间只建立2-way状态。DRother设备只向DR/BDR(224.0.0.6)发送信息。再由DR向224.0.0.5发送信息即可。减少邻接关系,减少LSA泛洪。
  4. 选择DR优先级大的(0-255,默认1,0为放弃选举)
  5. DR优先级相同,选择router id大的
  6. DR/BDR不支持被抢占

十二、如何判断是否要和邻居路由器建立邻接关系?

    • 如果是P2P链路,则需要建立邻接关系
    • 如果是P2MP链路,则需要建立邻接关系
    • 如果是v-link(虚连接)链路,则需要建立邻接关系
    • 如果自己是DR/BDR,则需要建立邻接关系
    • 如果邻居是DR/BDR,则需要建立邻接关系

     

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小禹先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值