版本声明:转载请注明出处。未经允许,禁止商业用途。
BFD基础
BFD是Bidirectional Forwarding Detection的缩写。标准为rfc5880 Bidirectional Forwarding Detection (BFD)。
上层协议自身的机制来进行故障检测,上层协议的检测时间都在1秒以上。BFD协议提供了一个通用的标准化的介质无关、协议无关的快速故障检测机制。在转发平面检测故障。
BFD控制报文有两种:hello报文和echo报文。但是BFD并没有定义echo报文的内容,因为只有发送者自己需要解析echo的内容。
BFD控制报文采用UDP封装,目的端口号为3784。
BFD Echo报文采用UDP封装,目的端口号为3785。
上层协议建立BFD邻居关系后。通知BFD模块源和目的地址,BFD通过控制报文使用三次握手机制建立BFD邻居。
BFD周期性发送控制报文,如果指定时间内没有收到对端的BFD控制报文,则认为通信中断。BFD双方可以协商参数,实际上由慢的一方决定了发送频率。
发现通信中断后,BFD会话断开,通知上层协议。上层协议收到通信中断的通知之后,断开邻居,选择新的路径。
Echo功能是指会话的周期性发送BFD Echo报文,对端不对此报文进行处理,只是将此报文返还给发送端。如果连续丢失的echo的数目达到指定个数则认为通信中断了。Echo模式使得报文量翻倍。但是发送方构造报文变得简单,应答方不需要构造报文了。所以报文发送间隔可以更小,检测出故障的时间可以更短。
其实上面所说的都是异步模式(Asynchronous mode)。还有一种模式,叫做查询模式(demand mode),是指在需要时才发送BFD报文。查询模式下也是可以选择使用BFD hello报文还是BFD Echo报文进行探测。
BFD实现
控制层面进行BFD会话的协商和建立。即会话还没有up时,转发平面将收到的BFD消息重定向给控制层面,同时由控制平面来发送BFD消息。会话up之后,报文收发都由转发平面进行。会话管理功能控制层面和转发层面都要实现,分别管理整机、本板的会话。