1.网络故障检测遇到的问题
某些应用的keepalive机制是通过慢hello机制来保证的,比如OSPF,默认需要40s才能检测出邻居故障,那么到邻居的链路不可达,那么也不会切换路径,但是流量还是往故障的链路去发送,所以在没有检测出邻居故障前,会持续断网
某一些应用是不支持hello机制,比如静态路由
需要一个通用的协议来解决这些问题
2.BDF的概述
BFD提供了一个通用的、标准化的、介质无关的、协议无关的快速故障检测机制,有以下两大优点:
1.对相邻转发引擎之间的通道提供轻负荷、快速故障检测
2.用单一的机制对任何介质、任何协议层进行实时检测
BFD是一个简单的“Hello”协议。两个系统之间建立BFD会话通道,并周期性发送BFD检测报文,如果某个系统在规定的时间内没有收到对端的检测报文,则认为该通道的某个部分发生了故障
3.会话建立的方式
静态建立:由管理员手工去配置本地标识符和远端标识符。适用于一些没有hello机制的协议,比如静态路由,路由器的本地标识符和远端标识符需要一一对应的
动态建立:动态分配本地和远端标识符,IGP协议
4.会话状态
down:如果在这个状态接收到down包,那么就会进入init状态
init:在这个状态下如果收到init包就会进去到up状态
up:如多定时器超时,那就就会进去down状态,或者进去admin down状态
admin down:
5.检测模式
异步模式:系统之间相互周期性地发送BFD控制包,如果某个系统在检测时间内没有收到对端发来的BFD控制报文,就宣布会话为Down
查询模式: 在需要验证连接性的情况下,系统连续发送多个BFD控制包,如果在检测时间内没有收到返回的报文就宣布会话为Down
6.检测时间
BFD会话检测时长由TX(Desired Min TX Interval),RX(Required Min RX Interval),DM(Detect Multi)三个参数决定。BFD报文的实际发送时间间隔,实际接受时间间隔由BFD会话协商决定
本地BFD报文实际发送时间间隔=MAX { 本地配置的发送时间间隔,对端配置的接收时间间隔}
本地BFD报文实际接收时间间隔=MAX { 对端配置的发送时间间隔,本地配置的接收时间间隔 }
本地BFD报文实际检测时间:
异步模式:本地BFD报文实际检测时间=本地BFD报文实际接收时间间隔×对端配置的BFD检测倍数
查询模式:查询模式:本地BFD报文实际检测时间 = 本地BFD报文实际接收时间间隔×本端配置的BFD检测倍数
7.BFD dcho功能
适用于对端路由器不支持BFD协议的场景
目的地址是自己,这个BFD的控制报文在链路正常情况是会弹回来,如果链路或者其他的一些原因导致网络不通,那么这个BFD的控制报文是回不来的,路由器在一定时间收不到自己的BFD控制报文,那么就认为对端失效了