.DR和BDR
在广播网和NBMA网络中,任意两台路由器之间都要传递路由信息。如果网络中有n台路由器,则需要建立n(n-1)/2个邻接关系。这使得任何一台路由器的路由变化都会导致多次传递,浪费了带宽资源。为解决这一问题,OSPF协议定义了DR(Designated Router,指定路由器),所有路由器都只将信息发送给DR,由DR将网络链路状态发送出去。
如果DR由于某种故障而失效,则网络中的路由器必须重新选举DR,再与新的DR同步。这需要较长的时间,在这段时间内,路由的计算是不正确的。为了能够缩短这个过程,OSPF提出了BDR(Backup Designated Router)的概念。
BDR实际上是对DR的一个备份,在选举DR的同时也选举出BDR,BDR也和本网段内的所有路由器建立邻接关系并交换路由信息。当DR失效后,BDR会立即成为DR。由于不需要重新选举,并且邻接关系事先已建立,所以这个过程是非常短暂的。当然这时还需要再重新选举出一个新的BDR,虽然一样需要较长的时间,但并不会影响路由的计算。
除DR和BDR之外的路由器(称为DR Other)之间将不再建立邻接关系,也不再交换任何路由信息。这样就减少了广播网和NBMA网络上各路由器之间邻接关系的数量。
如图9-20所示,用实线代表以太网物理连接,虚线代表建立的邻接关系。可以看到,采用DR/BDR机制后,5台路由器之间只需要建立7个邻接关系就可以了。
DR和BDR不是人为指定的,而是由本网段中所有的路由器共同选举出来的。路由器接口的DR优先级决定了该接口在选举DR、BDR时所具有的资格。本网段内DR优先级大于0的路由器都可作为"候选人"。
选举中使用的"选票"就是Hello报文。每台路由器将自己选出的DR写入Hello报文中,发给网段上的每台运行OSPF协议的路由器。当处于同一网段的两台路由器同时宣布自己是DR时,DR优先级高者胜出。如果优先级相等,则Router ID大者胜出。如果一台路由器的优先级为0,则它不会被选举为DR或BDR。
另外,在使用DR和BDR时需要注意以下几点:
(1)只有在广播或NBMA类型接口才会选举DR,在点到点或点到多点类型的接口上不需要选举DR;
所以,为什么两台路由器之间用Serial口相连时,不会选举DR/BDR。
(2)DR是指某个网段中概念,是针对路由器的接口而言的。某台路由器在一个接口上可能是DR,在另一个接口上有可能是BDR,或者是DR Other。
(3)若DR、BDR已经选择完毕,当一台新路由器加入后,即使它的DR优先级值最大,也不会立即成为该网段中的DR。
(4)DR并不一定就是DR优先级最大的路由器;同理,BDR也并不一定就是DR优先级第二大的路由器。
2.OSPF报文类型
OSPF有以下5种报文类型:
(1)HELLO报文(Hello Packet):最常用的一种报文,周期性地发送给本路由器的邻居。内容包括一些定时器的数值、DR、BDR(Backup Designated Router)以及自己已知的邻居。
(2)DD报文(Database Description Packet):两台路由器进行数据库同步时,用DD报文来描述自己的LSDB,内容包括LSDB中每一条LSA的摘要(摘要是指LSA的HEAD,通过该HEAD可以唯一标识一条LSA)。这样做是为了减少路由器之间传递信息的量,因为LSA的HEAD只占一条LSA的整个数据量的一小部分,根据HEAD,对端路由器就可以判断出是否已有这条LSA。
(3)LSR报文(Link State Request Packet):两台路由器互相交换过DD报文之后,知道对端的路由器有哪些LSA是本地的LSDB所缺少的,这时需要发送LSR报文向对方请求所需的LSA。内容包括所需要的LSA的摘要。
(4)LSU报文(Link State Update Packet):用来向对端路由器发送所需要的LSA,内容是多条LSA(全部内容)的集合。
(5)LSAck报文(Link State Acknowledgment Packet):用来对接收到的LSU报文进行确认。内容是需要确认的LSA的HEAD(一个报文可对多个LSA进行确认)。
3.DR/BDR具体的选举过程
(1)当路由器与邻居建立双向通信(2-way)后,默认情况下路由器要等待wait time时间(默认40与dead time相同)以接收邻居路由器发过来的hello报文通告DR/BDR,如果在此期间收到BDR的hello报文,或DR的hello报文(无指定BDR),则认为网络中已有DR,无需选举DR,直接使用原有的DR,此时不需要等待wait time时间,可以快速选举BDR(如果没有的话).
(2)如果路由器没有收到(1)中描述的报文,则等待wait time时间后,宣告自己是DR及BDR(优先级要>0)。
(3)从所有宣告自己是BDR的路由器列表中,根据优先级和Router ID选举出BDR。如果没有路由器宣告自己是BDR,则优先级最高的为BDR(优先级要>0),否则Router ID最大的为BDR。
(4)除去(3)中的路由器,如果剩下的路由器中有宣告自己是DR的,则根据优先级与Router ID选举新的DR。(此情况通常出现在两个网络合并的情况下,因为两个网络中原来都有DR,现在要重新选举)。
(5)如果(4)的情况不存在,则(3)中选举出来的BDR称为DR,重新选举BDR。