Назад | Перейти на главную страницу

Как любой пакет протокола маршрутизации достигает (потоков операций) от сетевой карты (физический уровень) к любому демону маршрутизации (OSPF / RIP / BGP)?

Проблема заключается в обработке потока пакетов протокола маршрутизации на любом устройстве linux / unix, на котором работают несколько демонов протокола маршрутизации.

Как любой пакет протокола маршрутизации достигает (потоков операций) от сетевой карты (физический уровень) к любому демону маршрутизации (OSPF / RIP / BGP)?

Вы не указали, о каком ядре идет речь.
С точки зрения BSD все объясняется в TCP / IP Illustrated, Том 2: Реализация Гэри Р. Райта, У. Ричарда Стивенса

Краткая версия:

  1. Кадр поступает в кольцо дескриптора rx сетевого адаптера. Через DMA он передается в кольцо RX в RAM.
  2. Драйвер преобразует специфические дескрипторы устройства в кольце RX в некую общую структуру сетевого ядра (например, mbuf / mbuf_cluster или sk_buff). Также здесь пакет копируется в bpf устройство.
  3. В ether_input в зависимости от протокола и семейства адресов кадра он обрабатывается соответствующими protosw (переключатель протокола) запись массива.
  4. Затем после ip_input или tcp_input / udp_input дейтаграмма поступает на уровень сокета соответствующему демону маршрутизации so_rcvbuf (буфер приема сокета).
  5. С этого момента демон маршрутизации обычно получает уведомление об ожидающих данных в сокете через какое-то средство уведомления ввода-вывода (выберите (2) / опрос (2) / эполл (7) / kqueue (2)) и использует recv (3) на этом сокете для извлечения полезной нагрузки пакетов. Вот (e)glibc / libc / libSystem занимает свое место.
  6. Демон маршрутизации творит чудеса и изменяет таблицы маршрутизации ядер через сокеты маршрутизации (PF_ROUTE в производных BSD или PF_NETLINKс NETLINK_ROUTE в Linux)

Демоны и пакеты маршрутизации управляют таблицей маршрутизации в ядре. Таким образом, пакеты вниз не проходят через демон маршрутизации, а скорее пакеты маршрутизируются в соответствии с таблицей маршрутизации.

Когда дело доходит до того, какие маршруты получают приоритет, когда в таблице маршрутизации есть два варианта с равной специфичностью (наиболее конкретный маршрут всегда выигрывает), это тот, который имеет лучший (самый низкий) metric (видеть route). В Cisco земля называется 'Административное расстояние. ' Различные протоколы, такие как RIP и BGP, имеют метрики по умолчанию. Я не уверен, есть ли ссылка на Linux, но если вы посмотрите на административную дистанционную ссылку, я рискну предположить, что демоны маршрутизации используют тот же приоритет.

Что касается самих пакетов протокола маршрутизации, это зависит от протокола маршрутизации, но они обычно используют стандартные транспортные протоколы. Например, BGP использует сеанс TCP / IP на порту 179. Таким образом, демон просто привяжет сокет соответствующим образом.