OSPF定义的5种网络类型:
-
广播型网络(broadcast),由cisco提出的网络类型,自动发现邻居,选举DR/BDR,hello时间10s。
-
点到多点网络 (point-to-multipoint),由RFC提出,自动发现邻居,不选举DR/BDR,hello时间30s。
-
点到多点非广播,由cisco提出的 网络类型,手动配置邻居,不选举DR/BDR,hello时间30s。
-
1. 广播型网络,比如以太网, Token Ring和 FDDI,这样的网络上会选举一个DR和BDR,DR/BDR的发送的OSPF包的目标地址为224.0.0.5,运载这些OSPF包的帧的目标MAC地址为0100.5E00.0005;而除了DR/BDR以外发送的OSPF包的目标地址为 224.0.0.6,这个地址叫 AllDRouters.
-
1. NBMA网络,比如 X.25,Frame Relay,和 ATM,不具备广播的能力,因此邻居要人工来指定,在这样的网络上要选举DR和BDR,OSPF包采用unicast的方式
-
1.点到多点网络 是NBMA网络的一个特殊配置,可以看成是点到点链路的集合. 在这样的网络上不选举DR和BDR.
-
1.虚链接: OSPF包是以unicast的方式发送
所有的网络也可以归纳成2种
网络类型:
-
传输网络(Transit Network)
-
末梢网络(Stub Network )
OSPF
在DR和BDR出现之前,每一台
路由器和他的所有邻居成为完全网状的OSPF邻接关系,这样5台路由器之间将需要形成10个邻接关系,同时将产生20条LSA.而且在多址网络中,还存在自己发出的LSA 从邻居的邻居发回来,导致网络上产生很多LSA的拷贝,所以基于这种考虑,产生了DR和BDR.
DR将完成如下工作
DR BDR选取规则:DR BDR选取是以
接口
状态机的方式触发的.
-
路由器的每个多路访问(multi-access)接口都有个路由器优先级(Router Priority),8位长的一个整数,范围是0到255,Cisco路由器默认的优先级是1优先级为0的话将不能选举为DR/BDR.优先级可以通过命令ip ospf priority进行修改.
-
Hello包里包含了优先级的字段,还包括了可能成为DR/BDR的相关接口的IP地址.
-
当接口在多路访问网络上初次启动的时候,它把DR/BDR地址设置为0.0.0.0,同时设置等待计时器(wait timer)的值等于 路由器无效间隔(Router Dead Interval).
DR BDR选取过程:
-
路由器X在和邻居建立双向(2-Way)通信之后,检查邻居的Hello包中 Priority,DR和BDR字段,列出所有可以参与DR/BDR选举的邻居(priority不为0).
-
如果路由器X新近成为DR或BDR,或者不再成为DR或BDR,重复步骤2和3,然后结束选举。这样做是为了确保路由器不会同时宣告自己为DR和BDR。
-
要注意的是,当网络中已经选举了DR/BDR后,又出现了1台新的优先级更高的 路由器,DR/BDR是不会重新选举的。
-
DR/BDR选举完成后,DRother只和DR/BDR形成邻接关系.所有的 路由器将组播Hello包到AllSPFRouters地址224.0.0.5以便它们能跟踪其他邻居的信息,即DR将泛洪update packet到224.0.0.5;DRother只组播update packet到AllDRouter地址224.0.0.6, 只有DR/BDR监听这个地址.
简洁的说:DR的筛选过程
-
优先级为0的不参与选举;
-
优先级高的 路由器为DR;
-
优先级相同时,以router ID 大为DR;
router ID 以
回环接口中最大ip为准;若无回环接口,以真实接口最大ip为准。
-
缺省条件下,优先级
-
邻居关系
邻接关系建立的4个阶段:
-
邻居发现阶段。
-
双向通信阶段:Hello报文都列出了对方的RID,则BC完成。
-
数据库同步阶段:主从协商;DD交换;LSA请求;LSA传播;LSA应答。
-
完全邻接阶段: full adjacency。
邻居关系的建立和维持都是靠Hello包完成的,在一般的
网络类型中,Hello包周期性的以
HelloInterval秒发送,有1个例外:在NBMA网络中,
路由器每经过一个PollInterval周期发送Hello包给状态为down的邻居(其他类型的网络是不会把Hello包发送给状态为down的路由器的).Cisco路由器上PollInterval默认60s Hello Packet以组播的方式发送给224.0.0.5,在NBMA类型,点到多点和虚链路类型网络,以
单播发送给邻居路由器。邻居可以通过手工配置或者Inverse-ARP发现。
OSPF
路由器在完全邻接之前,所经过的几个状态:
-
Attempt: 只适于NBMA网络,在NBMA网络中邻居是手动指定的,在该状态下, 路由器将使用 HelloInterval取代PollInterval来发送Hello包。
-
Init: 表明在DeadInterval里收到了Hello包,但是2-Way通信仍然没有建立起来。
-
two-way: 双向会话建立,而RID彼此出如今对方的邻居列表中。(若为广播网络:例如:以太网。在这个时候应该选举DR,BDR。)
-
ExStart: 信息交换初始状态,在这个状态下,本地 路由器和邻居将建立Master/Slave关系,并确定DD Sequence Number,路由器ID大的的成为Master。
-
Exchange: 信息交换状态,本地 路由器和邻居交换一个或多个DBD分组(也叫DDP),DBD包含有关LSDB中LSA条目的摘要信息。
-
Loading: 信息加载状态:收到DBD后,将收到的信息同LSDB中的信息进行比较。如果DBD中有更新的链路状态条目,则向对方发送一个LSR,用于请求新的LSA。
-
Full: 完全邻接状态,邻接间的链路状态数据库同步完成,通过邻居链路状态请求列表为空且邻居状态为Loading判 常见原因
-
Hello间隔和Dead间隔必须相同才能建立邻接关系。
-
区域号码不一致。
-
特殊区域(如stub和nssa等)区域类型不匹配。
-
认证类型和密码不一致。
-
路由器ID相同。
-
Hello包被ACLdeny。
-
链路上的MTU不匹配。
-
接口下OSPF网络类型不匹配。
转载于:https://blog.51cto.com/7615912/1269397