合作机构:阿里云 / 腾讯云 / 亚马逊云 / DreamHost / NameSilo / INWX / GODADDY / 百度统计
一、概述
M-BFD是在最新的RFC8562(Bidirectional Forwarding Detection (BFD) for Multipoint Networks,2019年4月Release)中定义,针对多点或组播网络中的一种特殊应用,它和传统BFD的双向检测是有“冲突”的,因为多点传输本质上是单向的,仅仅是为了验证单向连接的连通性,在RFC8562中定义了两种角色:Head和Tail,对于BFD报文,Head端上的MEP只发不收,而Tail端的MEP只收不发,协议的本质是只为了检测Head–>Tail的单向的连通性,如下图所示,BFD的报文只会从Head发向Tail,只在Tail检测Head到Tail的连通性,Head不需要知道Tail是否丢失。
Head端MEP不运行状态机,它的状态依靠管理员配置维护,只有Up一种状态,用户可通过BFD报文通告远端Tail本地状Up,Down,AdminDown;而Tail状态机相对RFC5880也较为简单,没有INIT状态,只有Down、UP两种状态,其状态机如下:
在时间协商方面,其原理和RFC5880定义的基本是一样的,在Head端由于只发不收故本地RequiredMinRxInterval = 0,DesiredMinTxInterval !=0为期望发送报文间隔,而Tail只收不发故本RequiredMinRxInterval != 0为期望接收间隔,DesiredMinTxInterval ==0;当Head期望发送的时间间隔发生变化,也会发P请求修改,Tail端不需要回F,直接修改ActualRxInterval= DesiredMinTxInterval
(报文),而在故障检测方面,Tail端的故障检测时间DetecTime = ActualRxInterval * DetectMult(报文),每当收到BFD控制报文时,就会重置检测时间DetecTime ,并保持会话UP状态。如果在检测时间内没有收到BFD控制报文,即DetecTime减为0时,BFD会话会迁移到DOWN状态,并产生dLoc,通知该会话所服务的上层应用发生故障,由上层应用采取相应的保护措施。
二、RFC8563
RFC8563(Bidirectional Forwarding Detection (BFD) Multipoint Active Tails,2019年4月Release)是对RFC8562的一个补充,在某些特定的应用中,Head可能需要获取各个Tail的连接情况而引入的标准,总共有三种方法:
Tail当检测到fail时,主动发送单播BFD给Client告知;
Head 偶尔发送Poll(仍为组播)查询所有Tail,Tail回复单播Final告知;
Client主动发送Poll到Tail(单播)查询指定Tail状态,Tail回复单播Final告知。
在RFC8563中对Head定义了两个角色MultipointClient和MultipointHead,MultipointHead承担head公共的一个角色,它承担向Tail发送定时发送BFD Hello报文,同时也可以按需发送Multipoint Poll sequence的报文,对接收到的BFD根据YourDisc查到得到LMEP,其LMEP配置的角色是MultipointHead,然后根据BFD中携带的MYDisc查找得到RMEP,其RMEP配置的角色为MultipointClient。为了查询远端Tail的状态,在RFC8563中可通过MultipointHead发送P轮询(组播)远端Tail的状态,远端Tail收到P之后会将P清为0 ,F置为1,并通过反向路径进行回复;如果Client需要单独查询远端某个Tail信息时,可发送单播BFD 置P为1查询对应的远端Tail,远端Tail收到P之后会将P清为0 ,F置为1,并通过反向路径进行回复。
1.状态机
Head或Client同样没有状态机的概念,Tail的状态机同RFC8562。
2. 时间协商
Tail端的故障检测和RFC5862是一样的;而Head或Client端只是为了查询状态,也不需要时间协
商。
3. 故障检测
a.Tail故障检测
Tail端的故障检测和RFC8562是一样的。
b.Client故障检测
当Client发送P包是目的是对某个Tail查询状态,其DetectTime = bfd.detectMult * actualTxInterval;而当Head统一向所有Tail发送P时,Client上DetectTime 大于或等bfd.RequiredMinRxInteral时间,或者远大于这个时间,以保证报文能走一圈的时间;但是如果detecTime超时后没有收到回复,只表示本次查询失败,不代表Tail没有收到Head的报文。所以对于Client端MEP而言,不存在故障检测一说,它只是作为Client会记录或查询远端Tail的状态信息。
三、应用
如下是华为NE40交换机中部署BFD for组播VPLS可以对组播VPLS链路进行检测的一种典型应用,当链路或中间节点故障时,叶子节点上BFD能够快速感知,并触发保护组切换到备份组播隧道上接收流量,从而满足用户对于组播业务的可靠性需求。
如上图所示,当链路1(AC链路)发生故障时,根节点上BFD感知到接口Down,立即停止发送BFD报文,所有叶子节点收不到BFD报文上报Down,触发保护组切换到备份组播隧道上接收流量;当节点2、链路3、节点4、链路5故障时,叶子节点收不到BFD报文上报Down,触发保护组切换到备份组播隧道上接收流量。故障恢复后,BFD重新建立,叶子节点感知故障恢复后,回切到主路径接收组播数据。
TOP