一直纠结那个断言机制后loser的定时器180s跟剪枝定时器210s的问题。
上篇内容,我们看到剪枝定时器210s,也就是说在R1在210s内是无法再通过g2/0/0转发组播报文,而通过抓包,情况也相符。
但是,在学习断言机制的时候,就懵圈了。
断言机制如上图:当组播报文通过扩散后,R2--->R4,R3(截图看不到标识,是下面的路由器)--->R4,由于R4去往源有两条等价路径,为了避免收到两份组播数据而有了断言机制。
实现:R3在转发组播报文的同时,也会收到R2转发的。同理,R2在转发同时也收到R3转发的。
此时,断言机制触发:双方互发assert报文,来决胜出winner(负责发送组播报文)与loser,选举是:1、IGP的优先级(值小的胜出) 2、去往源的cost(小的胜出) 3、IP地址的大小(大的胜出)
此图中就为R2为winner,但是作为R3的loser启动180s的定时器,180s后就可以重新转发组播报文。这是为了避免winner宕机了,导致组播流量中断的情况。
可是处于懵圈的我一直有的疑问是:不是剪枝定时器是210s吗?这个loser不转发组播报文那么其上游邻居端口不是一定会处于剪枝状态吗?
也就是说,loser的上游邻居接口要210s后才能转发组播报文到loser,那loser怎么能180s后就能转发组播报文?
然后抓包发现R1的g0/0/2在180s后就开始转发组播报文了,那为什么呢?它是知道自己这个下游端口连着一台loser?怎么知道的?
原来我纠结的原因在于忽略了嫁接消息(Graft)
R3作为loser,会由于避免winner宕机而启动180s的定时器,超时后可以转发组播报文,这意味着,R3的g0/0/1会在180s后出现在下游接口列表,然后触发嫁接机制,往R1发送Graft报文,R1收到后得知自己还有其它下游接口,则回复Graft-Ack报文,并把g0/0/2添加到下游接口列表中,然后转发组播报文,所以R1在嫁接机制的作用下会提前进行转发组播报文了。