Jump to content

Нетлинк

Нетлинк
Стабильная версия
6.10.2 [1]  Отредактируйте это в Викиданных / 27 июля 2024 г .; 6 дней назад ( 27 июля 2024 г. )
Операционная система Линукс
Платформа Ядро Linux
Тип Интерфейс прикладного программирования
Лицензия Стандартная общественная лицензия GNU
Веб-сайт неделя .linuxfoundation .org /сеть /общий _netlink _howto

Netlink — это семейство сокетов, используемое для межпроцессного взаимодействия (IPC) между процессами ядра и пользовательского пространства , а также между различными процессами пользовательского пространства, аналогично сокетам домена Unix , доступным в некоторых Unix-подобных операционных системах , включая его исходное воплощение. как интерфейс ядра Linux , а также в виде более поздней реализации во FreeBSD . [2] Подобно сокетам домена Unix и в отличие от сокетов INET , связь Netlink не может пересекать границы хоста. Однако, хотя сокеты домена Unix используют пространство имен файловой системы , сокеты Netlink обычно обращаются с помощью идентификаторов процессов (PID). [3]

Netlink разработан и используется для передачи различной сетевой информации между пространством ядра и процессами пользовательского пространства. Сетевые утилиты, такие как семейство iproute2 и утилиты, используемые для настройки драйверов беспроводной сети на базе mac80211 , используют Netlink для связи с ядром Linux из пользовательского пространства. Netlink предоставляет стандартный интерфейс на основе сокетов для процессов пользовательского пространства и API на стороне ядра для внутреннего использования модулями ядра . Первоначально Netlink использовал AF_NETLINKсемейство розеток.

Netlink разработан как более гибкий преемник ioctl ; RFC 3549 подробно описывает протокол.

Netlink создал Алексей Кузнецов. [4] как более гибкая альтернатива сложным, но неуклюжим ioctl метод связи, используемый для настройки и получения параметров внешнего сокета. Ядро Linux продолжает поддерживать ioctl для обратной совместимости.

Netlink впервые был представлен в ядре Linux серии 2.0, реализованном как символьное устройство . К 2013 году этот интерфейс устарел, но все еще представляет собой ioctl метод связи ; сравнить использование rtnetlink. [5] Интерфейс сокета Netlink появился в версии ядра Linux 2.2.

В 2022 году во FreeBSD была добавлена ​​экспериментальная поддержка протокола Netlink. Первоначально поддерживается только подмножество семейства NETLINK_ROUTE и NETLINK_GENERIC. [2]

Структура пакета

[ редактировать ]
Битовое смещение 0–15 16–31
0 Длина сообщения
32 Тип Флаги
64 Порядковый номер
96 ПИД
128+  
Данные
 

В отличие от сокетов BSD, использующих Интернет-протоколы, такие как TCP , где заголовки сообщений генерируются автоматически, заголовок сообщения Netlink (доступный как struct nlmsghdr) должен быть подготовлен вызывающим абонентом. Сокет Netlink обычно работает в SOCK_RAW-подобный режим, даже если SOCK_DGRAM был использован для его создания.

Часть данных затем содержит сообщение, специфичное для подсистемы, которое может быть дополнительно вложено.

[ редактировать ]

The AF_NETLINK семейство предлагает несколько подмножеств протоколов. Каждый из них взаимодействует с разными компонентами ядра и имеет разное подмножество обмена сообщениями. На подмножество ссылается поле протокола в вызове сокета:

int socket(AF_NETLINK, SOCK_DGRAM or SOCK_RAW, protocol)

Не имея стандарта, SOCK_DGRAM и SOCK_RAW не гарантированно будут реализованы в данной версии Linux (или другой ОС). Некоторые источники утверждают, что оба варианта являются законными, а в приведенной ниже ссылке от Red Hat говорится, что SOCK_RAW всегда является параметром. Однако iproute2 использует оба варианта взаимозаменяемо.

[ редактировать ]

Ниже приводится неисчерпывающий список поддерживаемых записей протокола :

NETLINK_ROUTE

NETLINK_ROUTE предоставляет информацию о маршрутизации и канале. Эта информация используется главным образом для демонов маршрутизации в пользовательском пространстве. Linux реализует большое подмножество сообщений:

  • Канальный уровень: RTM_NEWLINK , RTM_DELLINK , RTM_GETLINK , RTM_SETLINK.
  • Настройки адреса: RTM_NEWADDR , RTM_DELADDR , RTM_GETADDR.
  • Таблицы маршрутизации: RTM_NEWROUTE , RTM_DELROUTE , RTM_GETROUTE.
  • Соседний кеш: RTM_NEWNEIGH , RTM_DELNEIGH , RTM_GETNEIGH.
  • Правила маршрутизации: RTM_NEWRULE , RTM_DELRULE , RTM_GETRULE.
  • Настройки дисциплины очередей: RTM_NEWQDISC , RTM_DELQDISC , RTM_GETQDISC.
  • Классы трафика, используемые с очередями: RTM_NEWTCLASS , RTM_DELTCLASS , RTM_GETTCLASS.
  • Фильтры трафика: RTM_NEWTFILTER , RTM_DELTFILTER , RTM_GETTFILTER.
  • Другие: RTM_NEWACTION , RTM_DELACTION , RTM_GETACTION , RTM_NEWPREFIX , RTM_GETPREFIX , RTM_GETMULTICAST , RTM_GETANYCAST , RTM_NEWNEIGHTBL , RTM_GETNEIGHTBL , RTM_SETNEIGHTBL
NETLINK_FIREWALL

NETLINK_FIREWALL предоставляет интерфейс пользовательскому приложению для получения пакетов от брандмауэра .

NETLINK_NFLOG

NETLINK_NFLOG предоставляет интерфейс, используемый для связи между Netfilter и iptables .

NETLINK_ARPD

NETLINK_ARPD предоставляет интерфейс для управления таблицей ARP из пользовательского пространства.

NETLINK_AUDIT

NETLINK_AUDIT предоставляет интерфейс к подсистеме аудита, присутствующей в ядре Linux версии 2.6.6 и более поздних версий.

NETLINK_IP6_FW

NETLINK_IP6_FW предоставляет интерфейс для транспортировки пакетов из сетевого фильтра в пользовательское пространство.

NETLINK_ROUTE6
NETLINK_TAPBASE
NETLINK_NETFILTER
NETLINK_TCPDIAG
NETLINK_XFRM

NETLINK_XFRM предоставляет интерфейс для управления IPsec ассоциациями безопасности и базами данных политик безопасности - в основном используется демонами диспетчера ключей с использованием протокола обмена ключами через Интернет .

NETLINK_KOBJECT_UEVENT

NETLINK_KOBJECT_UEVENT предоставляет интерфейс, в котором ядро ​​транслирует события, обычно используемые udev .

NETLINK_GENERIC

Одним из недостатков протокола Netlink является то, что количество семейств протоколов ограничено 32 ( MAX_LINKS). Это одна из основных причин создания общего семейства Netlink — обеспечить поддержку добавления большего числа семейств. Он действует как мультиплексор Netlink и работает с одним семейством Netlink. NETLINK_GENERIC. Общий протокол Netlink основан на протоколе Netlink и использует его API.

[ редактировать ]

Пользователи могут добавить обработчик Netlink в свои собственные процедуры ядра. Это позволяет разрабатывать дополнительные протоколы Netlink для работы с новыми модулями ядра. [6]

См. также

[ редактировать ]
  1. ^ Грег Кроа-Хартман (27 июля 2024 г.). «Линукс 6.10.2» . Проверено 27 июля 2024 г.
  2. ^ Jump up to: а б «netlink: добавить поддержку сетевых ссылок» .
  3. ^ «netlink(7) — страница руководства Linux» . man7.org .
  4. ^ «kernel/git/torvalds/linux.git: root/net/core/rtnetlink.c» . Дерево исходного кода ядра Linux . ядро.орг . Проверено 27 мая 2014 г.
  5. ^ Кроукрофт, Джон ; Филлипс, Иэн, ред. (2002). Реализация протоколов TCP/IP и Linux: системный код для Интернета под Linux . Серия «Сетевой совет Wiley». Уайли . п. 624. ИСБН  9780471408826 . Проверено 21 мая 2013 г. Все сообщения rtnetlink состоят из заголовка сообщения netlink и добавленных атрибутов.
  6. ^ «Kernel Korner — зачем и как использовать сокет Netlink | Linux Journal» . www.linuxjournal.com .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 705775e53f9c02073d2c677304010da1__1682050320
URL1:https://arc.ask3.ru/arc/aa/70/a1/705775e53f9c02073d2c677304010da1.html
Заголовок, (Title) документа по адресу, URL1:
Netlink - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)