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()
Доступны, в большинстве случаев производительность, с которой вы можете достичь, более чем адекватна.
Какой конкретный вариант использования вы имели в виду?