Почему BGP реализует свой собственный keepalive вместо использования tcp keepalive?

14

BGP не использует TCP keepalive, он использует собственный механизм keepalive. Мой вопрос: почему bgp не может включить SO_KEEPaLIVE TCP и жить счастливо? почему он не использует tcp keepalive и реализует свой собственный keepalive?

Hemanth
источник

Ответы:

19

TCP «keepalive» - это функция, которая присутствует не во всех операционных системах. Это не в самом стандарте TCP, и это не надежно. RC1122 определяет это, но явно заявляет:

Реализаторы МОГУТ включать «keep-alives» в свои реализации TCP, хотя эта практика не является общепринятой. Если keep-alives включены, приложение ДОЛЖНО иметь возможность включать или выключать их для каждого TCP-соединения, и они ДОЛЖНЫ по умолчанию отключаться.

Еще важнее:

Чрезвычайно важно помнить, что сегменты ACK, которые не содержат данных, не надежно передаются по TCP. Следовательно, если реализован механизм поддержания активности, он НЕ ДОЛЖЕН интерпретировать отказ отвечать на какой-либо конкретный зонд как обрыв соединения.

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

Для правильной работы BGP необходим способ реализации определенных таймеров для активности активности (как часто мы отправляем сообщение) и удержания (по истечении этого времени мы объявляем одноранговый узел неотвечающим), которые надежно отправляются. Таким образом, BGP использует свое собственное сообщение keepalive, которое не требует больших накладных расходов (19 байт) по сравнению с keepalive TCP.

Себастьян Визингер
источник