网络互联技术(二)-OSPF协议

OSPF协议 

一、OSPF介绍

  开放式最短路径优先(Open Shortest Path First,OSPF)是对链路状态路由协议的一种实现,隶属内部网关协议(InternalGateway Protocol,IGP),运作于一个自治系统的内部。

  链路状态路由协议(也可以说OSPF)工作原理:
    1.每台路由器通过使用Hello报文与它的邻居之间建立邻接关系。
    2.每台路由器向每个邻居发送链路状态通告(LSA),有时叫链路状态报文(LSP). 每个邻居在收到LSA之后要依次向它的邻居转发这些LSA泛洪)。
    3.每台路由器要在数据库中保存一份它所收到的LSA的备份,所有路由器的数据库应该相同。(因此最终数据库里会有整个系统里的所有路由路径,可用于第4步计算最短路径)
    4.依照拓扑数据库每台路由器使用Dijkstra 算法(SPF算法)计算出到这个自治系统网络中每一台机器的最短路径,并将结果输出到路由表中。
  OSPF的简化原理:发Hello报文——建立邻接关系——形成链路状态数据库——SPF算法——形成路由表。
 
二、OSPF区域
  
  一个OSPF网络被分区成多个区域。将一个网络划分为多个区域有以下优点:
  • 某一区域内的路由器只用维护该区域的链路状态数据库,而不用维护整个OSPF网络的链路状态数据库。
  • 将某一区域网络拓扑变化的影响限制在该区域内,不会影响到整个OSPF网络,从而减小OSPF计算的频率。
  • 将链路状态通告(LSA)的洪泛限制在本区域内,从而降低OSPF协议产生的数据量。降低网络的流量负担。
  • 划分区域可以对网络进行层次化结构设计。
  • 划分区域有利于资源合理调配,核心区域部署性能较好的设备资源,边缘区域部署性能较差的设备资源即可。

  OSPF的区域一般分为骨干区域(Backbone Area)和非骨干区域(non-Backbone Area),如图。

 

                     

 

  骨干区域用于连接各个非骨干区域,非骨干区域之间并不能直接交换数据,必须通过骨干区域中的路由器(Router-A,Router-B)来进行网络通信。

  图中的Router-C,Router-D,Router-E称为区域边界路由器(Area Bounder Router,ABR),用于其所属区域与骨干区域的联接。

 

三、DR/BDR/Dother

 
  当多台OSPF路由器连到同一个多路访问网段时,如果每两台路由器之间都相互交换LSA,那么该网段将充满着众多LSA条目,为了能够尽量减少LSA的传播数量,通过在多路访问网段中选择出一个核心路由器,称为DR(Designated Router),网段中所有的OSPF路由器都和DR互换LSA,这样一来,DR就会拥有所有的LSA,并且将所有的LSA转发给每一台路由器;DR就像是该网段的LSA中转站,所有的路由器都与该中转站互换LSA,如果DR失效后,那么就会造成LSA的丢失与不完整,所以在多路访问网络中除了选举出DR之外,还会选举出一台路由器作为DR的备份,称为BDR(Backup Designated Router),BDR在DR不可用时,代替DR的工作,而既不是DR,也不是BDR的路由器称为Dother,事实上,Dother除了和DR互换LSA之外,同时还会和BDR互换LSA。
  其实不难看出,DR与BDR并没有任何本质与功能的区别,只有在多路访问的网络环境,才需要DR和BDR,DR与BDR的选举是在一个二层网段内选举的,即在多个路由器互连的接口范围内,与OSPF区域没有任何关系,一个区域可能有多个多路访问网段,那么就会存在多个DR和BDR,但一个多路访问网段,只能有一个DR和BDR。

 

四、OSPF形成邻接的5个步骤及5个数据包

  

  上面说过,OSPF网络中的路由器需要先与区域内的其他路由器(Neighbor,邻居)形成邻接(Adjacency)关系,OSPF网络的路由器只有邻接状态才会交换LSA,路由器会将链路状态数据库中所有的内容毫不保留地发给所有邻居。那么,要如何建立起邻接关系呢?这一过程具体涉及5个步骤及5个数据包,我们用上图Area 0中的Router-A和Router-B来举例说明。

  1.Router-A首先使用组播地址(通常为224.0.0.5)发送Hello包(OSPF的第1个包),Router-B接受到Hello包之后给Router-A回复相关信息,两个Router建立起邻居关系(注意不是邻接关系)。

  2.Router-A与Router-B相互发送DBD包(DataBase Description包,记录Router的链路数据库信息,是OSPF的第2 个包),确定Master/Slave。我们假使Router-A为Master(Router-A为DR),Router-B为Slave(Router-B为Dother)。

  3.确定Master/Slave后,Dother向DR发送 LSR包(Link-state Request包,OSPF的第3个包),请求更新其链路状态数据库。

  4.DR收到LSR包后,向Dother发送LSU包(Link-state Update包,OSPF的第4个包),更新其链路状态数据库。

  5.完成更新后,Dother向DR发送LSAck包(Link-state Acknowledgment包。OSPF的第5个包),向Master表示答谢。

  至此,Router-A和Router-B的完全邻接关系建立。更详细的过程如下图:

 

 

          

 

               

 

            

 

 

 注:两台OSPF路由器要创建完全邻接关系,还有些前提条件,即,以下带*参数必须相同:

  1. Hello时间间隔*
  2. Dead时间间隔*
  3. 区域编号*
  4. 认证(如果启用了认证)*
  5. 链路MTU大小
  6. 子网掩码
  7. 子网号
  8. 末梢区域设置*

一般来说,创建OSPF完全邻接时会经过以下状态:

  1. 失效状态(Down):这是邻居会话的初始状态,表示最近没有从邻居收到信息。在NBMA网络上,可能仍然会以较低频率向处于Down状态的邻居发送Hello数据包。
  2. 尝试状态(Attempt):该状态仅仅适用于连接在NBMA网络上的邻居。该状态表示最近没有从邻居收到信息,但仍需要作进一步的尝试,来联系邻居。这时按某一特定间隔向邻居发送Hello数据包。
  3. 初始状态(Init):在此状态下,表示最近收到了从邻居发来的Hello数据包。但是,仍然没有和邻居创建双向通信(Bidirectional Communication),例如,路由器自身并没有出现在邻居发送的Hello数据包中。
  4. 双向通信状态(2-Way):此状态意味着两台路由器之间创建了双向通信。在此状态下还将进行DR和BDR的选举(只有处于2-Way状态的路由器才有资格参选DR和BDR)
  5. 信息交换初始状态(ExStart):这个状态是创建邻接关系的第一步。该状态的目标是决定信息交换时路由器的主从关系,并确定初始数据库描述(DD)数据包的序列号。具有最高路由器ID的路由器将成为主路由器。
  6. 信息交换状态(ExChange):在此状态的路由器通过向邻居发送DD数据包来描述其完整的链路状态数据库。每一个DD数据包都有一个序列号,并且需要被显式的确认。在任何时候,每次只能发送一个DD数据包。在此状态下,路由器也可以发送链路状态请求数据包,用来向邻居请求最新的LSA。实际上,这些状态的邻接关系完全有能力发送和接收所有类型的OSPF协议数据包。
  7. 信息加载状态(Loading):在此状态下,路由器将会向邻居路由器发送链路状态请求数据包,用来请求信息交换状态发现的最新的LSA。
  8. 完全邻接状态(Full):在此状态下,邻居路由器形成完全邻接关系。这些邻接关系将会在路由器LSA和网络LSA中被描述。

 

五、具体的实验过程

 

  理论的东西讲完了,我们来看看具体的实验过程是怎么样的。

  下图为本次实验的拓扑图,是一个非常简单的网络拓扑结构,仅由2个Router组成。

 

                   

1、 具体配置:

R1(config)#int f0/0                            

R1(config-if)#ip add 192.168.1.1 255.255.255.0

R1(config-if)#no sh

R1(config-if)#int lo 0

R1(config-if)#ip add 1.1.1.1 255.255.255.0

R1(config-if)#exit

R1(config)#router ospf 1

R1(config-router)#router-id 1.1.1.1

R1(config-router)#network 192.168.1.0  0.0.0.255  a  0

R1(config-router)#network 1.1.1.1  0.0.0.255  a  0

 

R2(config)#int f0/0

R2(config-if)#ip add 192.168.1.2 255.255.255.0

R2(config-if)#no sh

R2(config-if)#int lo 0

R2(config-if)#ip add 2.2.2.2 255.255.255.0

R2(config-if)#exit

R2(config)#router ospf 1

R2(config-router)#router-id 2.2.2.2

R2(config-router)#network 192.168.1.0  0.0.0.255  a  0

R2(config-router)#network 2.2.2.0  0.0.0.255  a  0

 

 

2、 查看OSPF 邻接关系形成过程

命令:debug ip ospf adj (可用 u all 关闭调试进程)

   clear ip ospf process 

R2类似(略)

在显示的邻接信息中,我们可以看到上文中提到的数据包的具体发送与接收过程,下面还有更多的内容,这里就不展开了,有兴趣的朋友可以自己查看一下。

 

 

3、 查看OSPF包的发送过程

命令:debug ip ospf packet

                

                                OSPF包的组成

 

 

4、 查看哪些接口宣告进了OSPF?

show ip ospf interface

show ip ospf interface brief

 

   

 Reference:

  维基百科OSPL介绍:https://zh.wikipedia.org/wiki/%E5%BC%80%E6%94%BE%E5%BC%8F%E6%9C%80%E7%9F%AD%E8%B7%AF%E5%BE%84%E4%BC%98%E5%85%88

  CCNP OSPF协议详解:http://blog.51cto.com/crystals/278415

   

 

 

 

转载于:https://www.cnblogs.com/liuyongdun/p/8586165.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值