Я смотрел на использование PF_RING
для отправки и получения в моем заявлении.
Если я планирую использовать PF_RING
для поддержания TCP-соединения, похоже, мне нужно вручную «подделать» IP и TCP-сообщения самостоятельно, так как pfring_send
отправляет необработанные пакеты. Означает ли это, что мне придется вручную переопределить TCP поверх PF_RING
?
Я понимаю, что есть явное преимущество для получения с помощью PF_RING
Кто-нибудь пытался отправить данные с PF_RING
? Есть ли явное преимущество перед обычными звонками?
примечание: я не использую DNA (Direct NIC Access), я просто использую частичный обход ядра с драйверами, поддерживающими NIC.
Чтобы ответить на ваш первый вопрос, да, вам придется вручную создавать сообщения TCP / IP с нуля, MAC-адрес и все. Для примера взгляните на pfsend.c от ntop.org.
ntop.org также сделал PF_RING
гид пользователя доступно, что содержит объяснения.
Что касается отправки данных с использованием PF_RING
Абсолютно возможно, идея состоит в том, чтобы обойти любое и все понятие о том, что на самом деле является данными по проводам, и отправить как можно быстрее, см. скорость передачи трафика с ntop.org. Единственное преимущество, которое он имеет по сравнению с обычной отправкой вызовов с использованием ядра для TCP / IP, состоит в том, что вы можете отправлять данные 1. быстрее и 2. полностью не отформатированными по проводам. 2 может быть полезен, например, когда вы хотите воспроизвести ранее захваченный пакет / несколько пакетов в сети.
Если у вас нет конкретного варианта использования, который требует от вас доступа к необработанным базовым данным без вмешательства ядра, то нет абсолютно никаких веских причин для использования PF_RING
в любом случае. Лучше всего будет использовать стандарт socket()
Доступны, в большинстве случаев производительность, с которой вы можете достичь, более чем адекватна.
Какой конкретный вариант использования вы имели в виду?
Других решений пока нет …