OSPF工作原理:

1、  宣告OSPF的路由器从所有启动OSPF进程的接口上发出hello数据包;

2、  邻接关系的建立是由交换Hello信息的路由器类型和网络类型决定的;

3、  每一台路由器都会在所有形成邻接关系的邻居之间发送LSA,LSA描述了路由器所有链路、接口、路由器的邻居以及链路状态信息;

4、  每一台收到从neighbor发出的LSA的路由器都会把这些LSA记录在自己的LSDB中,并且发送一份LSAcopy给其他的neighbors;

5、  通过LSA泛洪扩散到整个区域,区域内所有路由器都会形成相同的LSDB;

6、  当这些路由器的LSDB完全相同时,每一台路由器将以自身为根,使用SPF算法计算出一个无环拓扑,描述自己所知道的到达每一个目的地的shortest path.

7、  每一台路由器都将从SPF算法树中构建出自己的路由表:

1)        区域内路由(最优)

2)        区域间路由

3)        E1外部路由

4)        E2外部路由

OSPF邻居之间交换的Hello数据包称为keepalive,并且每30min重传一次LSA。





OSPF五种数据包    

l  Hello  建立并维护邻居关系。hello组播地址 224.0.0.5

l  DBD    DatabaseDescribe  数据库描述,建立邻居时发送,描述自身接口状态。

l  LSR    LinkState Request 链路状态请求,向邻居请求

l  LSU    LinkState Update  链路状态更新,发送的是LSA

l  LSAck  对DBD、LSR、LSU进行确认





OSPF选举router-id的规则:

1)        手动配置的router-id为首选;

2)        所有loopback中最大的IP作为router-id;

3)        所有活动物理接口中最大的IP作为router-id;

(用作router-id的接口不一定非要运行OSPF协议)

 

使用loopback作为router-id的好处:

²  Loopback比其他任何接口更稳定;

²  网络管理员能够更好地控制router-id;

 




OSPF Hello消息的用途:

²  OSPF利用Hello通告router-id并开始建立邻居/邻接关系;

²  在两台路由器成为邻居之前,需要通告这两台路由器必须相互认可的几个参数;

²  Hello在邻居路由器间担当keepalive的角色;

²  确保了邻居路由器之间的双向通信;

²  用来在NBMA网络中选举DR/BDR;


Network-Type

point-to-point

point-to-multipoint

broadcast

non-broadcast

virtual-link

hello-interval

10s

30s

10s

30s

---

dead-interval

40s

120s

40s

120s

---


 




OSPF邻居建立失败的可能性参数:

«  Router-id不能冲突

«  Area-id不一致

«  Area-Type不一致

«  Hello-interval/Dead-interval不一致

«  MTU不一致

«  Authentication不一致

«  Network-Type不一致(可能会邻居建立正常,但是不会将条目加载到路由表中

«  IP地址掩码不一致

«  OSPF hello包被ACL过滤了

无论何时,路由器发送一个hello包,都会在这个Hello数据包中列出该数据链路上所出现的所有neighbors’ router-ids。如果一台路由器收到了一个有效的Hello包,并在这个Hello包中发现的自己的router-id,那么就认为Two-way Communication建立成功了。

 




OSPF Network-Type

要点

数据传送方式

point-to-point

point-to-point网络上的有效邻居总是可以形成Adjacency关系的。

组播,224.0.0.5,All SPF  Routers

point-to-multicast

不需要选举DR/BDR,可以看成是一群point-to-point链路的集合。

单播

broadcast

选举DR/BDR,所有路由器与DR和BDR建立Adjacency关系,他们互相之间为Neighbor(DRothers)关系,DR和BDR之间也是Adjacency关系。DR/BDR不能被抢占。

DR发送数据包到224.0.0.5,

BDR发送数据包到224.0.0.5,

只有DR/BDR侦听224.0.0.6

non-broadcast

NBMA网络不具备传送Broadcast/multicast packets,需要增加额外的配置实现单播数据包,使OSPF邻居建立起来。需要选举DR/BDR,hello是单播的。

单播

virtual-link

虚链路一旦建立,就不再发送Hello消息。

单播

 

除了以上的5种Network Type外,所有的网络都可以归纳到下面更普通的网络类型之一:

²  TransitNetwork

与两台或两台以上的路由器相连。这种网络仅仅传送那些“只需仅仅通过”的数据包,即这些数据包的始发网络和目的网络都不同于当前的Transit Network.

²  StubNetwork

仅仅和一台路由器相连。末梢网络上的所有数据要么始发与这个末梢网络上的某个设备,要么终止于这个末梢网络上的某个设备。

OSPF认为Loopback口是末梢网络节点,将其作为32位主机路由来通告。




DR/BDR

²  网络中的每一台路由器都与DR形成Adjacency关系;

²  DR/BDR是路由器的接口特性,并不是整个路由器的特性;

²  网络中所有的路由器都与DR和BDR形成邻接关系,DR与BDR互相形成邻接关系;

²  OSPF路由器的每一个BMA或者NBMA接口都有一个priority,大小为0~255,cisco路由器的默认priority为1,可以通过接口下ip ospf priority来修改;

²  将接口priority改为0,该路由器将退出DR/BDR的选举进程,即没有选举DR/BDR的资格;

²  选举进程由Hello包承载所需要的参数字段(priority、DR/BDR’srouter-id);

²  DR/BDR的选举过程

1)        路由器必须和邻居路由器建立Two-way communication状态;(具有选举DR/BDR的资格:priority必须大于0,并且邻居状态必须进入Two-way状态)

2)        多路访问链路上选举priority最高的路由器为DR;次优的为BDR;

3)        若路由器priority相同,则根据最高router-id来选举;

4)        在DR/BDR已经存在的多路访问链路上,如果有新的OSPF路由器加入,则接受已经存在的DR/BDR,即使拥有最高的priority也不会去抢占DR/BDR的角色;

5)        若DR失效,则BDR接管DR的角色,并重新激活一个新的BDR选举进程;

²  DR将OSPF packets发往224.0.0.5,所有的OSPF路由器都会接受;DRothers将OSPF packets发往224.0.0.6,只有DR/BDR路由器侦听该地址并接受数据;

²  如果在一个多路访问网络上只有唯一的一台路由器具有选举资格,那么该路由将成为DR,而且网络中将不会存在BDR,这是允许的;

²  如果多路访问网络中的所有路由器都没有资格选举,那么邻居状态将卡在Two-way状态,即没有DR/BDR产生;

 



OSPF邻居

要成功建立一个OSPF邻接关系,通常需要4个阶段:

1.        邻居路由器发现阶段;

2.        Two-way双向通信阶段;

3.        Database Synchronization数据库同步阶段;

路由器之间交换DBD、LSR、LSU、LSAck数据包,确保邻居间拥有相同的LSDB。执行这一步骤的目的是使其中一台邻居路由器成为Master(router-id高的路由器),另一台成为Slave,Master将控制DBD的信息交换过程;

4.        Full Adjacency完全邻接状态;





OSPF邻居状态

1.        Down

2.        Attempt

该状态仅仅使用于NBMA网络上的邻居,在NBMA网络上的邻居路由器是手动配置。当NBMA网络上具有DR选举资格的路由器和邻居路由器的接口开始变为Active时或者成为DR/BDR时,这台具有DR选举资格的路由器将会把邻居路由器的转该转换到Attempt状态在Attempt状态下,路由器使用Hello-interval的时间作为Poll-interval的时间来作为向邻居发送Hello数据包的时间间隔

3.        Init

该状态表示在最近的dead-interval时间内路由器收到了来自邻居的Hello包,但是双向通信没有建立。

4.        Two-Way

该状态表示本地路由器已经在来自邻居的Hello包的邻居字段中看到了自己的router-id,即双向通信建立。在多路访问网络中,该状态意味着路由器开始选举DR/BDR。如果在Init状态下从邻居那里收到一个DBD,将引起邻居状态直接转换到Two-way状态。

5.        ExStart

该状态下,本地路由器与邻居建立起Master/Slave关系,确定DBD的序列号,为DBD的信息交换做准备。router-id最高者成为Master

6.        Exchange

该状态下,本地路由器向邻居发送描述自己的DBD,同时在Exchange状态下,本地路由器也会发送LSR给邻居路由器,请求最新的LSA。

Exchange状态下邻居路由器之间开始同步LSDB,同步LSDB的操作是通过它们互相描述各自的LSDB的所有条目来实现的。

7.        Loading

该状态下,本地路由器向邻居发送LSR,请求最新的LSA通告,虽然在Exchange状态下已经发现了这些最新的LSA通告,但是本地路由器还没有收到这些LSA通告。

8.        Full





OSPF Virtual-Link的创建规则:

²  Virtual-link必须配置在两台ABR之间;

²  配置了Virtual-link所经过的区域必须拥有全部的路由选择信息,即必须是Transit Area;

²  Transit Area不能是Stub Area;

²  另外,如果网络中有Virual-link存在,则被认为该网络是一个设计的比较糟糕的网络;





OSPF LSDB

²  Type 1 ——Router LSA

每一台路由器都会产生RouterLSA通告。这个最基本的LSA列出了路由器所有的链路或接口,并指明了它们的状态和沿每条链路方向出站的cost,以及该链路上所有已知的OSPF邻居,这些LSA通告只会在始发它们的区域内部进行泛洪扩散。

²  Type 2 ——Network LSA

每一个多路访问网络中的DR都会产生NetworkLSA通告,Network LSA通告列出了所有与之相连的路由器,包括DR路由器本身,与Router-LSA一样,Network LSA也仅仅在产生这条Network LSA的区域内进行泛洪扩散。

²  Type 3 ——Network Summary LSA

由ABR路由器发出,ABR发送NetworkSummary LSA到一个区域,用来通告该区域外部外部的目的地址

当ABR始发一条Network Summary LSA时,将包括从它本身到正在通告的这条LSA的目的地所耗费的cost;

当其他的路由器从一台ABR收到一条Network Summary LSA时,它并不运行SPF算法,只是简单加上从它到那台ABR之间的路由的cost,并将这个新的cost包含在这个LSA通告中;(这种行为类似于距离矢量协议的行为,这说明OSPF虽然在一个区域内使用的是链路状态协议,但是在查找不同域间路由时,使用的是距离矢量算法

²  Type 4 ——ASBR Summary LSA

也是由ABR始发的。ASBR SummaryLSA除了通告的目的地是一台ASBR路由器而不是一个网络外,其他的和Network Summary LSA是一样的,即通过ASBR Summary LSA通告的是一个32位主机路由,告诉OSPF系统内所有路由器怎么去往ASBR。

²  Type 5 ——AS External LSA

是由ASBR始发,用来通告到达OSPF自治系统外部的目的网段。AS ExternalLSA将在整个OSPF自治系统内进行泛洪扩散。

²  Type 6 ——Group Membership LSA(用于MOSPF)*

²  Type 7 ——NSSA External LSA

由ASBR始发,几乎与ASExternal LSA一模一样,只是不像ASExternal LSA一样在整个OSPF自治系统内进行泛洪扩散,而是仅在始发这个NSSA External LSA的NSSA区域内进行扩散。

NSSA External LSA的头部有个P-bit的标志(0或者1):

l  如果ABR接收到的NSSAExternal LSA的P-bit被置为1,则将该Type 7 LSA转化为Type 5 LSA,并将这条LSA泛洪扩散到其他区域中区;

l  如果ABR接收到的NSSAExternal LSA的P-bit被置为0,则不会将该Type 7 LSA转化为Type 5 LSA,这条LSA只能被限制在本地NSSA区域中传递;

 



OSPF特殊区域

²  Stub Area

Stub Area是一个不允许AS External LSA在其内部泛洪扩散的区域。如果在一个区域里没有Type 5 LSA,那么Type 4 LSA也没必要了。因此位于Stub Area边界的ABR路由器将使用Type 3 - Network Summary LSA来向Stub Area内通告一条指向ABR自己的默认路由;StubArea内的所有路由器都将使用默认路由经过ABR去往OSPF的外部网络目的地;

²  Totally Stub Area

Totally Stub Area把Type 3 LSA也过滤掉了,不仅使用默认路由去往OSPF自治系统外部的目的地,而且使用默认路由到达其他OSPF区域的目的地;

²  Not-So-Stub-Area(NSSA)

NSSA区域允许外部路由被重分布进来,而同时保留OSPF自治系统其他的Stub区域特性。在NSSA区域内的ASBR将始发Type 7 – NSSA External LSA来通告那些外部的目的网络。这些Type 7LSA将在整个NSSA区域中泛洪扩散,但是会在ABR路由器的地方被阻塞;(根据Type 7 LSA头部的P-bit来决定是否转换成Type 5 LSA)

²  Totally NSSA

 

OSPF是根据路由器的每一个接口指定的cost来决定最短路径的。一条路由的cost是指沿着到达目的网络的路由路径上所有出站接口的cost之和。

cisco默认使用cost=10^8/BW,BW可以使用接口命令bandwidth来修改,单位kbit/s;可以使用命令auto-costreference-bandwidth来修改参考带宽,解决在带宽>100M的接口上计算出的cost始终为1的尴尬局面;

 




OSPF路由类型

²  Intra-area path(域内路由)

²  Inter-area path(域间路由)

²  Type 1 - external path(E1)

在OSPF中,OE1的外部路由的cost是这条路由到达ASBR的每跳cost之和+ASBR通告该外部路由时赋予的起始外部cost值;

²  Type 2 - external path(E2)

在OSPF中,OE2的外部路由的cost始终保持ASBR当初通告时赋予的起始外部cost不变,不管它后来是在OSPF内怎么传输的。

 

OE1和OE2类型的路由给网络管理员提供了一个选择的机会:是选择真正意义上距离外部网络最近的站点(OE1),还是选择通过距离外部网络最近的ASBR(OE2),去到达目标网络。

简单点,OE1参照外部路由被传进来后沿路所累加的cost值,来决定从最短的路径走;OE2忽略外部路由在OSPF区域内的传输过程,只考虑ASBR距离外部网络的远近(由通告的cost决定)。


路由汇总

 在ABR上汇总     

ABR(config-router)#area 1 range 172.16.0.0 255.255.252.0

                      //ABR上汇总OSPF area 1的路由

 在ASBR上汇总    

ASBR(config-router)#summary-address 172.16.0.0 255.255.252.0