Проблема заключается в обработке потока пакетов протокола маршрутизации на любом устройстве linux / unix, на котором работают несколько демонов протокола маршрутизации.
Как любой пакет протокола маршрутизации достигает (потоков операций) от сетевой карты (физический уровень) к любому демону маршрутизации (OSPF / RIP / BGP)?
Вы не указали, о каком ядре идет речь.
С точки зрения BSD все объясняется в TCP / IP Illustrated, Том 2: Реализация Гэри Р. Райта, У. Ричарда Стивенса
Краткая версия:
mbuf
/ mbuf_cluster
или sk_buff
). Также здесь пакет копируется в bpf устройство.ether_input
в зависимости от протокола и семейства адресов кадра он обрабатывается соответствующими protosw
(переключатель протокола) запись массива.ip_input
или tcp_input
/ udp_input
дейтаграмма поступает на уровень сокета соответствующему демону маршрутизации so_rcvbuf
(буфер приема сокета).(e)glibc
/ libc
/ libSystem
занимает свое место. Демоны и пакеты маршрутизации управляют таблицей маршрутизации в ядре. Таким образом, пакеты вниз не проходят через демон маршрутизации, а скорее пакеты маршрутизируются в соответствии с таблицей маршрутизации.
Когда дело доходит до того, какие маршруты получают приоритет, когда в таблице маршрутизации есть два варианта с равной специфичностью (наиболее конкретный маршрут всегда выигрывает), это тот, который имеет лучший (самый низкий) metric
(видеть route
). В Cisco земля называется 'Административное расстояние. ' Различные протоколы, такие как RIP и BGP, имеют метрики по умолчанию. Я не уверен, есть ли ссылка на Linux, но если вы посмотрите на административную дистанционную ссылку, я рискну предположить, что демоны маршрутизации используют тот же приоритет.
Что касается самих пакетов протокола маршрутизации, это зависит от протокола маршрутизации, но они обычно используют стандартные транспортные протоколы. Например, BGP использует сеанс TCP / IP на порту 179. Таким образом, демон просто привяжет сокет соответствующим образом.