Logo
  • ГЛАВНАЯ
  • ОБО МНЕ
  • СЕРТИФИКАТЫ
nocip.ssh@mail.ru
Главная  >  Cisco Routing

Зачем нужны Hold Time и KEEPALIVE в BGP


Создана 01.10.2026
Отредактирована 01.10.2026
BGP работает поверх TCP (порт 179). TCP надёжен, но не сообщает приложению, что удалённая сторона умерла. Если маршрутизатор-сосед выключится, TCP-соединение может оставаться полуоткрытым ещё долго — до истечения TCP-таймаутов (минуты, а иногда часы).
Проблема: BGP не может ждать так долго. Если сосед пропал, нужно быстро разорвать сессию и переключиться на резервный путь.
Решение: собственный механизм контроля — KEEPALIVE и Hold Time.

BGP работает поверх TCP (порт 179).
BGP — это протокол прикладного уровня (L7), который использует TCP (L4) на порту 179 для доставки своих сообщений.

Что такое KEEPALIVE и Hold Time

KEEPALIVE (Сообщение в BGP - тип 4)
Параметр
Значение
Что это
Периодическое сообщение «я жив»
Когда
Каждые Keepalive Interval секунд (по умолчанию 60)
Размер
19 октет (только заголовок, без данных)
Зачем
Подтвердить соседу, что сессия активна
Hold Time
Параметр
Значение
Что это
Таймер, в течение которого маршрутизатор ждёт KEEPALIVE (или любое другое сообщение) от соседа
По умолчанию
180 секунд (3 × Keepalive)
Когда срабатывает
Если за Hold Time не пришло ни одного сообщения от соседа
Что происходит
Сессия разрывается, маршруты удаляются
Схема работы

R1 R2 │──── KEEPALIVE (каждые 60 сек) ────►│ │◄─── KEEPALIVE (каждые 60 сек) ─────│ │ │ │ (если R2 молчит 180 сек) │ │ │ │ ✗ Hold Timer Expired │ │ ✗ Сессия разорвана │ │ ✗ Маршруты удалены │

Логика:
1. R1 и R2 обмениваются KEEPALIVE каждые 60 секунд.
2. Если R2 не отправляет ничего 180 секунд — R1 считает, что R2 мёртв.
3. R1 разрывает сессию, удаляет маршруты от R2, переключается на резервный путь.
Схема работы детальная  (с состояниями и таймлайном)

Время (сек) R1 (Hold Timer) R2 Событие ───────────────────────────────────────────────────────────────────────────── t=0 Hold Timer: 180 Hold Timer: 180 KEEPALIVE обмен ↓ (сброс) ↓ (сброс) Сессия Established ───────────────────────────────────────────────────────────────────────────── t=60 Hold Timer: 180 Hold Timer: 180 KEEPALIVE обмен ↓ (сброс) ↓ (сброс) Сессия Established ───────────────────────────────────────────────────────────────────────────── t=120 Hold Timer: 180 Hold Timer: 180 KEEPALIVE обмен ↓ (сброс) ↓ (сброс) Сессия Established ───────────────────────────────────────────────────────────────────────────── t=180 Hold Timer: 180 ✗ R2 молчит R2 выключился (начинает отсчёт) R1 ждёт ───────────────────────────────────────────────────────────────────────────── t=240 Hold Timer: 120 ✗ R2 молчит R1 ждёт ───────────────────────────────────────────────────────────────────────────── t=300 Hold Timer: 60 ✗ R2 молчит R1 ждёт ───────────────────────────────────────────────────────────────────────────── t=360 Hold Timer: 0 ✗ R2 молчит ⏰ Hold Timer Expired ✗ Сессия разорвана R1 разрывает сессию ✗ Маршруты удалены Маршруты удалены ✗ Переключение на резерв Трафик идёт в обход ─────────────────────────────────────────────────────────────────────────────

Почему Hold Time = 3 × Keepalive
Причина
Пояснение
Запас на потерю пакетов
Если 1 KEEPALIVE потеряется — сессия не разорвётся
Запас на задержку
Если сеть загружена — KEEPALIVE может прийти с опозданием
Баланс
Слишком маленький Hold Time → «мигание» сессии
Баланс
Слишком большой Hold Time → долгое переключение на резерв
Если бы Hold Time = Keepalive:
  • Один потерянный пакет → сессия разорвана.
  • Это нестабильно — сеть бы «мигала».
Как таймеры согласуются
При установке сессии BGP-маршрутизаторы обмениваются значениями Hold Time в OPEN-сообщении:
1. R1 предлагает Hold Time = 180.
2. R2 предлагает Hold Time = 90.
3. BGP выбирает наименьшее — 90.
4. Keepalive = 90 / 3 = 30.
Результат: оба используют 30/90.
📌 Важно: таймеры не обязаны совпадать — BGP выберет наименьшие.
Где это видно в командах

R1#show bgp ipv4 unicast neighbors 10.1.12.2 | include hold time Last read 00:00:02, last write 00:00:29, hold time is 90, keepalive interval is 30 seconds Configured hold time is 180, keepalive interval is 60 seconds Minimum holdtime from neighbor is 90 second

💡 Примечание: Используйте аналог:  show ip bgp vpnv4 vrf <имя_VRF> neighbors <ip-адрес> | include hold time . Она предназначена для отображения маршрутов, анонсированных конкретному соседу внутри VRF — обычно связанных с MPLS L3VPN.
Строка
Что означает
hold time is 90 
Текущее (используемое) значение
keepalive interval is 30 
Текущий интервал
Configured hold time is 180 
Слишком маленький Hold Time → «мигание» сессии
Minimum holdtime from neighbor is 90 
Минимум, который принимает R1 от соседа
Что видно в syslog и командах
До потери KEEPALIVE

R1#show bgp ipv4 unicast summary Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 10.1.12.2 4 65502 45 46 5 0 0 00:05:23 0 ↑ Up/Down = 5 минут 23 секунды (сессия установлена)

После потери KEEPALIVE

R1#show bgp ipv4 unicast summary Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 10.1.12.2 4 65502 45 46 5 0 0 00:05:23 Idle ↑ Состояние Idle (сессия разорвана)

💡 Примечание: Используйте аналог:   show ip bgp vpnv4 vrf <имя_VRF> summary . Она предназначена для отображения маршрутов, анонсированных конкретному соседу внутри VRF — обычно связанных с MPLS L3VPN.
Syslog-сообщения

%BGP-5-ADJCHANGE: neighbor 10.1.12.2 Down Hold Timer Expired %BGP-5-NBR_RESET: Neighbor 10.1.12.2 reset due to Hold Timer Expired

⚠️ Важное предупреждение
Не устанавливайте слишком маленькие таймеры!
  • Keepalive = 1 сек → излишняя нагрузка на CPU и сеть.
  • Hold Time = 3 сек → сессия будет «мигать» при малейшей задержке.
  • Hold Time = 0 → сессия никогда не разорвётся (опасно).
  • Рекомендация: Keepalive ≥ 30 сек, Hold Time ≥ 90 сек.
Исключение: если сосед настроен на minimum hold time — ваши таймеры не должны быть меньше этого значения, иначе сессия не установится.
Как изменить таймеры на оборудовании Cisco

R1(config-router)# neighbor 10.1.12.2 timers 30 90

  • 30 — Keepalive (сек).
  • 90 — Hold Time (сек).
Как проверить

show bgp ipv4 unicast neighbors 10.1.12.2 | include hold time

💡 Примечание: Используйте аналог:  show ip bgp vpnv4 vrf <имя_VRF> neighbors <ip-адрес> | include hold time . Она предназначена для отображения маршрутов, анонсированных конкретному соседу внутри VRF — обычно связанных с MPLS L3VPN.
Итог
Вопрос
Ответ
Зачем KEEPALIVE?
Подтвердить, что сосед жив
Зачем Hold Time?
Разорвать сессию, если сосед молчит
Почему 3 × Keepalive?
Запас на потерю 1–2 пакетов
Что если сосед молчит?
Сессия разрывается, маршруты удаляются
Как согласуются?
BGP выбирает наименьшее значение
Где смотреть?
show bgp ... neighbors ... | include hold time
Что сбрасывает Hold Timer?
Каждый KEEPALIVE
Что видно в syslog?
Hold Timer Expired
Кратко: Hold Time и KEEPALIVE — это «пульс» BGP-сессии. Если пульс пропадает — сессия умирает, и трафик переключается на резервный путь.

Приветствуем всех любителей ретро-игровой индустрии на канале RetraR
Сувенирная и брендированная продукция с персонажами из любимых игр.
RetraR — Компьютерные игры для Nintendo Game Boy
RetraR - Computer games for Nintendo Game Boy 🌌🛸👽👾☄️🤖
RetraR - 任天堂ゲームボーイ用コンピュータゲーム 🎮🕹️👾

RetraR в VK
Канал - RetraR в Telegram
Канал - RetraR в Telegram

Оформить заказ

Нажимая на кнопку, вы даете согласие на обработку персональных данных

Спасибо за заказ

Ваш заказ принят в обработку. 

Мы свяжемся с вами в ближайшее время.