BGP Error Notification Code 5: Finite State Machine Error — Анализ FSM сбоев
- В логах фиксируется ошибка:
BGP-3-NOTIFICATION: sent/received 5/0 (Finite State Machine Error)или5/1, 5/2, 5/3. - BGP сессия неожиданно сбрасывается из состояния
OpenSentилиOpenConfirmвIdle. - Возникновение состояния гонки (Race Condition) при одновременной инициализации TCP соединения с обеих сторон (BGP Connection Collision).
- Получение пакета KEEPALIVE или UPDATE до успешного завершения фазы OPEN.
1. Разбор логики работы BGP Finite State Machine (FSM)
BGP FSM проходит 6 строгих состояний: Idle -> Connect -> Active -> OpenSent -> OpenConfirm -> Established. Ошибка Code 5 генерируется, если в текущем состоянии получен пакет или событие, не предусмотренное спецификацией RFC 4271.
2. Разрешение коллизий соединений (Connection Collision Resolution)
Если оба пира одновременно открывают TCP соединение на порт 179, BGP сравнивает BGP Router ID. Соединение, инициированное маршрутизатором с меньшим Router ID, должно быть закрыто:
# Настройка пассивного режима на одном из маршрутизаторов (предотвращает гонку):
# Cisco / FRR:
router bgp 65001
neighbor 192.0.2.2 transport connection-mode passive3. Проверка фаерволов и Stateful NAT на стыке
Промежуточные межсетевые экраны (Cisco ASA, FortiGate, iptables) со строгой проверкой TCP sequence numbers могут сбрасывать второе параллельное соединение BGP, вызывая сбой FSM:
# Отключение перехвата BGP инспекции в Cisco ASA:
no fixup protocol bgp4. Сброс зависших сокетов TCP через команду Clear
# Мягкий перезапуск BGP соседа
clear ip bgp <PEER_IP> soft
# Жесткий сброс TCP стека принудительно
clear ip bgp <PEER_IP> Частые вопросы (FAQ)
Что такое BGP Connection Collision?
Это ситуация, когда оба соседа одновременно пытаются установить TCP-сессию друг с другом. В результате создаются два параллельных сокета, один из которых должен быть корректно разорван согласно алгоритму разрешения коллизий RFC 4271.
Почему отправка пакета UPDATE в состоянии OpenSent вызывает FSM Error?
В состоянии OpenSent маршрутизатор ожидает только пакет OPEN от соседа. Любой другой пакет (UPDATE, KEEPALIVE) нарушает последовательность протокола и ведет к немедленному сбросу с кодом 5.
Что означает состояние BGP Active?
Состояние Active означает, что маршрутизатор не смог установить TCP соединение (Connect) и сейчас активно слушает входящие попытки подключения от удаленного пира.
Помогает ли режим transport connection-mode passive стабилизировать пиринг?
Да, если один маршрутизатор настроен как active (инициатор), а второй как passive (слушатель), вероятность возникновения коллизий и FSM ошибок снижается до нуля.