使用如下的拓扑结构:

|---------------------|                     |----------------------|          
    |                     | 172.1.1.1           |                      |          
    |P1     R1         P2 |---------------------| P1      R2        P2 | 
    |                     |           172.1.1.2 |                      |          
    |---------------------|                     |----------------------| 

     loopback1: 1.1.1.9/32                        loopback1: 2.2.2.9/32

路由器R1配置:

    OSPF接口P2,类型Broadcast广播;
    OSPF接口Loopback1,类型PTP点对点。

    
    
路由器R2配置:

    OSPF接口P2,类型Broadcast广播;
    OSPF接口Loopback1,类型PTP点对点。

两个路由器的AREA配置为0.0.0.0。

 

邻居发现过程

假设路由器R1首先发送了HELLO报文,格式如下图,HELLO报文目的地址使用多播地址224.0.0.5。Message Type为1,即Hello Packet。Area ID为0.0.0.0。使用本机的回环接口作为路由器ID:1.1.1.9。由于是第一个发送的OSPF报文,DR和BDR路由器都为空,并且没有任何的邻居路由器。

ospf hello交互流程 ospf报文交互过程_OSPF

其次,路由器R2发送HELLO报文,大致内容如以上的相同,但是R2的OSPF路由器ID使用其Loopback接口地址2.2.2.9。并且,由于接收到了R1之前发送的HELLO报文,路由器R2将设置其邻居路由器为1.1.1.9。

ospf hello交互流程 ospf报文交互过程_OSPF_02

之后,路由器R1再次发送HELLO报文,此时,邻居路由器显示为R2(2.2.2.9)。

ospf hello交互流程 ospf报文交互过程_OSPF_03

 

DR/BDR选举

根据上节的HELLO报文内容可知,两个路由器设置了相同的优先级1(Router Priority),所以通过路由器ID的比较,ID大的路由器R2(2.2.2.9)被选举为指定路由器DR,路由器R1为BDR。

ospf hello交互流程 ospf报文交互过程_请求报文_04

 

数据库描述报文

起初OSPF使用空的DBD报文确定主从路由器。假设路由器R2首先发送了DB Description报文,其中Init、More和Master标志全部置位,表明是初始的报文,后续还有其它报文,并且声明自身为主路由器Master。其序号为103934。报文如下:

ospf hello交互流程 ospf报文交互过程_置位_05

同时,路由器R1也发送了相同的DB Description报文。三个标志位Init、More和Master也都置位,其序号为103944。但是比较两个路由器的ID值,较大的一个为最终的主路由器,即路由器R2。此后,在LSA交互过程中,使用主路由器R2的序号。

ospf hello交互流程 ospf报文交互过程_ospf hello交互流程_06

在协商主从完成之后,DBD报文将携带LSA摘要信息。并且由于1.1.1.9为从路由器,Master标志清零,DD序号使用主路由器R2的103934。More标志为零表明数据库描述报文发送完成。

ospf hello交互流程 ospf报文交互过程_请求报文_07

 

LS-Request请求报文

在接收到路由器R1的以上DBD报文之后,路由器R2将请求其中某些LS的具体信息。

ospf hello交互流程 ospf报文交互过程_置位_08

LS-Update更新报文

当路由器R1接收到以上的LS请求报文之后,回复以下的LS-Update更新报文,发送详细的LS信息:

ospf hello交互流程 ospf报文交互过程_置位_09

 

LS-Acknowledge确认报文

最终路由器R2在接收到以上报文后,回复LS确认报文。

ospf hello交互流程 ospf报文交互过程_置位_10

 

END