BFD
BFD (Bidirectional Forwarding Detection, RFC 5880) — лёгкий hello-протокол для sub-second детекции падения линка/соседа. Работает с любым L3-протоколом.
Зачем
Штатные hello таймеры протоколов — секунды или десятки. При падении линка (не физически, а логически — MPLS-tunnel, blackhole за parallel path) — конвергенция OSPF/BGP занимает 10+ сек.
BFD шлёт пакеты каждые 50-300ms → детекция за 150ms-1s.
Как работает
- Соседи договариваются о таймерах (Desired Min Tx, Required Min Rx).
- Шлют друг другу BFD Control пакеты (UDP 3784) в согласованном интервале.
- Если не получили N подряд —
Detect Time = N × interval, считается down. - Сообщают протоколу (OSPF/BGP/static route) → тот пересчитывает.
Режимы
- Async — периодический обмен (типовое)
- Demand — только по запросу (редко)
- Echo — сам себе шлёшь пакет, сосед просто разворачивает (UDP 3785). Не нагружает control-plane соседа.
Multi-hop BFD (RFC 5883)
BFD через несколько hops — для iBGP-сессий по маршрутизированной сети. Порт UDP 4784.
С чем работает
- OSPF, IS-IS — BFD-triggered SPF
- BGP — BFD-triggered session teardown
- Static routes — конкретный next-hop tracking
- MPLS LSP — RFC 5884 (BFD for MPLS)
- Аgregate links (LAG) — micro-BFD per member
Скорость
| Таймер | Detect time |
|---|---|
| 3× 50ms | 150ms |
| 3× 300ms | 900ms |
| 3× 1s (default) | 3s |
Проблема на софтовых platform
BFD на 50ms требует hardware offload (ASIC), иначе CPU задыхается. На Linux-роутерах — обычно 300ms+.