TCP и PF_RING

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

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

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

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

1 ответ

Решение

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

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

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


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

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

Другие вопросы по тегам