Отбрасывание пакетов при отключении BGP
Мы объявляем наш префикс интернет-провайдерам A и ISP B через BGP,1.0.0.0/23 — интернет-провайдеру A, а 1.0.0.0/24 и 10.0.1.0/24 — интернет-провайдеру B.
Мы хотим, чтобы при отзыве версии 1.0.0.0/24 у интернет-провайдера B связь для версии 1.0.0.0/24 беспрепятственно переключалась на интернет-провайдера A. (Потому что 1.0.0.0/23 включает в себя 1.0.0.0/24). Однако, когда мы это делаем, мы получаем потерю пакетов примерно на 2-3 секунды (я попробовал выполнить пинг, и он показывает срок действия TTL Expire).
Конечно, я предполагаю, что если я объявлю 1.0.0.0/23 и провайдеру B, проблема будет решена. Но почему мы получаем эти потери пакетов?
3 ответа
Удаление маршрута с вашего маршрутизатора — это только начало процесса обновления таблиц маршрутизации во всем Интернете, а не его конец. Почему вы думаете, что это произойдет мгновенно?
Прежде всего, вы с высокой вероятностью потеряете пакеты, которые направлялись к сети ISP B или через нее, когда произойдет вывод средств.
Во-вторых, хотя для удаленных сайтов это, вероятно, не имеет большого значения, соседям ОБА ваших интернет-провайдеров потребуется пересчитать маршруты и обновить свои FIB. И опять же, это может привести к потере пакетов в определенные моменты времени. Представьте себе сайт X, все маршруты которого ведут к вам. Он отправляет пакет следующему маршрутизатору (Y), используя более конкретный маршрут (тот, который отозван). Следующий маршрутизатор (Y) уже удалил более конкретный маршрут к вам, но видит менее конкретный маршрут к сайту X. Видите проблему?
когда мы это делаем, мы получаем потерю пакетов примерно на 2-3 секунды (я попробовал выполнить пинг, и он показывает срок действия TTL Expire).
Обычно это означает, что один из задействованных маршрутизаторов уже обработал обновление, а другой еще не сделал этого (либо потому, что обновление физически еще не дошло до него, либо потому, что его плоскость управления не имеет такой большой вычислительной мощности, как первый). один).
В течение этого времени шлюз B знает новый маршрут через A, но у A все еще есть старый маршрут через B, что приводит к «пинг-понгу» между ними. (Если вы посмотритеmtr
в ходе процесса вы можете увидеть, как это происходит более чем в одном месте.)
Просто объявить тот же префикс для нового маршрута недостаточно, поскольку новый не лучше подходит для большинства маршрутизаторов.
Тем не менее, есть способ избежать этой проблемы, предполагая, что вы можете оставить оба соединения открытыми, пока не закончите:
Объявите минимальное количество более конкретных маршрутов, чтобы перенаправить весь трафик с маршрута, который вы хотите закрыть.
Отмените замененный маршрут и объявите новый маршрут (или убедитесь, что существует подходящий маршрут, как в вашем случае).
Удалите теперь ненужные более конкретные маршруты, чтобы убрать за собой.
Не забудьте дождаться тщательного распространения между шагами.