选举DR/BDR
DR/BDR用Hello包选,选举期40秒,选举期内Hello包里优先级高的就是DR,次高的为BDR。优先级相同RouterID高的就是DR,次高的就是BDR。
优先级默认都是1,可以手动改,如将R1的优先级改成2:
R1的优先级最高成了DR。R2R3R4优先级相同,R4的RouterID最高,因此R4成了BDR,剩下的R1R2就是DRother
再查看一下DRother(R2)和BDR(R4)的邻居表:
FULL表示邻接关系要交换LSA,2WAY不交互LSA,因此DRother之间都是2WAY状态
OSPF特殊区域之Stub
配好IP后宣告OSPF和RIP的路由。R3作为ASBR需要将OSPF和RIP重分布进去:
现在R1可以访问RIP区域内的路由,pingR5的环回口地址10.1.1.1可以ping通。查看R1的LSDB:
但是对于R1来说并不需要全网络的路由信息,LSA过多会加大开销,减慢网络收敛时间。因此可以将R1所在的Area 1设成Stub区域,来限制4类5类的LSA:(R2上同样需要将Area 1设成Stub区域)
可以看出Stub区域限制了4类5类LSA的泛洪,ABR生成一条默认路由,供区域内的路由器去往被拒绝掉的LSA包含的路由。再看路由表:
R1的路由表缩小了,照样可以ping通R5的环回口地址10.1.1.1
OSPF特殊区域类型之Totally Stub
Tolly Stub可以在Stub的基础上再拒绝掉3类LSA,可以进一步缩小路由表。在ABR(R2)上将区域1配置成Totally Stub,区域内的其他路由器(R1)仍旧是Stub不变。并再次观察R1的LSDB:
原本区域0的3类LSA也被拒绝了,只剩下这条ABR自动产生的3类LSA,提供默认路由供区域内的路由器访问外部。再观察R1的路由表:
R1的路由表进一步缩小,照样可以ping通R5的环回口地址10.1.1.1
虚链路(区域分隔)
OSPF中划分区域时规定,普通区域必须和骨干区域Area0相连,通过骨干区域来跨区域学习路由,这样可以避免环路。但上图中R1所在的区域3并没有连接到骨干区域Area0,就无法学习到Area0和Area3的路由,这就是跨区域问题,需要虚链路来解决。
R1虽然和R2已经是邻接Full关系,但看R1的路由表发现,R1没有通过OSPF学习到任何其他区域的路由。原因就是R1所在的Area3没有连接到骨干区域Area0上。解决方式就是在Area2上创建一条虚链路,用于连接Area3和骨干区域Area0:
有了虚链路后,再次查看R1的路由表,发现学到了其他区域的路由了:
虚链路(骨干区域分割)
和上一个虚链路的例子唯一的区别就是左上角R1所在区域变成了骨干区域Area0,这下一个自治系统中有多个骨干区域0,就会造成问题:R1只能学习到Area2的路由。R2只能学习到R1所在的骨干区域Area0的路由。R3只能学到Area1的路由。R4只能学到Area2的路由。由于存在多个骨干区域0,因此任何一台路由器都无法学习到全网的路由。在Area2上创建一条虚链路,将两个骨干区域0连接在一起:(命令其实和上例是一样的)
这下两个被分隔的骨干区域0虚拟合在了一起,所有路由器又能学习到全网路由了: