08-BFD配置
本章节下载: 08-BFD配置 (288.30 KB)
BFD(Bidirectional Forwarding Detection,双向转发检测)是一个通用的、标准化的、介质无关和协议无关的快速故障检测机制,用于检测转发路径的连通状况,保证设备之间能够快速检测到通信故障,以便能够及时采取措施,保证业务持续运行。BFD可以为各种上层协议(如路由协议)快速检测两台设备间双向转发路径的故障。上层协议通常采用Hello报文机制检测故障,所需时间为秒级,而BFD可以提供毫秒级检测。
BFD可以用来进行单跳和多跳检测:
· 单跳检测:是指对两个直连设备进行IP连通性检测,这里所说的“单跳”是IP的一跳。
· 多跳检测:BFD可以检测两个设备间任意路径的链路情况,这些路径可能跨越很多跳。
BFD会话通过echo报文和控制报文实现。
echo报文封装在UDP报文中传送,其UDP目的端口号为3785。
本端发送echo报文建立BFD会话,对链路进行检测。对端不建立BFD会话,只需把收到的echo报文转发回本端。如果在检测时间内没有收到对端转发回的echo报文,则认为会话down。
当BFD会话工作于echo报文方式时,仅支持单跳检测,且不受检测模式的控制。
控制报文封装在UDP报文中传送,对于单跳检测其UDP目的端口号为3784,对于多跳检测其UDP目的端口号为4784。链路两端的设备通过控制报文中携带的参数(会话标识符、期望的收发报文最小时间间隔、本端BFD会话状态等)协商建立BFD会话。
BFD会话建立前有两种模式:主动模式和被动模式。
· 主动模式:在建立会话前不管是否收到对端发来的BFD控制报文,都会主动发送BFD控制报文;
· 被动模式:在建立会话前不会主动发送BFD控制报文,直到收到对端发送来的控制报文。
通信双方至少要有一方运行在主动模式才能成功建立起BFD会话。
BFD会话建立后有两种模式:异步模式和查询模式。
· 异步模式:设备周期性发送BFD控制报文,如果在检测时间内没有收到对端发送的BFD控制报文,则认为会话down。
· 查询模式:本端的BFD会话工作在查询模式时,本端设备会向对端发送D比特位置1的BFD控制报文,对端(缺省为异步模式)收到该报文后将停止周期性发送BFD控制报文。这种情况下,仅对本端到对端的链路进行检测,即当对端设备在检测时间内未收到BFD控制报文时,则认为链路故障,将BFD会话状态置为down。如果通信双方的BFD会话均工作在查询模式,则双方都停止周期性发送BFD控制报文。这种情况下,系统将通过其他与BFD无关的机制对链路进行检测(比如Hello报文机制、硬件检测机制等)。当系统中的BFD会话数量较多时,采用查询模式可防止周期性发送BFD控制报文的开销对系统的正常运行造成影响。
表1-1 BFD支持的应用
应用 |
参见信息 |
静态路由 IS-IS OSPF RIP BGP IP快速重路由 |
“三层技术-IP路由配置指导” |
IPv6静态路由 OSPFv3 |
“三层技术-IP路由配置指导” |
PIM |
“IP组播配置指导” |
Track |
“可靠性配置指导” |
以太网链路聚合 |
“二层技术-以太网交换配置指导” |
与BFD相关的协议规范有:
· RFC 5880:Bidirectional Forwarding Detection (BFD)
· RFC 5881:Bidirectional Forwarding Detection (BFD) for IPv4 and IPv6 (Single Hop)
· RFC 5882:Generic Application of Bidirectional Forwarding Detection (BFD)
· RFC 5883:Bidirectional Forwarding Detection (BFD) for Multihop Paths
· RFC 7130:Bidirectional Forwarding Detection (BFD) on Link Aggregation Group (LAG) Interfaces
缺省BFD运行版本1,同时兼容版本0。不能通过命令行配置修改为版本0,当对端设备运行版本0会话时,本端自动会切换到版本0。
BFD会话建立后,可以动态协商BFD的相关参数(例如最小发送间隔、最小接收间隔、初始模式、报文认证等),两端协议通过发送相应的协商报文后采用新的参数,不影响会话的当前状态。
对于建立在跨成员设备的聚合接口上的BFD会话,当负责收发BFD报文的主设备异常重启时,从设备接替收发BFD报文的工作需要一定的时间,如果BFD会话检测时间较短或者会话数量较多,可能会出现BFD会话震荡的情况。
建立echo报文方式的BFD会话的方式有两种:
· 通过bfd static命令手工创建。
· 应用程序与BFD联动时动态创建。
创建的静态BFD会话可以用来进行echo报文方式的BFD单跳检测和多跳检测。
使用echo报文方式的静态BFD会话进行检测时,仅需在本端创建静态BFD会话。
首次创建静态BFD会话时,必须指定静态BFD会话的对端IPv4或IPv6地址。系统仅检查IP地址的形式,不检查其正确性。指定错误的对端IP地址或源IP地址均会导致静态BFD会话无法建立。
不同的静态BFD会话的本地标识符不能相同。
如果创建静态BFD会话时未指定source-ip/source-ipv6参数,将使用bfd echo-source-ip/bfd echo-source-ipv6命令指定的IPv4/IPv6地址作为echo报文的源IPv4/IPv6地址。如果创建静态BFD会话时指定了source-ip/source-ipv6参数,将使用该参数的地址作为echo报文的源IPv4/IPv6地址。建议用户创建echo报文方式的静态BFD会话时指定source-ip/source-ipv6参数。
(1) 进入系统视图。
system-view
(2) 配置echo报文源IP地址。
¡ 配置echo报文源IPv4地址。
bfd echo-source-ip ip-address
缺省情况下,未配置echo报文的源IPv4地址。
为了避免对端发送大量的ICMP重定向报文造成网络拥塞,建议不要将echo报文的源IPv4地址配置为属于该设备任何一个接口所在网段。
¡ 配置echo报文源IPv6地址。
bfd echo-source-ipv6 ipv6-address
缺省情况下,未配置echo报文的源IPv6地址。
echo报文源IPv6地址仅支持全球单播地址。
(3) 创建静态BFD会话,并进入静态BFD会话视图。
(IPv4网络)
bfd static session-name [ peer-ip ipv4-address interface interface-type interface-number destination-ip ipv4-address [ source-ip ipv4-address ] one-arm-echo [ discriminator { auto | local local-value } ] ]
(IPv6网络)
bfd static session-name [ peer-ipv6 ipv6-address interface interface-type interface-number destination-ipv6 ipv6-address [ source-ipv6 ipv6-address ] one-arm-echo [ discriminator { auto | local local-value } ] ]
(4) (可选)指定静态BFD会话的本地标识符。
discriminator local local-value
缺省情况下,未指定静态BFD会话的本地标识符。
本命令仅用于创建静态BFD会话时未指定静态BFD会话标识符的场景。
(1) 进入系统视图。
system-view
(2) 配置echo报文源IP地址。
¡ 配置echo报文源IPv4地址。
bfd echo-source-ip ip-address
缺省情况下,未配置echo报文的源IPv4地址。
为了避免对端发送大量的ICMP重定向报文造成网络拥塞,建议不要将echo报文的源IPv4地址配置为属于该设备任何一个接口所在网段。
¡ 配置echo报文源IPv6地址。
bfd echo-source-ipv6 ipv6-address
缺省情况下,未配置echo报文的源IPv6地址。
echo报文源IPv6地址仅支持全球单播地址。
(3) 创建静态BFD会话,并进入静态BFD会话视图。
(IPv4网络)
bfd static session-name [ peer-ip ipv4-address [ vpn-instance vpn-instance-name ] destination-ip ipv4-address [ source-ip ipv4-address ] one-arm-echo[ discriminator { auto | local local-value } ] ]
(IPv6网络)
bfd static session-name [ peer-ipv6 ipv6-address [ vpn-instance vpn-instance-name ] destination-ipv6 ipv6-address [ source-ipv6 ipv6-address ] one-arm-echo [ discriminator { auto | local local-value } ] ]
(4) (可选)指定静态BFD会话的本地标识符。
discriminator local local-value
缺省情况下,未指定静态BFD会话的本地标识符。
本命令仅用于创建静态BFD会话时未指定静态BFD会话标识符的场景。
(1) 进入系统视图。
system-view
(2) 进入接口视图或静态BFD会话视图。
¡ 进入接口视图。
interface interface-type interface-number
¡ 进入静态BFD会话视图。
bfd static session-name
静态BFD会话必须已经存在。
配置静态BFD会话的参数时,需要进入静态BFD会话视图。
(3) 配置接收echo报文的最小时间间隔。
bfd min-echo-receive-interval interval
缺省情况下,接收echo报文的最小时间间隔为400毫秒。
(4) 配置单跳检测的BFD检测时间倍数。
bfd detect-multiplier interval
缺省情况下,BFD检测时间倍数为5。
(1) 进入系统视图。
system-view
(2) (可选)进入静态BFD会话视图。
bfd static session-name
配置静态BFD会话的参数时,需要进入静态BFD会话视图。
(3) 配置接收多跳echo报文的最小时间间隔。
bfd multi-hop min-echo-receive-interval interval
缺省情况下,接收多跳echo报文的最小时间间隔为400毫秒。
(4) 配置多跳检测的BFD检测时间倍数。
bfd multi-hop detect-multiplier value
缺省情况下,多跳检测的BFD检测时间倍数为5。
建立控制报文方式的BFD会话有两种方式:静态创建BFD会话和动态建立BFD会话。
BFD通过控制报文中的本地标识符和远端标识符来区分不同的会话。静态创建BFD会话和动态建立BFD会话的主要区别在于本地标识符和远端标识符的获取方式不同:
· 静态BFD会话的本地标识符和远端标识符由用户手工配置。手工指定会话的本地标识符和远端标识符方法包括:
¡ 通过bfd static命令手工创建。
¡ 应用程序与BFD联动时,由用户手工指定会话的本地标识符和远端标识符。
· 动态BFD会话的本端标识符由本端设备自动分配,远端标识符在BFD会话协商建立过程中获取。本端设备自动分配本地标识符的方法包括:
¡ 通过bfd static命令的auto方式为本端自动分配会话的本地标识符。
¡ 应用程序与BFD联动时,如果用户未指定会话的本地标识符和远端标识符,则由本端设备自动分配会话的本地标识符。
配置被服务的上层协议支持BFD功能后,无需执行本配置,设备上会自动创建控制报文方式的BFD会话。
创建的静态BFD会话可以用来进行控制报文方式的BFD单跳检测和多跳检测,通过与Track配合可为对链路故障响应速度要求较高的业务提供故障检测服务。关于Track与BFD联动的详细介绍,请参见“可靠性配置指导”中的“Track”。
如果对端创建了静态BFD会话,那么本端必须创建静态BFD会话。
首次创建静态BFD会话时,必须指定静态BFD会话的对端IPv4或IPv6地址。系统仅检查IP地址的形式,不检查其正确性。指定错误的对端IP地址或源IP地址均会导致静态BFD会话无法建立。
不同的静态BFD会话的本地标识符不能相同。
(1) 进入系统视图。
system-view
(2) 创建静态BFD会话,并进入静态BFD会话视图。
(IPv4网络)
bfd static session-name peer-ip ipv4-address interface interface-type interface-number source-ip ipv4-address [ discriminator { auto | local local-value remote remote-value } ]
需要保证指定的peer-ip为对端静态BFD会话所在的接口的IP地址,source-ip为本端静态BFD会话所在的接口的IP地址,否则无法建立静态BFD会话。
(IPv6网络)
bfd static session-name peer-ipv6 ipv6-address interface interface-type interface-number source-ipv6 ipv6-address [ discriminator { auto | local local-value remote remote-value } ]
需要保证指定的peer-ipv6为对端静态BFD会话所在的接口的IPv6地址,source-ipv6为本端静态BFD会话所在的接口的IPv6地址,否则无法建立静态BFD会话。
(3) (可选)指定静态BFD会话的本地标识符和远端标识符。
discriminator { local local-value | remote remote-value }
缺省情况下,未指定静态BFD会话的本地标识符和远端标识符。
本命令仅用于创建静态BFD会话时未指定静态BFD会话标识符的场景。
(1) 进入系统视图。
system-view
(2) 创建静态BFD会话,并进入静态BFD会话视图。
(IPv4网络)
bfd static session-name peer-ip ipv4-address [ vpn-instance vpn-instance-name ] source-ip ipv4-address [ discriminator { auto | local local-value remote remote-value } ] [ track-interface interface-type interface-number ]
(IPv6网络)
bfd static session-name peer-ipv6 ipv6-address [ vpn-instance vpn-instance-name ] source-ipv6 ipv6-address [ discriminator { auto | local local-value remote remote-value } ] [ track-interface interface-type interface-number ]
(3) (可选)指定静态BFD会话的本地标识符和远端标识符。
discriminator { local local-value | remote remote-value }
缺省情况下,未指定静态BFD会话的本地标识符和远端标识符。
本命令仅用于创建静态BFD会话时未指定静态BFD会话标识符的场景。
(1) 进入系统视图。
system-view
(2) 进入接口视图或静态BFD会话视图。
¡ 进入接口视图。
interface interface-type interface-number
¡ 进入静态BFD会话视图。
bfd static session-name
配置静态BFD的单跳检测会话参数时,需要进入相应的BFD会话视图。
(3) 配置接收echo报文的最小时间间隔。
bfd min-echo-receive-interval interval
缺省情况下,接收echo报文的最小时间间隔为400毫秒。
(4) 配置发送和接收单跳BFD控制报文的最小时间间隔。
bfd min-control-interval interval
缺省情况下,发送和接收单跳BFD控制报文的最小时间间隔为400毫秒。
(5) 配置单跳检测的BFD检测时间倍数。
bfd detect-multiplier interval
缺省情况下,单跳检测的BFD检测时间倍数为5。
(6) (可选)配置BFD会话无法建立时,通知上层协议BFD会话down的超时时间。
a. 退回系统视图。
quit
b. 配置BFD会话无法建立时,通知上层协议BFD会话down的超时时间。
bfd init-fail-timer seconds
缺省情况下,BFD会话无法建立时,不会通知上层协议BFD会话down。
配置本命令后,对于由于配置原因(比如对端设备没有使能BFD,或者两端的BFD认证配置不一致等)造成BFD会话无法进入up状态的情况,如果配置了本定时器,会导致上层协议作出错误的处理,所以,请谨慎使用本命令。
(1) 进入系统视图。
system-view
(2) (可选)进入静态BFD会话视图。
bfd static session-name
配置静态BFD的多跳检测会话参数时,需要进入相应的BFD会话视图。
(3) 配置多跳检测的BFD检测时间倍数。
bfd multi-hop detect-multiplier value
缺省情况下,多跳检测的BFD检测时间倍数为5。
(4) 配置发送和接收多跳BFD控制报文的最小时间间隔。
bfd multi-hop min-control-interval interval
缺省情况下,发送和接收多跳BFD控制报文的最小时间间隔为400毫秒。
(5) (可选)配置BFD会话无法建立时,通知上层协议BFD会话down的超时时间
bfd init-fail-timer seconds
缺省情况下,BFD会话无法建立时,不会通知上层协议BFD会话down。
本命令仅支持在系统视图下配置。
配置本命令后,对于由于配置原因(比如对端设备没有使能BFD,或者两端的BFD认证配置不一致等)造成BFD会话无法进入up状态的情况,如果配置了本定时器,会导致上层协议作出错误的处理,所以,请谨慎使用本命令。
我司设备与其他厂商设备互通时,如果BFD会话两端设备上BFD报文的TTL值不同,则可能会导致BFD会话协商失败。使用本功能将本端发送BFD报文的TTL值调整为和对端一致,可以解决上述问题。
配置本功能后,当设备接收到对端发送的BFD报文时,如果BFD报文中携带的状态字段取值为DOWN或INIT,则本端会检查报文中的TTL值,具体机制如下:
· 对于单跳BFD会话,如果本端接收到的BFD报文的TTL值与通过bfd ttl命令设置的ttl-value不同,本端将丢弃该报文。
· 对于多跳BFD会话,如果本端接收到的BFD报文的TTL值大于通过bfd ttl命令设置的ttl-value,本端将丢弃该报文。
如果在配置本功能前BFD会话已经协商UP,配置本功能后,本端将BFD会话的状态置为AdminDown,触发BFD会话重新协商。
使用bfd ttl命令设置BFD报文的TTL值时,需要注意:
· bfd ttl命令对echo报文方式的BFD会话不生效,不会改变此类会话报文的TTL值。
· bfd ttl命令不会改变SBFD报文的TTL值。设备也不会检查SBFD会话报文中的TTL值。
· 如果bfd ttl命令指定的多个IPv4或IPv6地址范围中都包括某个IPv4地址或IPv6地址,则设备使用最长匹配方式为该IPv4或IPv6地址的BFD会话报文选择TTL值。
· 对于同一个IPv4网段或IPv6网段,配置的单跳BFD报文TTL值必须大于多跳BFD报文TTL值。
(1) 进入系统视图。
system-view
(2) 配置BFD报文的TTL值。
bfd { peer-ip ipv4-address mask-length | peer-ipv6 ipv6-address prefix-length } ttl { single-hop | multi-hop } ttl-value
缺省情况下,单跳BFD报文TTL值为255,多跳BFD报文TTL值为64。
对于未指定出接口的会话,无法通过会话出接口配置BFD会话参数。使用BFD全局多跳可以配置,但是缺乏灵活性。通过BFD模板可以对参数进行灵活配置,LSP以及PW的BFD检测关联到BFD模板即可指定会话参数。
对于检测接口状态的BFD会话,可以通过BFD模板灵活调整会话参数。
(1) 进入系统视图。
system-view
(2) 配置BFD检测时间倍数。
bfd detect-multiplier value
缺省情况下,BFD检测时间倍数为5。
(3) 配置发送和接收BFD控制报文的最小时间间隔。
bfd min-control-interval interval
缺省情况下,发送和接收BFD控制报文的最小时间间隔为400毫秒。
开启BFD模块的告警功能后,该模块会生成告警信息,用于报告该模块的重要事件。生成的告警信息将发送到设备的SNMP模块,通过设置SNMP中告警信息的发送参数,来决定告警信息输出的相关属性。(有关告警信息的详细介绍,请参见“网络管理和监控配置指导”中的“SNMP”。)
(1) 进入系统视图。
system-view
(2) 开启BFD的告警功能。
snmp-agent trap enable bfd
缺省情况下,BFD的告警功能处于开启状态。
在完成上述配置后,在任意视图下执行display命令可以显示配置后BFD的运行情况,通过查看显示信息验证配置的效果。
在用户视图下执行reset命令可以清除BFD会话的统计信息。
表1-2 BFD显示和维护
操作 |
命令 |
显示BFD会话信息 |
display bfd session [ discriminator local local-value | static session-name | verbose ] display bfd session [ [ dynamic ] [ control | echo ] [ ip ] [ state { down | admin-down | init | up } ] [ discriminator remote remote-value ] [ peer-ip ipv4-address [ vpn-instance vpn-instance-name ] ] [ verbose ] ] display bfd session [ [ dynamic ] [ control | echo ] [ ipv6 ] [ state { down | admin-down | init | up } ] [ discriminator remote remote-value ] [ peer-ipv6 ipv6-address [ vpn-instance vpn-instance-name ] ] [ verbose ] ] display bfd session [ [ static ] [ ip ] [ state { down | admin-down | init | up } ] [ discriminator remote remote-value ] [ peer-ip ipv4-address [ vpn-instance vpn-instance-name ] ] [ verbose ] display bfd session [ [ static ] [ ipv6 ] [ state { down | admin-down | init | up } ] [ discriminator remote remote-value ] [ peer-ipv6 ipv6-address [ vpn-instance vpn-instance-name ] ] [ verbose ] |
显示BFD报文TTL值的配置信息 |
display bfd ttl |
清除BFD会话统计信息 |
reset bfd session statistics |
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!