学习目标:

通过边学习理论,边实验的方式学习OSPF的工作过程,加深对OSPF协议的理解。实验环境通过华为eNSP模拟器搭建。

本文为个人学习实验记录,如有错误或不合适的地方欢迎批评指正。


学习内容:

1.实验拓扑

 2.基本配置

2.1 AR01 

sysname AR01
router id 1.1.1.1 
interface Serial1/0/0
 link-protocol ppp
 ip address 10.1.13.1 255.255.255.0 
interface GigabitEthernet0/0/0
 ip address 10.1.12.1 255.255.255.0 
interface LoopBack0
 ip address 1.1.1.1 255.255.255.255 
#
ospf 1
 area 0.0.0.0 
  network 1.1.1.1 0.0.0.0 
  network 10.1.12.1 0.0.0.0 
 area 0.0.0.1 
  network 10.1.13.1 0.0.0.0 
#

2.2 AR02

sysname AR02
router id 2.2.2.2 
interface GigabitEthernet0/0/0
 ip address 10.1.12.2 255.255.255.0 
interface GigabitEthernet0/0/1
 ip address 10.1.24.2 255.255.255.0 
interface LoopBack0
 ip address 2.2.2.2 255.255.255.255 
#
ospf 1 
 area 0.0.0.0 
  network 2.2.2.2 0.0.0.0 
  network 10.1.12.2 0.0.0.0 
 area 0.0.0.2 
  network 10.1.24.2 0.0.0.0 
#

2.3 AR03

sysname AR03
router id 3.3.3.3 
interface Serial1/0/0
 link-protocol ppp
 ip address 10.1.13.3 255.255.255.0 
interface LoopBack0
 ip address 3.3.3.3 255.255.255.255 
#
ospf 1 
 area 0.0.0.1 
  network 3.3.3.3 0.0.0.0 
  network 10.1.13.3 0.0.0.0

2.4 AR04

sysname AR04
router id 4.4.4.4 
interface GigabitEthernet0/0/1
 ip address 10.1.24.4 255.255.255.0 
interface LoopBack0
 ip address 4.4.4.4 255.255.255.255 
#
ospf 1 
 area 0.0.0.2 
  network 4.4.4.4 0.0.0.0 
  network 10.1.24.4 0.0.0.0 
#

3.关于router-id

3.1 OSPF Router id的选举规则

华为的官方OSPF教材这么写的:

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

本人用eNSP的模拟器,使用AR1220,未手动配置route id得到的结果并不是这样,拿R1来说:选取的router id不是环回接口,也不是物理接口最大的。

OSPF 协议分析实验总结 ospf协议实验报告_路由表

将模拟器中,路由器换成AR2240,结果也是这样。不知道真机是什么结果。不知道是否和模拟器有关。这个问题其实不用太纠结。所以人家第一条可能有点深远的意义:手动配置OSPF路由器的Router ID(建议手动配置)。所以,以后在实践中还是手动配置router id,这样就不会出现意想不到的结果,养成一个良好的习惯是有必要的。

3.2 全局 router id与 OSPF的router id

从模拟器实验现象来看,OSPF选择了全局route id(dis route id)作为ospf的route id。而全局router id设置的是第一个接口(按照show ip int b的顺序)的地址。

所以修改OSPF router id 可以全局配置,也可以在ospf中配置。

只设置全局router id,那么ospf router id会使用全局的。

OSPF 协议分析实验总结 ospf协议实验报告_网络_02

OSPF 协议分析实验总结 ospf协议实验报告_链路_03

只设置ospf router id,可能ospf router id与全局router id不一样。

OSPF 协议分析实验总结 ospf协议实验报告_链路_04

4.查看了解OSPF三大表项

4.1 邻居表

(1)路由器在传递OSPF链路状态信息之前,首先建立OSPF邻居关系。(2)通过Hello报文建立邻居关系.(3)邻居表显示OSPF路由器间的邻居状态。

OSPF 协议分析实验总结 ospf协议实验报告_路由表_05

4.2 链路状态数据库(LSDB)

(1)LSDB会保存自己产生的及从邻居收到的LSA信息。(2)Type标识LSA的类型,AdvRouter标识发送LSA的路由器。

OSPF 协议分析实验总结 ospf协议实验报告_OSPF 协议分析实验总结_06

4.3 OSPF路由表

OSPF路由表和路由表不同,ospf路由表的信息不一定会加入路由表,比如直连路由。

OSPF 协议分析实验总结 ospf协议实验报告_网络_07

 5.OSPF工作过程

5.1 OSPF报文格式和类型

OSPF有5种报文格式,5种报文头部格式相同。OSPF报文采用IP封装,IP头部协议号为89.

OSPF 协议分析实验总结 ospf协议实验报告_网络_08

OSPF 协议分析实验总结 ospf协议实验报告_链路_09

类型(Type)

报文名称

报文功能

1

Hello

发现维护邻居关系

2

DD(Database Description)

交互LSDB摘要信息

3

Link State Request

请求特定LS信息

4

Link State Update

发送详细的LS信息

5

Link State Ack

确认LS

5.2 OSPF工作过程

5.2.1建立邻居关系

通过发送Hello报文建立邻居关系。

(1)Down状态:邻居的初始状态,未从邻居收到任何信息。

关闭AR03与AR01连接的S1/0/0接口,AR01的邻居AR03失效。

OSPF 协议分析实验总结 ospf协议实验报告_网络_10

 

OSPF 协议分析实验总结 ospf协议实验报告_OSPF 协议分析实验总结_11

 (2)Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己的Router ID不在所收到的Hello报文的邻居列表中。

打开AR03与AR01连接的S1/0/0接口:console日志中提示,收到邻居10.1.13.3的Hello包,邻居之前的状态为Down,当前的状态为Init。

 

OSPF 协议分析实验总结 ospf协议实验报告_OSPF_12

 使用抓包工具查看端口收发报文情况,可见端口上共收发了3个Hello报文,组播地址224.0.0.5(OSPF路由器会收到)。

OSPF 协议分析实验总结 ospf协议实验报告_路由表_13

第一个Hello报文:这是AR03发出的组播报文。可见发送报文时用的是端口IP地址。

OSPF 协议分析实验总结 ospf协议实验报告_网络_14

 第二个Hello报文:这是AR01发出的组播报文。内容和上一个类似。

OSPF 协议分析实验总结 ospf协议实验报告_链路_15

(3)2-way:在此状态下,路由器发现自己的Router ID存在于收到的Hello报文的邻居列表中。

第三个Hello报文:这是AR01发出的组播报文,这个报文里邻居列表(Active Neighbor)包含了AR03的router id 3.3.3.3,当AR03收到后,发现自己的Router ID存在于AR01发出的Hello报文的邻居列表中 。从下图ospf日志来看,从Init状态就直接到了Exstart状态。可能这里是非MA网络的原因。

OSPF 协议分析实验总结 ospf协议实验报告_OSPF 协议分析实验总结_16

OSPF 协议分析实验总结 ospf协议实验报告_链路_17

在MA网络环境中是可以看到2way状态的,DROther路由器之间的状态会保持2-way。

OSPF 协议分析实验总结 ospf协议实验报告_OSPF 协议分析实验总结_18

Hello报文的作用:

序号

作用

描述

1

邻居发现

自动发现邻居路由器。通过接受hello报文

2

邻居建立

完成Hello报文中的参数协商,建立邻居关系。

3

邻居保持

周期性的发送和接收,检测邻居运行状态。可以理解为心跳包。

重要字段解释:

序号

字段

解释

1

Network Mask

发送报文的接口网络掩码

2

Hello Interval

发送Hello报文的时间间隔,通常为10s。

3

Router Dead Interval

失效时间,如果此时间内未收到Hello报文,认为邻居失效。通常为40s。

4

Options

E:是否支持外部路由

MC:是否支持转发组播数据包

N/P:是否为NSSA区域

5

Router Priority

DR优先级。默认为1。如果设置为0,则路由器不能参与DR或BDR的选举。这里是串行口抓的报文,因为是P2P链路,所以不需要选举DR和BDR。

6

Designated Router


DR的接口地址。这里不需要选举,所以为0.0.0.0

 

7

Backup Designated Router

BDR接口地址。这里不需要选举, 所以为0.0.0.0

O:

OSPF 协议分析实验总结 ospf协议实验报告_OSPF 协议分析实验总结_19

5.2.2建立邻接关系

(4)ExStart:邻居状态变成此状态以后,路由器开始向邻居发送DD报文。在此状态下发送的DD报文不包含链路状态描述。可以理解为此时准备交换信息(链路状态摘要)。

DD报文:

OSPF 协议分析实验总结 ospf协议实验报告_路由表_20

下图AR03发给AR01的第一个DD报文,I=1:Init,AR03发出的第一个DD报文;M=1,More,后面还有DD报文;MS=1,Master,我是主。DD序列号4874。开始都认为自己是主。

OSPF 协议分析实验总结 ospf协议实验报告_网络_21

下图为AR01发给AR03的第一个DD报文,内容和上图类似。自己发出的第一个DD报文都认为自己是主,因为还不知道别人的情况。

OSPF 协议分析实验总结 ospf协议实验报告_路由表_22

(5)Exchange:在此状态下,路由器与邻居之间相互发送包含链路状态信息摘要的DD报文。可以理解为此时互相交互信息(链路状态信息摘要)。

OSPF 协议分析实验总结 ospf协议实验报告_链路_23

下图为AR01发给AR03的第二个DD报文。与前面不同的是,报文中添加了摘要信息。DD序列号为4874,为AR03发给AR01的序列号,即用对方的序列号发送。为什么AR01首先给AR03发送带有摘要信息的DD报文,并且使用AR03的序列号呢?因为AR03的route id 3.3.3.3 比AR01的1.1.1.1大。所以前两个互相发送的DD报文的一部分意义是,选举谁是Master。这里选举AR03是Master,AR01是Slave,所以AR01中的M=0。

OSPF 协议分析实验总结 ospf协议实验报告_网络_24

从路由器告诉主路由器自己拥有摘要的信息。

OSPF 协议分析实验总结 ospf协议实验报告_网络_25

下图为AR03发给AR01的DD报文(含摘要的):序列号为4874+1。主路由器把自己的摘要信息也告诉从路由器。

OSPF 协议分析实验总结 ospf协议实验报告_OSPF_26

从路由器告诉主路由器,我收到了你的摘要信息。

OSPF 协议分析实验总结 ospf协议实验报告_网络_27

 (6)Loading:在此状态下,路由器与邻居之间相互发送LSR报文、LSU报文、LSAck报文。

 

OSPF 协议分析实验总结 ospf协议实验报告_OSPF_28

下图为AR01发给AR03的LS request报文,内容为要进行请求的信息。简单说就是把自己想要的东西告诉对方。

OSPF 协议分析实验总结 ospf协议实验报告_OSPF_29

下图为AR03回给AR01的LS Update报文,内容为请求的信息的详细回复。这里就不仅仅是摘要信息了,还包含了路由信息。

OSPF 协议分析实验总结 ospf协议实验报告_OSPF 协议分析实验总结_30

下图为AR01对AR03的LS Update报文的确认。告诉对方收到了对方的哪些信息。

 

OSPF 协议分析实验总结 ospf协议实验报告_OSPF 协议分析实验总结_31

 (7)Full:路由器已完成了与邻居的LSDB同步。经过上面信息交换,完成了LSDB的更新。

OSPF 协议分析实验总结 ospf协议实验报告_路由表_32

注意:经过多次抓包会发现,每次和每次相互发包的顺序不一定一样。所以这里分析报文只是为了加深理解OSPF的工作过程。做实验有利于加深对理论知识的消化。

5.3 DR与BDR

5.3.1DR与BDR的作用

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

上面的实验因为用的PPP链路,所以没有选举DR和BDR,因为既然是点到点,那么链路上只有这2台路由器,选举就没有意义了。

MA网络,multiple access 网络的简称,中文意思是多路访问。MA网络是指一条链路上有多个访问点,一般分为两种:广播式多路访问网络、非广播式多路访问网络。

1、广播式多路访问网络一般指的是以太网,这种网络是支持广播发送的,正常情况下,DR只在多路访问时选取;

2、非广播式多路访问网络(NBMA),一般常见的有帧中继, ATM等网络,在这种网络上广播是无法发送的。

5.3.2DR与BDR的选举规则

(1)DR/BDR的选举是非抢占式的。既然选好了就不能随意变更。
(2)DR/BDR的选举是基于接口的。接口的DR优先级越大越优先。接口的DR优先级相等时,Router ID越大越优先。

5.3.3不同网络类型中DR与BDR的选举操作

OSPF网络类型

常见链路层协议

是否选举DR

是否和邻居建立邻接关系

Point-to-point

PPP链路;HDLC链路

Broadcast

以太网链路

DR与BDR 、DRother建立邻接关系

BDR与DR 、DRother建立邻接关系

 DRother之间只建立邻居关系

NBMA

帧中继链路

P2MP

需手工指定

 5.3.4 修改互联接口网络类型

OSPF 协议分析实验总结 ospf协议实验报告_OSPF 协议分析实验总结_33

OSPF 协议分析实验总结 ospf协议实验报告_网络_34

AR01和AR02用的以太口连接,选举了DR和BDR。可以在OSPF中将端口类型改为P2P,从而关闭选举。官方:如果同一网段内只有两台设备运行OSPF协议,建议将接口的网络类型改为P2P网络。

OSPF 协议分析实验总结 ospf协议实验报告_路由表_35

 

OSPF 协议分析实验总结 ospf协议实验报告_OSPF_36

注意:一台路由器端口改成了P2P,另一台不要忘了修改。尽管只修改一台能够建立邻接关系,但是路由器不会将这条线上传送过来的路由信息,加入OSPF路由表。下图中4.4.4.4 LSID在 LSDB中是存在的,但是OSPF路由表中是没有的,原因是AR01和AR02 OSPF端口类型不一致。

OSPF 协议分析实验总结 ospf协议实验报告_OSPF 协议分析实验总结_37

 将AR02 也改成P2P:

OSPF 协议分析实验总结 ospf协议实验报告_链路_38

再次查看,OSPF路由表中更新了。

OSPF 协议分析实验总结 ospf协议实验报告_链路_39

6.总结

(1)配置OSPF最好手动指定router id。

(2)OSPF的工作过程:Down-->Init-->2-Way-->ExStart-->Exchange-->Loading-->Full.

(3)一个网段只有2个路由器,建议互联接口的网络类型都修改为P2P.