Работа с Raw Sockets в ядре Linux - PullRequest
       82

Работа с Raw Sockets в ядре Linux

1 голос
/ 25 февраля 2020

Я работаю над интеграцией уровня управления traffi c ядра linux в пользовательский сетевой стек на уровне пользователя. Я использую сырые сокеты, чтобы сделать то же самое. Мой вопрос: если мы будем использовать необработанные сокеты с AF_PACKET, RAW_SOCK и IPPROTO_RAW, будет ли вызываться dev_queue_xmit (функция, которая является начальной точкой уровня Queuing, насколько я читал)? Или интерфейс сокетов напрямую вызывает драйвер сетевой карты?

1 Ответ

1 голос
/ 25 февраля 2020
  • SOCK_RAW указывает, что пользовательская программа должна получить заголовок L2 (канального уровня) в сообщении.
  • IPPROTO_RAW применяет то же самое к заголовку L3 (IP).

Программа пространства пользователя устанавливает SOCK_RAW, IPPROTO_RAW для ручного анализа или составления заголовков протокола пакета. Это гарантирует, что ядро ​​не изменяет соответствующий заголовок уровня на пути к / из пользовательского пространства. Необработанный сокет не меняет способ получения или передачи пакета - они ставятся в очередь как обычно. С точки зрения сетевого драйвера, не имеет значения, кто устанавливает заголовки - пользовательское пространство (необработанные сокеты) или ядро ​​(например, SOCK_DGRAM).

Имейте в виду, что получение необработанных пакетов требует возможности CAP_NET_RAW - обычно программа должна запускаться с привилегиями суперпользователя.

...