Question TCP et PF_RING


Je regardais utiliser PF_RING pour l'envoi et la réception dans ma candidature.

Si j'ai l'intention d'utiliser PF_RING pour maintenir une connexion TCP, il semble que je devrai "forger" manuellement les messages IP et TCP, pfring_send envoie des paquets bruts. Cela signifie-t-il que je devrais réimplémenter manuellement TCP par-dessus PF_RING?

Je comprends qu'il y a un net avantage à recevoir en utilisant PF_RING, quelqu'un a-t-il essayé d'envoyer des données avec PF_RING? Y a-t-il un avantage évident par rapport aux appels d'envoi normaux?

note: je n'utilise pas DNA (Direct NIC Access), j'utilise uniquement le bypass partiel du noyau avec les pilotes compatibles NIC.


12
2017-10-24 22:53


origine


Réponses:


Pour répondre à votre première question, oui, vous devrez créer manuellement les messages TCP / IP à partir de zéro, l'adresse MAC et tout. Pour un exemple, jetez un oeil à pfsend.c de ntop.org.

ntop.org a également fait un PF_RING mode d'emploi disponible qui contient des explications.

Comme pour l'envoi de données en utilisant PF_RING, il est absolument possible, l'idée est de contourner toute notion de ce qui est réellement des données sur le fil et d'envoyer le plus rapidement possible, voir génération de trafic à vitesse filaire de ntop.org. Le seul avantage qu'il a sur l'envoi d'appels normaux en utilisant le noyau pour TCP / IP est que vous pouvez envoyer des données 1. plus rapidement et 2. complètement non formatées sur le fil. 2 peut être utile par exemple lorsque vous souhaitez lire un paquet / plusieurs paquets précédemment capturés sur le réseau.


À moins d’avoir un cas d’utilisation spécifique qui vous oblige à accéder aux données sous-jacentes brutes sans intervention du noyau, il n’ya aucune raison valable PF_RING de quelque manière que. Votre meilleur pari serait d'utiliser la norme socket()qui sont disponibles, dans la plupart des cas, les performances que vous pouvez obtenir avec cela sont plus que suffisantes.

Quel est votre cas d'utilisation spécifique?


12
2017-10-31 06:11