一、OSPF基础术语Router-ID

Router-ID是一个32位无符号整数,用于唯一标识一台运行OSPF协议的路由器。

Router ID选举规则如下:

  1. 手动配置oSPF路由器的Router ID(建议手动配置)
  2. 如果没有手动配置Router ID,则路由器使用Loopback接口中最大的IP地址作为Router ID
  3. 如果没有配置Loopback接口,则路由器使用物理接口中最大的IP地址作为Router ID

Loopback是路由器里面的一个逻辑接口。逻辑接口是指能够实现数据交换功能,但是物理上不存在、需要通过配置建立的接口。Loopback接口一旦被创建,其物理状态和链路协议状态永远是Up,即使该接口上没有配置IP地址。

区域(待补充)

  • OSPF Area用于表示一个OSPF的区域。

  • 区域是从逻辑上将设备划分为不同的组,每个组用区域号Area ID来标识。

  • OSPF的区域D是一个32bit的非负整数,按点分十进制的形式(与1Pv4地址的格式一样)呈现,例
    如Area 0.0.0.1。 为了简便起见,我们也会采用十进制的形式来表示。

链路的两端的路由器需要再同一个区域里。

待补充。。。。。计算机网络课本。。。主区域之类的度量值

OSPF使用Cost(开销)作为路由器的度量值。每个激活了OSPF的接口都会维护一个Cost值,缺省Cost=(100Mbit/s)/接口宽带(cost的值向下取整,若小于1则取1)。其中100Mbit/s为OSPF指定的缺省的参考值,该值是可配置的。

修改Cost值:1.直接修改接口的Cost值(推荐)。2、修改参考值。

OSPF以“累计cost”为开销值,也就是流量从源网络到目的网络所经过所有路由器的出接口cost总和

度量值修改举例:

上图(左):由于参考值缺省,且四条链路都是GE型,接口带宽相同,所以计算出的Cost值都相等。所以,对于R1来说,无论是通过R2到达R4,还是通过R3到达R4,开销都是一样的,所以会根据某种算法(例如负载均衡)选择一条路径。

上图(右):对于R1来说,两条路径开销不同,选择开销较小的路径发送数据。

二、OSPF三张表(待补充)

OSPF有三张重要的表项,OSPF邻居表、LSDB和OSPF路由表。

1、邻居表

对于OSPF的邻居表,需要了解:

  • OSPF在传递链路状态信息之前,需先建立OSPF邻居关系。
  • OSPF的邻居关系通过交互Helo报文建立。
  • OSPF邻居表显示了OSPF路由器之间的邻居状态,使用display ospf peeri查看。

2、LSDB

对于OSPF的LSDB,需要了解:

  • LSDB会保存自己产生的及从邻居收到的LSA信息,本例中R1的LSDB包含了三条LSA。
  • Type标识LSA的类型,AdvRouter标识发送LSA的路由器。
  • 使用命令display ospf lsdb查看LSDB表。

3、OSPF路由表

对于OSPF的路由表,需要了解:

  • OSPF路由表和路由器路由表是两张不同的表。本例中OSPF路由表有三条路由。
  • OSPF路由表包含Destination、Cost和NextHop等指导转发的信息。
  • 使用命令display ospf routing查看OSPF路由表。

三、OSPF七种状态机

状态机名称状态机描述
Down(失效)该状态还没有进行hello包的收发,一旦进行hello的收发,则进入下一状态
Init(初始化)收到的hello包中并不存在本地的(自己的)route-id,但是会将发送该hello包的邻居置为init状态,此时双方并没有建立双向通信,随着双方互相收发hello包,于是才会进入下一状态
2-way(双向通信)接收到的hello包中存在本地的(自己的)route-id,则双方就会进入2-way双向通信状态。该状态也是OSPF最稳定的状态之一,它标志着邻居关系的建立,同时也是邻接关系建立的基础
Exstart(预启动)使用类似hello的DD报文进行主从关系(Master/Slave)选举,route-id数值大为主,优先进入下一状态。此时的DD报文是空的。
Exchange(准交换)使用真正的DD报文进行数据库目录的共享
Loading (加载)使用LSR、LSU、LSAck去获取未知的LSA信息LSDB同步
Full(全毗邻)邻接关系建立的标志,此时不再进行LSDB的同步

一些字段的详细解释:

Exstart

发送DD报文(此处DD报文不包含LSA头部信息)

作用:

1、决定主从关系(Router-ID大的为主路由器,小的为从路由器)

2、确定序列号保证报文交互的可靠性

3、比较MTU(可选,缺省不比较)

MTU对邻居建立的影响

1、主的MTU值比从设备的MTU值小;两端都会停留在Exstart状态

2、主的MTU值比从设备的MTU值大;从设备会停留在Exchange状态,主设备停留在Exstart状态

3、两端有一段未开启MTU值检测,则两端可以建立邻居

Exchange

通过交换DD报文,交换LSA头部信息

具体的交互流程

上述Exstart状态决定出主从关系后,即从设备此时收到了主设备发来的空的DD报文

从设备使用主的序列号发送DD报文来回应主(此时DD报文包含LSA头部信息)

主也通过DD报文发送自己的LSA头部信息,并将序列号加1

从又使用主的序列号回应主;一直循环,直到主与从的M位都不置位(或者说只要有一侧有未传递的LSA头,就会一直循环)

四、OSPF四种网路类型

OSPF协议支持四种网络类型,分别是点到点网络广播型网络NBMA网络点到多点网络

1、BMA

广播型网络(Broadcast Multiple Access)是指支持两台以上路由器,并且具有广播能力的网络。一个含有三台路由器的以太网就是一个广播型网络的例子。

OSPF可以在不支持广播的多路访问网络上运行,此类网络包括在hub-spoke拓扑上运行的帧中继(FR)和异步传输模式(ATM)网络,这些网络的通信依赖于虚电路。

OSPF定义了两种支持多路访问的网络类型:非广播多路访问网络(NBMA)点到多点网络(Point To Multi-Points)

2、NBMA

非广播式多路访问(Non Broadcast Multiple Access)在NBMA网络上,OSPF模拟在广播型网络上的操作,但是每个路由器的邻居需要手动配置**。NBMA方式要求网络中的路由器组成全连接。

缺省情况下,OSPF认为帧中继、 ATM的网络类型是NBMA。

3、P2P

点到点网络(Point-to-Point)是指只把两台路由器直接相连的网络。一个运行PPP的64K串行线路就是一个点到点网络的例子。

4、P2MP

点到多点(point to multi point):将整个网络看成是一组点到点网络。对于不能组成全连接的网络应当使用点到多点方式。

实际情况下,没有哪一种网络拓扑是P2MP网络,需要通过命令来改变网络类型。

5、四种网络的特点

网络类型特点Hello Interval例子
广播BMA需要DR和BDR的选举,不用手动指邻居
通常以组播发送HELLO报文,LSU报文,和LSACK报文,以单播形式发送DD和LSR报文
DR和BDR给非指定路由器发送消息使用的是组播224.0.0.5
非指定路由器给DR和BDR发送消息使用的是组播224.0.0.6
10秒以太网
非广播多路访问NBMA连接的路由器超过两台但是没有广播功能
所有数据包均单播发送,有DR的选举,需要手动指定邻居
30秒帧中继网络和ATM网络
点对点P2P使用组播224.0.0.5来发送各种数据包
没有DR/BDR的选举,直接形成full邻接关系,不用手动指邻居
10秒PPP链路,HDLC链路
点到多点P2MPHello包以组播形式发送,其他类型数据包由单播发送
不选举DR,不用手动指邻居
30秒

现实中遇到的大部分属于点到点网络广播型网络,因为帧中继、 ATM网络基本已经淘汰了。

6、可根据实际情况按需调整网络类型

  • OSPF的网络类型是根据接口的数据链路层封装自动设置的
  • 图中的路由器采用以太网接口互联,因此这些接口的网络类型缺省均为Broadcast
  • 每段链路实际上都是点对点链路,因此在链路上选举DR与BDR是没有必要的。
  • 为了提高OSP的工作效率,加快邻接关系的建立过程,可以把这些互联接口的网络类型都修改为P2P

一条链路两端的路由器接口的OSPF网络类型应该要相同。

五、OSPF五种报文类型OSPF报头

OSPF一共定义了5种类型的报文,不同类型的OSPF报文有相同的头部格式
OSPF报文直接采用IP封装,在报文的IP头部中,协议号为89。

各个字段的解释:

  1. Version(版本号):当前广泛实现的版本是OSPF v2,值为2。
  2. Type(类型): 1字节 ,表示OSPF报文的类型,有下面几种类型:Hello报文;DD报文;LSR报文;LSU报文;LSAck报文。
  3. Packet length(报文长度) :2字节,OSPF报文的总长度,包括报文头在内,单位为字节。
  4. Router ID(路由器ID):4字节,发送该报文的路由器标识。
  5. Area ID(区域ID): 4字节 ,发送该报文的所属区域。
  6. Checksum 校验和):2字节,校验和,包含除了认证字段的整个报文的校验和。
  7. AuType(鉴别类型):2字节 ,验证类型值有如下几种表示, 0表示不验证;1表示简单(明文)认证;3表示MD5认证。
  8. Authentication(鉴别):8字节 ,鉴定字段,其数值根据验证类型而定。当验证类型为0时未作定义;类型为1时此字段为密码信息;类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息。MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中。

五种报文类型

  1. Hello报文:周期性发送,用于发现和维持邻居关系;

  2. DD报文(DataBase Description Packet):数据库描述报文,描述本地LSDB的摘要信息,用于两台路由器进行数据库同步;

  3. LSR报文(Link State Request Packet):链路状态请求报文,向对方请求所需要的LSA;

  4. LSU报文(Link State Update Packet):链路状态更新报文,向对方发送其所需要的LSA或者泛洪自己更新的LSA;

  5. LSAck报文(Link State Acknowledgment Packet):链路状态确认报文,用于对收到的LSA进行确认。

注:Hello报文和LSAck报文不需要确认。

LSA与LSAck是不同的:

  • 链路状态公告LSA (Link State Advertisement):LSA中包含了路由器已知的接口状态、接口IP地址、掩码、开销和网络类型等信息。
  • 链路状态确认报文LSAck(Link State Acknowledgment Packet):用于对收到的LSA进行确认。

1、Hello报文格式

Hello报文的主要作用:

  • 邻居发现:自动发现邻居路由器。
  • 邻居建立:完成Helo报文中的参数协商,建立邻居关系。
  • 邻居保持:通过周期性发送和接收,检测邻居运行状态。

  • Network Mas:32bit,发送Hello报文接口的子网掩码

  • Hello Interval:16bit,发送hello报文的时间间隔,单位为秒,默认是10秒

  • Options:8bit,可选项

    ​E:允许泛洪 AS-External-LSAs;是否支持外部路由;

    ​MC:转发IP组播报文;是否支持转发组播数据包;

    ​N/P:处理Type-7 LSAs;是否为NSSA区域;

    ​DC:处理按需链路;

  • Rtr Pri:8bit,DR优先级默认为1,如果为0不参与DR/BDR选举

  • Router Dead Interval:32bit,失效时间通常为Hello Interval的4倍,40s)。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效;

  • Designated Router:32bit,本网段DR的接口地址;如果设置为0.0.0.0,表示未选举DR路由器。

  • Backup Designated Router:32bit,本网段BDR的接口地址;如果设置为0.0.0.0,表示未选举BDR。

  • Neighbor:32bit,邻居列表,以router ID标识;

2、DD报文格式

DD报文包含LSA头部信息,包括LS Type、LS ID、Advertising Router、LS Sequence Number、LS
Checksum。

两台路由器在邻接关系初始化时,用DD报文(Database Description Packet)来描述自己的LSDB,进行数据库的同步。报文内容包括LSDB中每一条LSA的Header(LSA的Header(头部)可以唯一标识一条LSA)。

LSA Header只占一条LSA的整个数据量的一小部分,这样可以减少路由器之间的协议报文流量,对端路由器根据LSA Header就可以判断出是否已有这条LSA。

在两台路由器交换DD报文的过程中,一台为Master,另一台为Slave。由Master规定起始序列号,每发送一个DD报文序列号加1,Slave方使用Master的序列号作为确认。

各个字段的解释:

I:是否为第一个。M:后面是否还有。MA是否为Master。

  • I:当发送连续多个DD报文时,如果这是第一个DD报文,则置为1,否则置为0。
  • M(More):当发送连续多个DD报文时,如果这是最后一个DD报文,则置为0。否则置为1,表示后面还有其
    他的DD报文。
  • MS(Master/Slave):当两台oSPF路由器交换DD报文时,首先需要确定双方的主从关系,Router ID大的一方会成为Master。当值为1时表示发送方为Master。
  • DD sequence numberDD报文序列号。主从双方利用序列号来保证DD报文传输的可靠性和完整性
  • Interface MTU:指示在不分片的情况下,此接口最大可发出的IP报文长度。在两个邻居发送DD报文中包含MTU参数,如果收到的DD报文中MTU和本端的MTU不相等,则丢弃该DD报文。缺省情况下,华为设备未开启MTU检查。
  • Optinons:与Hello的Optinons字段相同。

3、LSR报文格式

两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的和哪些LSA是已经失效的,这时需要发送LSR报文(Link State Request Packet)向对方请求所需的LSA。内容包括所需要的LSA的摘要。

LSR报文格式如下图所示,其中LS type、Link State ID和Advertising Router可以唯一标识出一个LSA,当两个LSA一样时,需要根据LSA中的LS sequence number、LS checksum和LS age来判断出所需要LSA的新旧。

各个字段的解释:

  • LS type链路状态类型,32比特,LSA的类型号。
  • Link State ID链路状态ID,32比特,根据LSA中的LS Type和LSA description在路由域中描述一个LSA。
  • Advertising Router通告路由器,32比特,产生此LSA的路由器的Router ID。

4、LSU报文格式

用来向对端Router发送其所需要的LSA或者泛洪自己更新的LSA,内容是多条LSA(全部内容)的集合。

LSU报文(Link State Update Packet)在支持组播和广播的链路上是以组播形式将LSA泛洪出去。为了实现Flooding的可靠性传输,需要LSAck报文对其进行确认。对没有收到确认报文的LSA进行重传,重传的LSA是直接发送到邻居的。

Number of LSAs:32比特,LSA的数量。

5、LSAck报文格式

用来对接收到的LSU报文进行确认。内容是需要确认的LSA的Header(一个LSAck报文可对多个LSA进行确认)。

LSAck(Link State Acknowledgment Packet)报文根据不同的链路以单播或组播的形式发送。

LSAs HeadersLSA头部,可变,通过LSA的头部信息确认收到该LSA。

六、OSPF工作过程

OSPF工作过程概览

1、建立邻居关系

  • OSPF使用Hello报文发现和建立邻居关系。
  • 以太网链路上,缺省时,oSPF采用组播的形式发送Hello报文(目的地址224.0.0.5)
  • OSPF Hello报文中包含了路由器的Router ID、邻居列表等信息。

neighbor:邻居

具体过程:以R2为例

  1. R2发送Hello报文来发现邻居,但没有收到邻居的Hello报文,此时状态为Down。
  2. R2收到R1的Hello报文后,得知R1是自己的邻居,但自己的Router ID不在R1的邻居列表中(表明此时,对于R1来说,R2不是R1的邻居),此时R2的状态为Init。
  3. 由于R2知道了R1是自己的邻居,所以发送的Hello报文中包含R1的Router ID。
  4. 当R2收到R1的Hello包,且其邻居列表中含有自己的Router ID,R2的状态由Init变为2-way。

如果路由器发现所接收的合法Hello报文的邻居列表中有自己的Router ID,则认为已经和邻居建立了双向连接,表示邻居关系已经建立。

验证一个接收到的Hello报文是否合法包括:

1、如果接收端口的网络类型是广播型点到多点或者NBMA,所接收的Hello报文中Network Mask字段必须和接收端口的网络掩码一致,如果接收端口的网络类型为点到点类型或者是虚连接,则不检查Network Mask字段

2、所接收的Hello报文中Hello Interval字段必须和接收端口的配置一致;

3、所接收的Hello报文中Router Dead Interval字段必须和接收端口的配置一致;

4、所接收的Hello报文中Options字段中的E-bit(表示是否接收外部路由信息)必须和相关区域的配置一致。

2、LSDB数据库同步

邻居关系建立后,邻居之间确定主从关系,然后开始发送DD报文同步LSDB

这里提到了主从关系(Master/Slave),要与DR/BDR区分开来。

  • DR/BDR是在MA网路中选举出的两台路由器,用于减少网络中的邻接关系。
  • MS主从关系是两台互相交换DD报文的邻居路由器之间的关系,其作用只是为了确定seq以Master为准,从而保证DD报文有序可靠的传输
  • MS主从关系确定,只比较Router ID的大小,大的一方成为Master。

具体过程

主从路由器的选举:

​(1)邻居状态变为ExStart以后,R1向R2发送第一个DD报文,在这个报文中,DD序列号被设置为X(假设),R1宣告自己为主路由器。

​(2)R2也向R1发送第一个DD报文,在这个报文中,DD序列号被设置为Y(假设)。RTB也宣告自己为主路由器。

由于R2的Router ID比R1的大,所以R2应当为真正的主路由器。

数据库摘要信息的交互:

​(3)当主从关系确定后,R1、R2的状态变为Exchange。R1发送一个新的DD报文,在这个新的报文中包含LSDB的摘要信息(LSDB的摘要信息可以类比成一本书的目录),序列号设置为R2在步骤(2)里使用的序列号(表示承认R2为真正的主路由器)。

​(4)邻居状态变为Exchange以后,R2发送一个新的DD报文,该报文中包含LSDB的描述信息,DD序列号设为Y+1(上次使用的序列号加1)。

​(5)R1收到R2的DD报文后,向R2发送即使R1不需要新的DD报文描述自己的LSDB,但是作为从路由器,R1需要对主路由器RTB发送的每一个DD报文进行确认。所以,RTA向RTB发送一个内容为空的DD报文,序列号为Y+1。???有点不懂这句话。

发送完最后一个DD报文之后,R1、R2的状态都变为了Loading;在此(变为Loading)之前,路由器就算在DD报文中发现了自己需要的LSA也是不会发送LSR报文的。

3、建立完全邻接关系

具体过程:接着上面的第(5)步

​(6)邻居状态变为Loading之后,R1开始向R2发送LSR报文,请求那些在Exchange状态下通过DD报文发现的,而且在本地LSDB中没有的链路状态信息。

​(7)R2收到LSR报文之后,向RTA发送LSU报文,在LSU报文中,包含了那些被请求的链路状态的详细信息。RTA收到LSU报文之后,将邻居状态从Loading改变成Full

​(8)R1向R2发送LSAck报文,用于对已接收LSA的确认。

此时,R1和R2之间的邻居状态变成Full,表示达到完全邻接状态

邻居与邻接

  • 邻居(Neighbor):OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文用于发现邻居

    收到Hello报文的OSPF路由器会检查报文中所定义的一些参数,如果双方的参数一致,就会彼此形成邻居关系

  • 邻接(Adjacency):形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。

    只有当双方成功交换DD报文,并能交换LSA之后,才形成真正意义上的邻接关系。

遗留的问题:

关于R1与R2的状态改变,具体是在什么时候改变的状态?

DR与BDR(1)DR与BDR的作用

  • DR(Designated Router,指定路由器)负责在MA网络建立和维护邻接关系负责LSA的同步
  • DR与其他所有路由器形成邻接关系并交换链路状态信息,其他路由器之间不直接交换链路状态信息。
  • 为了规避单点故障风险,通过选举BDR(Backup Designated Router,备份指定路由器),在DR失效时快速接管DR的工作。

除DR和BDR之外,其他路由器都是DR Other

  • DR与BDR之间建立邻接关系。
  • DR Other只与DR和BDR建立邻接关系。
  • DR Other之间只建立邻居关系。

(2)DR与BDR的选举规则(待补充)DR/BDR的选举是非抢占式的。

例如下图:R4新加入后并不会改变原先就存在的DR/BDR,即使它的优先级比R1、R2都高。这样可以保持网络的稳定

若要使R4成为DR,需要将DR和BDR的ospf进程restart(重启)。

至于先重启DR还是BDR,等做完实验再补充。。。。。。。。。。。

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

  • 接口的DR优先级越大越优先默认为1,0表示不参与选举
  • 就扣的优先级相等时,Router ID越大越优先

基于接口的解释:

下图中R4同连接着两个广播网络,它的两个接口的角色并不相同。

(3)不同网络类型中DR与BDR的选举操作

参考:

04 OSPF基础介绍_哔哩哔哩_bilibili

05 OSPF简介_哔哩哔哩_bilibili

06 OSPF工作原理及过程_哔哩哔哩_bilibili

OSPF-五种报文、七种状态机及其工作过程_ospf的lsu有几种-CSDN博客

精!万字15图详解OSPF路由协议 (qq.com)

OSPF——7种状态讲解_ospf七种状态-CSDN博客

[OSPF原理—详细!!ospf协议工作原理‘Beyond’的博客-CSDN博客](https://blog.csdn.net/Beyonod/article/details/130559513#:~:text=二、ospf流程(步骤) 1 相邻路由器建立邻居关系 2,邻居之间交互链路状态信息并同步至LSDB 3 计算最优路径 4 将最优路径添加到路由表)

OSPF协议原理详解-CSDN博客

OSPF-五种报文、七种状态机及其工作过程_ospf的lsu有几种-CSDN博客