Подтвердить что ты не робот

TCP и PF_RING

Я рассматривал использование PF_RING для отправки и получения в моем приложении.

Если я планирую использовать PF_RING для поддержки TCP-соединения, похоже, мне придется вручную "подделывать" IP и TCP-сообщения, поскольку pfring_send отправляет необработанные пакеты. Означает ли это, что мне придется вручную переопределить TCP поверх PF_RING?

Я понимаю, что есть четкое преимущество для приема с использованием PF_RING, кто-нибудь пытался отправить данные с помощью PF_RING? Есть ли явное преимущество перед обычными вызовами отправки?

Примечание: я не использую DNA (Direct NIC Access), я просто использую частичный обход ядра с драйверами, поддерживающими NIC.

4b9b3361

Ответ 1

Чтобы ответить на ваш первый вопрос, да, вам придется вручную создавать сообщения TCP/IP с нуля, MAC-адрес и все. В качестве примера рассмотрим pfsend.c из ntop.org.

ntop.org также внедрил PF_RING руководство пользователя, в котором содержатся объяснения.

Что касается отправки данных с использованием PF_RING, это абсолютно возможно, идея состоит в том, чтобы обойти любое представление о том, что на самом деле является данными на проводе и отправлять как можно быстрее, см. генерация трафика с использованием скорости передачи с сайта ntop.org. Единственное преимущество, которое он имеет при обычных отправных вызовах с использованием ядра для TCP/IP, заключается в том, что вы можете отправлять данные 1. быстрее и 2. полностью неформатировать на провод. 2, может быть удобно, например, когда вы хотите воспроизвести ранее захваченный пакет/несколько пакетов в сети.


Если у вас нет конкретного варианта использования, который требует, чтобы вы получили доступ к необработанным базовым данным без вмешательства ядра, нет абсолютно никакой причины использовать PF_RING каким-либо образом. Лучше всего использовать стандартный socket(), который доступен, в большинстве случаев производительность, которую вы можете достичь, более чем достаточна.

Какой конкретный вариант использования вы имели в виду?