1.Ospf的概述:

Ospf(Open shortest Path First 开放式最短路径优先)协议是一种典型的链路状态(LS)的路由协议,一般用于同一个路由域内。在这里,路由域是指一个自治系统(Autonomous System),即AS,它是指一组通过统一的路由政策或路由协议互相交换路由信息的网络。在这个AS中,所有的OSPF路由器都维护一个相同的描述这个AS结构的数据库,该数据库中存放的是路由域中相应链路的状态信息,OSPF路由器正是通过这个数据库计算出其OSPF路由表的。作为一种链路状态的路由协议,OSPF将链路状态广播数据包LSALink State Advertisement)传送给在某一区域内的所有路由器,这一点与距离矢量路由协议不同。运行距离矢量路由协议的路由器是将部分或全部的路由表传递给与其相邻的路由器。

Ospf的数据全是靠数据包在网络中传输,ospf的数据包结构图如下:

OSPF路由协议_路由表


2.OSPF基本特征:

采用触发更新:当链路状态发生改变的时候,触发更新路由表;

更新路由表时采用组播发送【组播地址:224.0.0.5和224.0.0.6】组播与广播的明显区别是无害,占用资源少;

发送的是链路状态【接口类型 地址 带宽】;

只发送增量减少资源占用;

支持vlsm 及子网不连续;

metric 的计算靠cost计算而cost的值的计算靠带宽计算的,带宽越高,metric越小而非距离矢量路由协议的hop跳数;

负载均衡等代价;

网络规模大整个网络能容纳1000台;

不会产生路由环路;

收敛速度快【收敛:当网络拓扑发生变化时,路由表恢复稳定的状态的过程】;

三张表格:为维护这三张表消耗大量资源

i.邻居表通过hello包来确定邻居

ii.Lsdb(链路状态数据库)表

iii.ospf—>>产生路由表

体系化路由;

3.ospf的区域:(单区域和多区域)

单区域:在一个运行ospf的AS中,所有的路由器都在同一个区域—area0内,我们称这样的网络为单区域。

OSPF路由协议_路由表_02

名词解析:

Interface:路由器连入网络的端口

Neighbors:在一个公共网络都有端口的路由器就是邻居。

Cost值:数据经过该端口的开销是cost值,cost值的多少和带宽相关,且与带宽成反比。

Cost值的计算:在一条链路中各个路由器出口的cost值之和,就是该路由器到该链路相应路由器的开销。


OSPF多区域:

由于每个ospf网络内最多可以有1000台路由器,如果所有的路由器全部都在同一个区域的话,路由器要维护路由器内的三张表格是相当耗费资源与时间的,于是我们就把一个AS划分成多个区域。

OSPF路由协议_路由表_03

名词解析:

内部路由器:所有的接口属于同一个区域

区域边界路由器—ABR:连接一个区域和骨干区域的路由器

骨干路由器:至少有一个接口处在0区域的路由器

自治系统边界路由---ASBR:执行了路由重分布,将其他路由信息注入到OSPF协议中的

路由器

4.OSPF的hello协议:

1.hello协议的目的:

a.用于发现邻居

b.在成为邻居之前,必须对hello包里的一些参数协商成功

c.Hello包在邻居之间扮演者keepalive的角色

d.允许邻居之间的双向通信

e.它在NBMA网络上选举DR和BDR  

     2.hello包的包含的信息:OSPF路由协议_路由表_04

源路由器的RID

源路由器接口的hello包发送的时间间隔,源路由器接口的无效时间间隔

源路由器的所有邻居

源路由器的Area ID

优先级

DR/BDR ip地址

源路由器的接口的认证类型和认证信息

      末节标记位(flag bit)


5.Ospf的网络类型:

a.广播多路网络:比如以太网、Token Ring(令牌环网)和FDDI,在这样的网络上都要进行DR和BDR的选举。DR/BDR发送OSPF包的组播地址为:224.0.0.5,除了BR/BDR的所有路由器发送OSPF包的组播地址为:224.0.0.6。

OSPF路由协议_结构图_05

b.点到点网络(数据包采用ppp或者HDLC进行封装):比如T1线路,是单独连接一对路由器的网络,也只有两台路由器成为邻居关系。

OSPF路由协议_结构图_06

c.非广播多路网络(NBMA):比如X.25、帧中继和ATM网。不具备广播能力,邻居需要人工指定。

OSPF路由协议_结构图_07

d.点对多点网络:特殊的NBMA网络,在这个网络上不选举DR/BDR。

e.虚链路:ospf包是以unicast的方式发送的。

6.OSPF的DR/BDR的选举

OSPF路由协议_路由器_08

在DR和DBR出现之前,每一台路由器和他的邻居之间成为完全的网状的OSPF邻接关系,这样5台路由器之间将形成10个邻接关系,同时产生25条LSA。而且在址的网络中,还存在自己发出的LSA从邻居的邻居发回来,导致网络上产生多帧拷贝,所以基于这种考虑,产生了DR和BDR。

DR和BDR将完成如下工作:

1.描述这个多址网络和该网络上剩下的其他相关路由器。

2.管理这个多址网络上的flooding过程。

3.同时为了冗余性,还会选取一个BDR,作为双备份之用。


DR、BDR的选举规则:DR、BDR选取是以接口状态机的方式触发的

1.路由器的每个多路访问接口都有个路由器的优先级8位长的一个整数,范围是0到255,Cisco的默认优先级是1而优先级为0的话将不能选举为DR/BDR。可以通过命令ip ospf priority进行修改。

2.Hello包里包含了 优先级字段,还包括了、可能成为DR/BDR的相关接口ip地址。

3.当接口在多路访问网络上初次启动的时候,它把DR/BDR地址设置为0.0.0.0,同时设置等待计时器(wait timer)的值等于路由器无效间隔(Router DeadInterval).


DR、BDR的选举过程:

1.在和邻居建立双向(2-Way)通信之后,检查邻居的hello包中的priority,DR和BDR字段,列出所有可以参与选举DR/BDR的邻居。所有的路由器都声明自己就是DR/BDR;

2.从这个有参与选举DR/BDR的列表中,创建一组没有声明自己就是DR的路由器的子集(声明自己是DR的路由器将不会被选举为BDR);

3.如果在这个子集里,不管有没有宣称自己就是BDR,只要在hello包中BDR字段就等于自己接口的地址,优先级最高的被选举为BDR,如果优先级都相同,RID最高的被选举为BDR;

4.如果在hello包中DR字段等于自己接口地址,优先级最高的被选举为DR。如果优先级都相同,RID最高的选举为DR。如果选举的DR不能工作,那么新选举的BDR就成为DR,再重新选举以个BDR;

5.注意:当网络中已经选举了DR/BDR后,又出现了一台优先级更高的路由器的话,DR/BDR是不会重新选举的;

6.DR/BDR选举完成后,DRother只和DR/BDR形成邻接关系,所有的路由器将组播hello包发到ALLSPFRouters地址224.0.0.5以便他们能跟踪其他邻居的信息


   7.OSPF邻居关系的建立

OSPF路由协议通过建立交互关系来交换路由信息,但是并不是所有相邻的路由器会建立OSPF交互关系。下面是OSPF建立交互关系的过程。

OSPF协议是通过Hello协议数据包建立及维护相邻关系的,同时也用其来保证相邻路由器之间的双向通信。OSPF路由器会周期性地发送Hello数据包,当这个路由器看到自身被列于其它路由器的Hello数据包里时,这两个路由器之间会建立起双向通信。

两个OSPF路由器建立双向通信这后的第二个步骤是进行数据库的同步,数据库同步是所有链路转状态路由协议的最大的共性。在OSPF路由协议中,数据库同步关系仅仅在建立交互关系的路由器之间保持。

OSPF的数据库同步是通过OSPF数据库描述数据包来进行的。OSPF路由器周期性地产生数据库描述数据包,该数据包是有序的,即附带有序列号,并将这些数据包对相邻路由器广播。相邻路由器可以根据数据库描述数据包的序列号与自身数据库的数据作比较,若发现接收到的数据比数据库内的数据序列号大,则相邻路由器会针对序列号较大的数据发出请求,并用请求得到的数据来更新其链路状态数据库。

我们可以将OSPF相邻路由器从发送Hello数据包,建立数据库同步至建立完全的OSPF交互关系的过程分成几个不同的状态,分别为:

Down:这是OSPF建立交互关系的初始化状态,表示在一定时间之内没有接收到从某一相邻路由器发送来的信息。在非广播性的网络环境内,OSPF路由器还可能对处于Down状态的路由器发送Hello数据包。

Attempt:该状态仅在NBMA环境,例如帧中继、X.25或ATM环境中有效,表示在一定时间内没有接收到某一相邻路由器的信息,但是OSPF路由器仍必须通过以一个较低的频率向该相邻路由器发送Hello数据包来保持联系。

Init:在该状态时,OSPF路由器已经接收到相邻路由器发送来的Hello数据包,但自身的IP地址并没有出现在该Hello数据包内,也就是说,双方的双向通信还没有建立起来。

2-Way:这个状态可以说是建立交互方式真正的开始步骤。在这个状态,路由器看到自身已经处于相邻路由器的Hello数据包内,双向通信已经建立指定路由器及备份指定路由器的选择正是在这个状态完成的。

Exstart:这个状态是建立交互状态的第一个步骤。在这个状态,路由器要决定用于数据交换的初始的数据库描述数据包的序列号,以保证路由器得到的永远是最新的链路状态信息。同时,在这个状态路由器还必须决定路由器之间的主备关系,处于主控地位的路由器会向处于备份地位的路由器请求链路状态信息。

Exchange:在这个状态,路由器向相邻的OSPF路由器发送数据库描述数据包来交换链路状态信息,每一个数据包都有一个数据包序列号。在这个状态,路由器还有可能向相邻路由器发送链路状态请求数据包来请求其相应数据。从这个状态开始,我们说OSPF处于Flood状态。

Loading:在loading状态,OSPF路由器会就其发现的相邻路由器的新的链路状态数据及自身的已经过期的数据向相邻路由器提出请求,并等待相邻路由器的回答。

Full:这是两个OSPF路由器建立交互关系的最后一个状态,在这时,建立起交互关系的路由器之间已经完成了数据库同步的工作,它们的链路状态数据库已经一致。