对于广播多路访问网络,路由器在启动OSPF进程,到整个OSPF域形成相同的拓扑数据库,这中间一般来说,每台路由器会经历八个状态:

1、失效状态(down):新路由器处于失效状态。路由器尝试发送Hello分组,向网段中的其他路由器介绍自己,并试图发现其他的OSPF路由器。该Hello分组使用多播地址224.0.0.5(所有SPF路由器),其DR,BDR字段都设置为0。0。0。0

注:发现邻居的过程

2、初始化状态(init):新路由器发送出hello分组等待应答状态。通常等待时间为hello时间的4倍。在这段时间内,新路由器从其他路由器那里收到Hello分组,并获悉谁是DR,BDR。如果收到的hello分组没有指出谁是DR,BDR,则开始选举。

注:选举DR BDR的过程

3、双向状态(two–way):在其他路由器A收到来自路由器B的hello分组后,将hello分组中的路由器ID加入到拓扑数据库中,并用多播地址224.0.0.5发送一个HELLO分组,其中包含自己的ID和一个由所有邻居组成的列表。当B收到该HELLO分组后,如果发现自己的ID在这个来自A的HELLO分组里的邻居列表中,那么B将认为和A已经形成了双向的通信状态。

4、预启动状态(exstart):互为邻居的两台路由器A,B。它们根据直连的接口IP选出较大IP那台路由器做为主(master)路由器,这就是预启动状态。两个邻居是根据接口的IP大小来确定主/从关系:谁主谁次并不重要,它们主要是决定由谁来发起通信。

5、交换状态(exchange):两台路由器都发送数据库描述分组(DDP),并切换到交换状态。路由器从邻居路由器那里收到DDP后,将其同自己的拓扑表进行比较。DDP里面只包含拓扑数据库的摘要信息。

注:形成拓扑

6、加载状态(loading):当一台路由器收到了来自邻居的DDP分组,经过比较后发现自己的拓扑数据库信息和DDP中包含的摘要信息存在差异,,这时该接收路由器需要更详细的信息,它将使用LSR分组请求有关特定链路的详细信息。

7、完全邻接(full):当A路由器收到来自B的LSR时,它将返回一种LSU分组(就是指收到LSR分组后发送的一种LSA分组)。然后B收到该LSU后,将返回一种LSACK(链路状态确认)分组。同时B和A的拓扑数据库达到了同步,此时,邻居关系就变成了邻接状态。(loading to full)

(Attempt 只有在NBMA网络里才有,手工进行Neighbor的指定。)

这中间主要出现了四种分组:

1、HELLO分组:用于发现邻居和选举DR,BDR。路由器不断的发送HELLO分组,以确保它始终出现在收到了这些分组的路由器的拓扑数据库中。

2、数据库描述分组(DD):用于向邻居发送摘要信息以同步拓扑数据库。

3、LSR:用于请求更详细的信息,路由器收到包含新信息的数据库描述分组后发送的一种分组

4、链路状态确认(LSACK):确认已经收到了LSU

A——————————hello——————————>B

A<——————————hello——————————B

A——————————DDP——————————>B

A<——————————DDP——————————B

A——————————LSR——————————>B

A<——————————LSU——————————B

A——————————LSACK——————————>B

 

OSPF协议简单的操作过程:

1、发现邻居并发送hello数据包,匹配hello包中的参数,建立neighbor关系。DR/BDR在这里选举完成

2、根据网络类型建立邻接关系,可以想象为一条虚链路,建立邻接以后才能发送LSA

3、每一台路由器都会在形成邻接关系的路由器发送LAS链路状态通告,LSA描述了路由器的链路、接口、邻居。

4、每一台路由器收到LSA后把LSA放到LSDB中,并且向邻居发送一份LSA的拷贝。

5、LSA洪泛,形成相同的链路状态数据库。

6、SPF算法计算最短路径。

7、把最短路径放到路由表中。每10秒发送hello,每30分钟重传LSA

OSPF packet type

1 hello
2 DBD
3 LSR
4 LSU
5 LSACK


邻居和邻接关系:

在发送任何LSA通告之前,OSPF路由器都必须首先发现他们的邻居并且建立起邻接关系。


路由器ID的选举:在OSPF区域中唯一标识一台路由器的身份

1、router-id命令手工配置

2、所有环回loopback接口上最高的IP地址。

3、所有物理接口上做高的IP地址。

loopback接口做为RID的好处,一般建议手工设置RID,并且使用环回接口,因为环回接口永远处于UP状态,防止路由翻动。


hello协议的5个目的:

发现邻居路由器
匹配几个参数
担当keepalive的角色
确保双向通信
广播或NBMA网络中选取DR/BDR

hello数据包包含以下信息:

路由器ID
AREA ID
地址掩码
认证类型  
hello时间间隔          修改命令:ip ospf hello-interval
hello无效时间间隔      修改命令:ip ospf dead-interval
DR/BDR
路由器的优先级
邻居的路由器ID

OSPF邻居的工作过程:
                   当一台路由器从它的邻居路由器收到一个hello数据包时,它将检验该hello数据报携带的(区域ID、认证信息

网络掩码、hello时间、无效时间) 如果不匹配,那么该数据包将被丢弃,而且无法建立邻接关系。

如果所有的参数都匹配,那么这个hello数据包被认为是有效的,如果始发路由器的RID已经在接收该hello数据包路由器的邻居表中

出现,那么路由器的无效时间间隔计时器将被重置。如果没有,就加入到邻居表中。

当A路由器发送自己的RID给B路由器,B路由器也发送自己的RID给A路由器时,双方握手相互认识,并且从接收hello数据报中看到自己的

RID,那么这两台路由器就是双向通信two-way建立成功,如果这两台路由器在网络中不是DR/BDR,那么他们的状态只能到此为止。


OSPF的邻居状态机:OSPF路由器需要在下面几种状态下转换后,才能形成一个完全邻接的关系。

失效(down)—shutdown

尝试(attempt)—只适合在NBMA网络中

初始(init) 开始发现邻居,并互相发送自己的RID给对方,建立邻居数据结构

双向通信(two-way) 表明本地路由器已经在来自邻居hello包中看到自己,双向通信建立成功,DR/BDR选举

信息交换初始(Exstart) 建立主/从关系,谁先发链路状态描述信息

信息交换(EXchange) 互相发送DBD,链路状态描述

信息加载(loading) 如果从路由链路状态请求列表里还有LSA条目,进入此状态

全邻接(full) 建立起完全邻接以后,可以洪泛LSA通告

 


邻接关系:
         在一个邻接关系的创建过程中,OSPF使用下面3种数据包类型:

         1、数据库描述数据包 DBD
        
         2、数据库请求数据包 LSR

         3、数据库更新数据包 LSU

数据库描述的理解:DBD只是携带一个路由器LSA简要的描述,并不是完整的LSA,如果LSA是一本书,那么DBD就是书的目录而已。

 

邻接关系简单的建立过程:

                当2台路由器由TWO-WAY转到EXStart状态时,开始进行主/从关系协商,RID最高为主,主路由MS位置1,从路由回复一个MS位

为0的数据包,并进入EXchange状态,双方互相发送DBD链路状态描述,如果从路由的链路状态请求列表中还有LSA条目时 进入loading状态,直

到请求列表为空,双方才进入full状态。


一、在点到点的网络中,路由发送链路更新到224.0.0.5,在点到多点和虚链路的网络上,路由器以单播方式将更新数据包发送给邻居。


二、在NBMA网络上LSA以单播方式从DROTHERS发送给DR/BDR,并且DR路由也是以单播的方式发送LSA的拷贝到所有邻接路由器。


三、
1、在一个广播多路访问中:当一台路由链路发生变化时,该路由器通过组播地址224.0.0.6发送一个链路状态通告LSU给本区域中的DR和BDR,

来通告自己的链路状态。

2、DR接收并确认LSU更新后,用组播地址224.0.0.5将该LSU包洪泛到区域里所有的OSPF路由器上。

3、区域中的其他路由器收到这个LSU包,发送一个LSACK确认给DR,然后更新自己的链路状态数据库,以自己为源,所有点为目标,用SPF计算
出最佳路径

 

在一个广播或NBMA网络中,要选举指定路由器和备份指定路由器。


为什么要选举DR/BDR?

             在一个广播的网络中,假设有5台路由器,那么将构成n(n-1)/2个邻接关系,(n-1)是减去自己,就是10条邻接,

            每台路由器都会通告n-1条LSA+5条网络LSA,5台路由器,那么就是25条LSA,明显存在过多不必要的LSA。


为了避免这些问题,需要选举一台DR:


指定路由器:(DR)

          DR与该区域上的所有其他路由器建立邻接关系
          DR负责收集区域里所有链路状态通告,同步数据库
          DR负责LSA到区域中的其他路由器。
                

为了避免DR失效,导致网络重新建立邻接,还需要选一台BDR:

备用指定路由器:(BDR)

           BDR从DR上接收所有链路状态更新,但是不发送链路状态更新,
           BDR也和所有路由建立邻接关系,当DR发生单点故障时,BDR能快速的接替DR的工作。


DR/BDR选举的过程:

               1、邻居之间首先要建立了双向通信以后,互相检查hello数据包的优先级,DR,BDR字段。
         
               2、所有的路由器将宣称自己是DR,所有的路由器也将宣称自己是BDR。

               3、从具有选举资格的路由器列表中,创建一个还没有宣告为DR的子集。

               4、先比较hello数据包里的优先级,优先级相等的情况下,比RID,最高RID的路由器为BDR。

               5、先比较hello数据报里的优先级,优先级相等的情况下,比RID,最高RID的路由器为DR。

               6、如果没有路由器宣告自己是DR,那么这个时候BDR将升级为DR。

如果在一个广播的网络中,DR和BDR已经存在,那么一台新加入的具有更高优先级的路由也不会替换掉原来的DR/BDR。

 

OSPF定义的5种网络类型:

点到点 P-T-P

点到多点

broadcast广播

NBMA

virtual link

 


一、OSPF的区域 area

1、为什么要使用区域?

OSPF协议使用了多个链路数据库和SPF复杂的算法,那么必定他将要耗费路由器更多的内存和增加CPU的负担,当一个OSPF网络
不断扩大时,路由的负担就会越大,或者达到路由器性能的极限。

使用区域来缩小一些不利的影响。

划分区域的好处:
1、减少CPU负担
2、DB减少,LSA通告减少
3、LSA被限制在区域内


OSPF协议防止环路的机制是什么?

首先域内的防环是靠SPF算法计算出一个无环路的拓扑数据库的,

那么域间的防环是靠骨干区域,因为所有的普通区域都要和骨干区域相连,虽然OSPF在区域内是一个链路状态协议,但是在区域与区域间的

通信其实是使用了距离矢量的协议用跳来计算的,那么域间的通信必须经过骨干区域就有效的防止区域间的环路。

 

 


三种区域通信类型:

域内通信 intra 在区域内的通信
域间通信 inter 非骨干区域到骨干区域之间的通信
外部通信 exter OSPF协议与外部其他路由协议的通信

OSPF路由器的类型:

1、内部路由器:在骨干区域内的路由器成为内部路由器

2、ABR:用于连接骨干区域到其他区域的路由器

3、ASBR:用来把其他路由协议住入到到OSPF区域的路由器

4、骨干路由器:至少有一个接口在骨干区域里。

 

 

二、分段区域的概念:分段区域是指链路失效使一个区域的分割成多个区域。

第一种情况:
           如果一个非骨干区域变成了分段区域,但是在这个分段区域中还有一台ABR路由器,那么这个分段区域是不会产生中断通信的。
骨干区域仅仅把原来这一个区域看成2个区域,但是由于变成了2个区域,原来的域内通信就变成了域间通信。


第二种情况:如果一个骨干区域变成了分段区域,这个分段的骨干区域将把原来的骨干区域隔离成两部分的区域。

 

一些好的建议与解决方法:

在区域0和区域100之间放2台ABR路由器,那么任何的单条链路失效或者单个ABR失效都不会隔离掉这个区域。

 

 

三、虚链路(virtual link):一条通过一个非骨干区域连接到骨干区域的链路。

应用的目的:
           1、通过一个非骨干区域连接一个区域到骨干区域。
           2、通过一个非骨干区域连接一个分段的骨干区域。

规则:虚链路必须配置在两台ABR之间。
      虚链路所经过的区域称为传送区域。
      传送区域不能为末梢区域。

虚链路的配置:2台ABR之间
              RA:area 1 virtual-link {对方RID}
              RB:area 1 virtual-link {对方RID}


 

链路状态数据库就象一个容器,用来存放所有有效的LSA,对于OSPF来说,保持链路状态数据库的统一非常重要。


OSPF协议的LSA的重刷新?

                 当LSA存放在LSDB中的时候,他的老化时间是从0不断增大的,当这些LSA到了最大的生存时间时,

那么他们将被从OSPF区域中删除掉,这对于OSPF保持LSDB统一的目的来说是不可以的,所以要有一种机制来防止

有效的LSA被删除,那么这种机制就是LSA重传,他会每30分钟重传LSA,并将序列号加1,老化时间设置为0


LSA的类型:

1、路由器LSA:描述了每台路由器产生的LSA通告,向本区域洪泛。

2、网络LSA:描述了由DR产生的LSA,向本区域所有路由器洪泛。

3、网络汇总LSA:由ABR产生,在2个区域间发送类型3的LSA,在整个OSPF自制系统泛洪。

4、ASBR汇总LSA:由ABR产生,用于向其他区域通告单独一个ASBR路由器的地址信息。

5、外部LAS:由ASBR路由器发出,用于将外部路由协议学习的路由注入到OSPF区域。

6、组成员LSA:组播的OSPF协议。

7、NSSA外部LSA:是指在非纯末梢区域内,由ASBR路由器的LSA通告。

OSPF外部路由的metric类型:

O: OSPF intra-area(router LSA)

OIA: OSPF inter-area(summary LSA)

OE1: type-1 external router

OE2: type-2 external router

 

什么时候可以将一个区域配置为末梢区域?

          当一个区域中的路由器并不需要了解所有外部目的地信息的时候,可以把这个区域配置成末梢区域。


末梢区域的特点:

是一个不允许外部LAS通告在这个区域内泛洪的区域,也就是在一个末梢区域里不会泛洪类型5和类型4的LSA,

当这些LSA不在末梢区域里泛洪的时候,可以节省内存和CUP负担。

 


末梢区域的概念:

末梢区域里的路由器发送数据包可以通过一台ABR路由器出去,位于这个末梢区域边界的ABR路由器将使用类型3的汇总LSA向

这个区域通告一条默认路由(0.0.0.0),区域内的路由都会匹配这条默认路由。


末梢区域里的4个限制:

1、和所有OSPF区域一样,末梢区域里的LSDB也要统一。

2、虚链路不能配置在一个末梢区域里面,也不能穿越末梢区域。

3、末梢区域内不能有ASBR路由器,因为ASBR路由器连接不同路由协议,这样会产生类型5的LSA,末梢区域规定不允许有类型5的LSA。

4、末梢区域因为默认路由的原因,不能确定到达ASBR的最优网关。

 

一、完全末梢区域(totally stubby area):

完全末梢区域将阻止类型3、类型4、类型5的LSA进入区域,仅仅有一条类型3的默认路由指向区域外的所有目的地,这样更节省内存和CPU。


二、非纯末梢区域(NSSA):他是既允许外部的路由协议通告到OSPF自制系统中,又同时保留了末梢区域的其他特征,NSSA区域会有一台ASBR

路由器运行不同路由协议,所以,在NSSA区域中,使用类型7的LSA通告在区域内泛洪,但是ABR路由会将类型7转为类型5的LSA

area 1 stub

area 1 stub no-summary (只在ABR配置)

area 1 nssa

基本概念:

         OSPF数据包是由多重封装构成的,解析一个OSPF数据包就象给洋葱拨皮一样,首先OSPF数据包是封装在IP包头里面的,他的协议

号是89,TTL值设置为1,所以OSPF的数据包永远不可能穿越邻居路由器。

        一个完整的OSPF数据包是由OSPF包头+OSPF数据构成的,那么OSPF的数据又分为5种类型。

 

一、OSPF数据包的头部格式:

版本:OSPFv2

类型:(hello DBD LSR LSU LSack)

数据包长度:包头+数据

路由器ID

区域ID

校验和

认证类型:0=空 1=明文 2=MD5

认证:数据报认证的必要信息

密钥ID:安全密钥

认证数据长度:

加密序列号:一个不会减小的数字,用来防止重现***

 

二、5种数据包的格式:

1、hello数据包==OSPF包头+本身
  
   网络掩码:接口的掩码

   hello时间间隔:10秒

   hello无效间隔:40秒

   可选项

   优先级:用于选举DR/BDR

   DR/BDR

   邻居:邻居的RID

 

 

 

2、链路数据描述DBD:==包头+本身

   接口MTU:始发路由器能发送的最大MTU值

   可选项:

   初始位:第一个数据包

   后继位:不是最后一个数据包

   MS位:用于协商主/从路由器

   数据库序列号:不断增大

   LSA头部:包含一个LSA的所有头部信息,

 

3、链路状态请求LSR:

链路状态类型:用于请求LSA的类型,比如是类型1或者是类型2等

链路状态ID:

通告路由器:始发路由器的RID

 


4、链路状态更新LSU:用来LSA的泛洪和发送响应给请求LSA的邻居

   LSA数量:用来描述数据包包含的LSA数量


5、链路状态确认LSACK:

   用来对一个LSA泛洪进行确认,确保可靠性

 

 

二、OSPF的LSA格式:

    LSA头部格式:LSA头部在所有7种类型LSA的开始处

    老化时间:发送LSA后经历的时间,靠LSA重传刷新自己

    可选项:

    类型:描述是那种类型的LSA

   链路状态ID

   通告路由器:

   序列号:

   校验和:

   长度:LSA头部+LSA数据

 

   OSPF的认证

 

OSPF数据包可以通过认证来防止有害路由信息的发生。

认证有3种类型:

0:空

1:明文

2:MD5

如果要配认证,那么整个区域的路由器都要配置,

所有路由器不需要配置一样的认证密码

但是邻居之间要配置一样的密码

 

一、类型1的配置:

interface e0

ip add 192.168.1.1 255.255.255.0

ip ospf authentication-key cisco

使认证生效的命令:

router ospf 1
area {*} authentication

 

二、类型2的配置:
接口模式下:

ip ospf message-digest-key md5 cisco

使认证生效的命令:

area 1 authentication message-digest