BFD原理
bfd会话建立过程:
1)A、B两站启动BFD,各自初始状态为“down”,发送BFD报文携带状态为“down”;
2)B站收到状态为“down”的BFD报文,本地状态切换至“init”,发送BFD报文携带状态为“init”;
3)B站本地BFD状态为“init”后,再接收到状态为“down”的报文不做处理;
4)A站BFD状态变化过程同上;
5)B站收到状态为“init”的BFD报文,本地状态切换至“up”;
6)A站在BFD状态变化过程同上;
7)A、B两站在发生“down=>init”变化后,会启动一个超时定时器,该定时器的作用是防止本地状态阻塞在“init”(有可能AB连接此时断连,会话不能正常建立),如果在规定的时间内仍未收到状态为“init/up”的BFD报文,则状态自动切换回“down”;
8)本地状态UP标志会话建立成功。
/**************************************************************************************/
* 检测范围包括接口、数据链路以及转发引擎本身。
* bfd控制报文采用udp封装,目的端口号3784,源端口号在49152到65535的范围内。
bfd回声报文(echo)采用udp封装,目的端口号为3785,目的ip地址为发送接口的ip地址(本端
ip),源ip地址由配置产生。
* bfd报文结构
* bfd有两种工作模式和一种辅助功能
异步模式:交互bfd控制包,检测时间内收不到则宣布down;
查询模式:协议沉默,除非系统显式验证连续性,会发一个短系列的bfd控制包,在检测时间内收
到则继续沉默,收不到则宣布down;
回声功能:本地发送一系列的bfd回声报文,远端系统通过它的转发通道将它们环回回来,如果本
地连续几个回声报文没有收到,会话就会宣布down。
* bfd状态机
* bfd慢启动
协商过程中bfd下dpm动作有三次:第一次是创建会话时候下dpm获得yid,第二次是会话up的时候下dpm更新bfd状态,up后处于慢协商状态,1s钟一个包,第三次是up后5秒钟下dpm更新时间参数,此时fpga发包间隔从1s钟改为10ms(或者业务配置的发包间隔)
* bfd反向会话
对于一些单向的场景(我司lsp tunnel),bfd的控制报文第一个封装在ping包中(icmp的tlv)发出去,对端收到后创建反向会话,并发协商报文,然后两端走正常的协商流程。