BFD - двусторонний протокол, оба маршрутизатора генерируют BFD пакеты, а также отвечают на BFD пакеты посланные соседом. Протокол BFD практически не влияет на производительность CPU, поэтому интервал между BFD пакетами может быть сокращен до 50 мс, что обеспечивает быструю сходимость.
BFD пакеты инкапсулируются в unicast UDP. BFD payload control пакеты используют в качестве destination port 3784 и в качестве source port 49152.
BFD Echo пакеты используют destination port 3785 и source port 3785.
BFD может работать в 2-х режимах:
1. BFD Async - в этом режиме маршрутизаторы обмениваются только control пакетами.
2. BFD Echo - в этом режиме маршрутизаторы обмениваются помимо control еще и echo пакетами. Echo пакеты отличаются от control тем, что имеют адрес назначения равный адресу источника. Попадая на соседнюю систему они проходят весь обычный forwarding path, таким образом обеспечивая более полное тестирование работоспособности системы. По умолчанию на Cisco маршрутизаторах BFD Echo mode включен (отключается командой no bfd echo на интерфейсе). При использовании echo mode необходимо указывать no ip redirects на интерфейсе во избежание перегрузки CPU. Частота control пакетов может быть в этом режиме снижена (команда bfd slow-timers в режиме глобальной конфигурации позволяет настраивать интервал генерации control пакетов).
Рассмотрим на примере:
Маршрутизаторы, соединенные непосредственно друг с другом, быстро обнаруживают проблему. Падение интерфейса на одном конце мгновенно будет обнаружено соседом на противоположном, что приведет к оперативному удалению недействительного маршрута из таблицы маршрутизации.
Однако, ситуация меняется, если между маршрутизаторами появляется коммутатор:
В этом случае падение интерфейса на маршрутизаторе ISP никак не будет обнаружено маршрутизатором CE1. Удаление недействительного маршрута полностью зависит от таймеров используемого протокола маршрутизации (до 3 минут у BGP).
В этой ситуации спасет использование BFD. Между маршрутизаторами устанавливаем двустороннюю BFD сессию:
Настраивается на интерфейсах обоих маршрутизаторов :
interface FastEthernet0/1
bfd interval N1 min_rx N2 multiplier interval-multiplier
bfd interval N1 min_rx N2 multiplier interval-multiplier
no ip redirects
N1 - интервал генерации control пакетов (в миллисекундах), от 50 до 999
N2 - минимальный интервал между входящими control пакетами, от 50 до 999
interval-multiplier - количество последовательно пакетов, которые BFD может пропустить прежде чем информировать Layer 3 о проблеме.
После чего привязываем используемый нами протокол маршрутизации (в данном случае BGP) к состоянию BFD сессии.
router bgp 200
neighbor 3.3.3.2 fall-over bfd
neighbor 3.3.3.2 fall-over bfd
Настройка должна быть выполнена на обоих маршрутизаторах, иначе эффективность предпринятых телодвижений стремится к нулю :)
Также возможна привязка статического маршрута к BFD сессии.
В результате при обнаружении падения BFD сессии (несколько сотен миллисекунд), маршрутизатор разрывает BGP сессию и оперативно удаляет недействительные маршруты из таблицы маршрутизации.
Пример 1. Работа без BFD
Роняем интерфейс F0/1 на ISP.
ISP1#sh logg
CE1#sh logg
*Dec 29 18:39:33.453 Moscow: %BGP-5-ADJCHANGE: neighbor 3.3.3.2 Down BGP Notification sent
*Dec 29 18:39:33.453 Moscow: %BGP-3-NOTIFICATION: sent to neighbor 3.3.3.2 4/0 (hold time expired) 0 bytes
*Dec 29 18:39:33.453 Moscow: %BGP_SESSION-5-ADJCHANGE: neighbor 3.3.3.2 IPv4 Unicast topology base removed from session BGP Notification sent
Разница между падением интерфейса на ISP и удалением недействительных маршрутов на CE1, 2 минуты 41 секунда.
Пример 2. Работа c BFD
На обоих маршрутизаторах выполнены команды
interface FastEthernet0/1
bfd interval 50 min_rx 50 multiplier 4
Роняем интерфейс F0/1 на ISP.
ISP1#sh logg
000064: Dec 29 18:25:45.295 Moscow: %BGP-5-ADJCHANGE: neighbor 3.3.3.1 Down BFD adjacency down
000065: Dec 29 18:25:52.123 Moscow: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down
000065: Dec 29 18:25:52.123 Moscow: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to down
CE1#sh logg
*Dec 29 18:25:45.497 Moscow: %BGP-5-ADJCHANGE: neighbor 3.3.3.2 Down BFD adjacency down
*Dec 29 18:25:45.497 Moscow: %BGP_SESSION-5-ADJCHANGE: neighbor 3.3.3.2 IPv4 Unicast topology base removed from session BFD adjacency down
*Dec 29 18:25:45.497 Moscow: %BGP_SESSION-5-ADJCHANGE: neighbor 3.3.3.2 IPv4 Unicast topology base removed from session BFD adjacency down
Разница между падением интерфейса на ISP и удалением недействительных маршрутов на CE1, как и должно быть согласно заданным параметрам, порядка 200 миллисекунд.
Стандартная реализация ВFD в Cisco не позволяет поддерживать сессии с промежуточными IP узлами между соседями:
Соответственно, не получится поднять BFD сессию для multihop eBGD или iBGP с использованием Loopback'ов.
Однако с версии 15.1(3)S появилась фича multihop BFD, позволяющая обойти это ограничение:
Troubleshooting:
show bfd neighbors
show bfd neighbors details
Спасибо! Коротко и внятно.
ОтветитьУдалитьНа последних двух рисунках на Router A на Fa0/0 ip addr 4.4.4.1/30 всё же? :)
ОтветитьУдалитьДа, конечно. Спасибо, что заметили.
УдалитьСпасибо большое. Все доходчиво и понятно описано.
ОтветитьУдалитьПодскажите, а если между роутерами нет активного оборудование (коммутатора). При падении линка, маршруты из таблицы маршрутизации (предоставленные БГП) должны будут сразу же удалиться?
ОтветитьУдалитьДа, если канал оптический, а не аренда или РРЛ например.
Удалить