Кратко

  • Обычный HoldTimer измеряет время последнего принятого сообщения BGP; он может обновляться, пока локальные UPDATE, отзывы и KEEPALIVE заблокированы в обратном направлении.
  • RFC 9687 добавляет локально настроенный SendHoldTimer. Если за интервал не отправлено ни одного сообщения BGP, система фиксирует причину, освобождает ресурсы, закрывает TCP и переходит в Idle.
  • Безопасное внедрение разделяет создание сообщения, успешную передачу, обработку на удалённой стороне и пересылку пакетов, задаёт значение выше согласованного HoldTime и ограничивает циклы повторного соединения.

Пограничный маршрутизатор уже исключил отказавший путь и сформировал отзыв. Однако сосед продолжает присылать KEEPALIVE каждые тридцать секунд, поэтому HoldTimer не истекает. В обратную сторону удалённое приложение перестало читать TCP, локальная очередь растёт, а последняя доставленная — уже неверная — реклама продолжает управлять трафиком.

Верное решение принято, но сессия больше не способна сделать его общим фактом.

Два направления — два независимых свидетельства

TCP даёт поток в обе стороны, не гарантируя синхронный прогресс. Канонический пример RFC 9687 — нулевое окно приёма на удалённой стороне. Сосед ещё пишет локальной системе, одновременно отказываясь принимать её байты. Перегруженный процесс, зависший читатель или сбой очереди создают такую же асимметрию.

По RFC 4271 получение UPDATE или KEEPALIVE перезапускает HoldTimer. Это доказательство входящего трафика, но не обратной доставки. Созданный UPDATE ещё не передан; принятые ядром байты ещё не прочитаны удалённым приложением; TCP Established не означает работоспособность BGP.

Задержанный отзыв сохраняет полномочия у устаревшего маршрута. Поэтому время последней успешной отправки BGP — отдельный и критический показатель.

Локальные часы из RFC 9687

RFC 9687 вводит SendHoldTime, SendHoldTimer и событие 29 SendHoldTimer_Expires. Значение задаётся локально для соседа, а не согласуется как возможность. Удалённая реализация может не знать об этом механизме.

При входе в Established из OpenConfirm таймер запускается, если значение не нулевое. Каждое успешно отправленное сообщение BGP запускает его снова. Он останавливается при выходе из Established, а также если SendHoldTime или согласованный HoldTime равен нулю. Ненулевой SendHoldTime обязан быть больше HoldTime.

RFC рекомендует включение по умолчанию и большее из восьми минут и удвоенного HoldTime. Это исходная гипотеза, не единая настройка. Сервер маршрутов, рефлектор, транзит и ограниченное устройство имеют разную нагрузку и цену сброса.

При истечении система должна записать Send Hold Timer Expired, освободить ресурсы BGP, закрыть TCP, обновить состояние повтора и перейти в Idle. NOTIFICATION допустимо попытаться отправить лишь без задержки закрытия. IANA назначила код 8 и подкод 0. Сам дефект может помешать уведомлению, поэтому локальный журнал — главный источник.

Разные детекторы не заменяют друг друга

HoldTimer наблюдает приём BGP. SendHoldTimer — продвижение локальной отправки BGP. BFD проверяет непрерывность пути передачи. Повторы и keepalive TCP описывают транспорт. Их выводы могут различаться без противоречия.

BFD и TCP могут быть исправны, входящие KEEPALIVE — обновлять HoldTimer, а SendHoldTimer — истечь из-за полного отсутствия исходящего прогресса. Хронология должна отдельно хранить локальный приём, локальную передачу, удалённую обработку маршрута и пересылку пакетов.

SendHoldTimer не находит всех BGP-зомби и не доказывает сбой плоскости данных. Он ограничивает ожидание при устойчивой невозможности передачи.

Корректирующий сброс имеет цену

Закрытие сессии отменяет выученные маршруты, запускает выбор пути, изменение FIB и альтернативные рекламы. После соединения возможна полная таблица. Одновременные истечения на рефлекторе или сервере маршрутов образуют волну сходимости.

Слишком короткий интервал превращает временную задержку планировщика, обратное давление или краткое нулевое окно в лишний разрыв. Если читатель остаётся перегруженным, переподключение и полная таблица усиливают причину и создают колебание. Слишком длинный интервал продлевает власть старых маршрутов.

Выбор учитывает HoldTime, измеренные паузы, всплески UPDATE, CPU, объём маршрутов, очереди и цену повтора. Классам соседей нужны разные запасы. Подавление колебаний замедляет попытки, но не чинит недостаток ресурсов.

Правильная канарейка сохраняет нижний путь

Отключение интерфейса испытает BFD или HoldTimer раньше нужного механизма. Валидный тест сохраняет путь и входящий BGP, но контролируемо останавливает удалённое чтение.

BIRD 3.3.0 документирует disable rx только для теста и предупреждает против применения в production. В изолированной лаборатории заранее фиксируют сборку, HoldTime, SendHoldTime, состояние и нормальные очереди. Во время дефекта доказывают продолжающиеся KEEPALIVE, остановку последней отправки, очередь или нулевое окно и заблокированный контрольный отзыв.

При истечении фиксируют причину, время, попытку NOTIFICATION, закрытие TCP и Idle. После устранения проверяют соединение без цикла, исправленный маршрут, FIB и пакеты. Список FRRouting и команда BIRD — заявления реализации; развёрнутая сборка требует собственного испытания.

Право на разрыв требует владения доказательствами

Тот, кто может закрыть критичное соединение, должен хранить последнее созданное сообщение, последнюю успешную отправку, возраст и глубину очереди, окно TCP, повторы, входящие события, историю таймера и финальную причину. Нужны также задержанные отзывы, длительность старого вида и последующая сходимость.

Данные обычно разделены между демоном, ОС, коллектором, порталом соседа и NOC. Практический суверенитет означает способность соединить, сохранить и применить их. Полномочие без доказательств произвольно; доказательство без права действия не исправляет маршрут.