#1 Le 05/11/2019, à 19:09
- califerax
envoyer des données directement sur le port ethernet
Bonjour a tous,
Je cherche actuellement à envoyer des données de type RAW (de niveau 2 donc) sans aucun en-tête (ni protocole IP ni UDP, rien que des données) directement sur le port ethernet le tout sans aucune action de l'OS et sans passer par la carte réseau.
Autrement dit je cherche un moyen de me connecter en direct sur le port ethernet afin de pouvoir envoyer des données de manière très rapide.
Connaissez vous par hasard un moyen d'atteindre cet objectif ?
Hors ligne
#2 Le 05/11/2019, à 19:41
- Watael
Re : envoyer des données directement sur le port ethernet
salut,
déjà, sans protocole, ça va être un beau bordel.
mais alors, sans intervention de l'OS !
et sans passer par la carte ethernet, pour envoyer sur le port ethernet . . .
je donne ma langue au chat, et j'attends avec impatience celui qui saura nous expliquer comment tout cela est possible.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 05/11/2019, à 20:40
- Nuliel
Re : envoyer des données directement sur le port ethernet
Salut,
J'ai besoin de quelques explications: quand tu dis "sans passer par la carte réseau", tu veux dire que la carte réseau ne s'occupe que de transmettre les données?
Quand tu dis "sans aucune action de l'OS", tu veux dire que l'OS peut récupérer le flux mais n'a pas à le décoder comme un flux réseau?
Si tu pouvais expliquer l'utilisation que tu veux en faire, je suis preneur
Dernière modification par Nuliel (Le 05/11/2019, à 20:41)
Hors ligne
#4 Le 05/11/2019, à 23:41
- califerax
Re : envoyer des données directement sur le port ethernet
salut,
Premièrement merci de ton intérêt.
Le but est de pouvoir envoyer en boucle des données le plus rapidement possible. Pour cela il faut que je puisse connaitre le temps minimal que mon ordi peut atteindre entre le moment où mon programme est lancé et le moment où les données sont "disponibles" sur le port ethernet. Or si on utilise une socket classique par exemple l'OS va devoir traiter les différents en-têtes ce qui fait perdre du temps d'où ma volonté de trouver un moyen de contourner l'OS. De plus le problème de la carte réseau est le même que celui de l'OS : elle fait perdre du temps en traitant les données et en les incluant dans une "file d'attente" donc je voudrait aussi pouvoir contourner la carte réseau afin de pouvoir envoyer des données directement sur le port ethernet.
D'après mes recherches certains patch pourrait servir de bypass pour contourner l'OS afin d'avoir un accès direct à la mémoire et c'est ce type d'astuces que je souhaiterais trouver mais pour envoyer des données et non pour écrire dans la mémoire.
Dernière modification par califerax (Le 05/11/2019, à 23:47)
Hors ligne
#5 Le 06/11/2019, à 10:07
- LeJediGris
Re : envoyer des données directement sur le port ethernet
Salut,
Ce que tu as l'air de décrire est un fonctionnement dit "temps réel" si j'ai bien compris. Tu veux que ton appli lance une communication (de quel type, point à point, broadcast ?) avec le minimum de latence possible, et des "Raw" data (déja de quoi s'agit-il comme "data") j'ai bon ?
Un minimum de précisions semble nécessaire: Quel type de topologie réseau (sic, point à point etc...), quel type de driver/carte utilisé, quel "charge" de raw data.
Ensuite, un minimum de documentation/connaissance est à avoir, par exemple:
1) Ethernet c'est du CSMA/CD à ton avis quel impact en fonction de la typologie choisie ?
2) Linux n'est pas réellement temps-réel, à ton avis comment caractériser la temporalité de ce que tu veux faire ? il existe bien des patchs RT comme Xenomai mais c'est un peu.... "pointu".
3) Comment veux-tu attaquer les couches protocolaires, via LLC, MAC ? si tu ne veux pas passer par IP ou UDP.
4) Connais-tu les IOCTL ou la programmation des API de driver ? voir ici
Bref c'est pas anodin comme démarche.
A+
%NOINDEX%
Matos Asus Zenbook
"Home Made" Monstro: core i7 9700+32Go de mémoire+SSD QVO Samsung 1To +MoBo Asus Prime Z390P
+ "Terminator", core i5 3570, 16Go, SSD Intel 520 sous Mint 19.3, Freebox Revolution
Hors ligne
#6 Le 06/11/2019, à 10:44
- califerax
Re : envoyer des données directement sur le port ethernet
Oui c'est celà.
Pour le moment je ne souhaite pas m'occuper de ce qui sera la communication sur un réseau en série mais juste de créer un programme/un moyen de tester différents ordi. Les donnée que j'envoie n'ont pour le moment aucune importance car elles ne me servent qu'à tester la latence et voir si les paquets arrivent entier.
Malheureusement mes connaissances en réseau sont bien faibles et se limitent a peu près aux recherches que j'ai effectuées pour cette tâche.
Justement le but de toute l'opération est de supprimer tout ces contrôles d'erreur et de flux afin que tout ces protocoles ne fassent pas perdre de temps.
Oui effectivement je me suis rendu compte que ce n'était pas anodin ni trivial comme première approche des réseaux
Hors ligne
#7 Le 06/11/2019, à 10:47
- Watts
Re : envoyer des données directement sur le port ethernet
Bonjour
Ce que tu décris est presque le ping en ICMP! C'est du RAW, ni TCP ni UDP, encapsulé dans une trame IP et Ethernet (obligatoire si tu souhaites contacter des machines sur un réseau, surtout Ethernet). Et avec quelques utilitaires, je pense qu'on peut modifier les données à l'intérieur. Mais la commande ping mesure bien une certaine latence. En temps réel (tout du moins industriel) ce sont des protocoles bien plus complexes qui sont utilisés.
Dernière modification par Watts (Le 06/11/2019, à 10:47)
Acer Aspire X3990-Dual boot Windows 7 / Ubuntu 18.04
Hors ligne
#8 Le 06/11/2019, à 11:21
- califerax
Re : envoyer des données directement sur le port ethernet
La il faut que je puisse créer des trames raw ethernet mais qu'elles ne comportent aucune trace de protocole, autrement dit ni adresse IP source, ni adresse IP destinataire, ni IP version... Juste des données brutes et c'est bien la tout le problème car par exemple même avec des sockets raw IL me reste des trace de protocole dans les données que je reçois via wireshark
Hors ligne
#9 Le 06/11/2019, à 11:36
- Nuliel
Re : envoyer des données directement sur le port ethernet
Tu as recherché sur internet avec les mots clés "send raw data using ethernet" (j'ai trouvé un tas de trucs avec ces mots clés)?
Quel langage utilises tu?
D'après ce que j'ai lu, ouvrir une raw socket est possible, il faut par contre être root sur l'ordi.
Hors ligne
#10 Le 06/11/2019, à 13:28
- califerax
Re : envoyer des données directement sur le port ethernet
Oui mais malheureusement les socket raw conserve tout de même une part des entêtes.
Je code en C
Hors ligne
#11 Le 06/11/2019, à 13:31
- diesel
Re : envoyer des données directement sur le port ethernet
Pour te répondre, il nous manque un tas d'informations.
- quel débit utile cherches-tu ?
- entre quoi et quoi cherches-tu à discuter (deux ordis reliés en point à point par un câble réseau dédié, un véritable réseau avec hub ou switch,...) ?
- quelle est la latence recherchée ?
- pour chaque "paquet", combien d'octets ?
- est-ce que tu veux gérer le protocole ethernet ou descendre encore en dessous dans les couches réseau ?
Et j'en oublie.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#12 Le 06/11/2019, à 14:36
- califerax
Re : envoyer des données directement sur le port ethernet
Je cherche à obtenir une latence maximum de 1ms/cycle et si possible 100µs/cycle avec des paquets de taille max 1500 (MTU d'un cable ethernet).
Pour ce qui est du débit je cherche un débit autour du gigabit et mon installation est composé de deux ordinateurs tournant sous linux et relié par un câble ethernet (sachant que l'objectif étant plus tard de relier ces deux ordis avec un switch ethernet industriel possédant une capacité TSN).
Non je ne veux pas gérer le protocole ethernet je veux le faire disparaitre et donc passer dans les couches réseaux.
Hors ligne
#13 Le 06/11/2019, à 17:12
- Watts
Re : envoyer des données directement sur le port ethernet
En dessous d'ethernet, c'est le medium, je ne sais pas si la carte réseau te permet d'écrire des bits en raw directement. De plus, la carte réseau récéptrice ne recevra jamais ces bits, car elle ne reconnaitra jamais de trame ayant pour adresse cette machine. Sans Ethernet, y'a plus de réseau
Acer Aspire X3990-Dual boot Windows 7 / Ubuntu 18.04
Hors ligne
#14 Le 06/11/2019, à 18:53
- califerax
Re : envoyer des données directement sur le port ethernet
normalement wireshark doit être capable de lire ce type de données il me semble
Hors ligne
#15 Le 06/11/2019, à 19:25
- Watts
Re : envoyer des données directement sur le port ethernet
Oui mais wireshark lit les paquets qu'il sait interpréter. Du raw bits sans ethernet ni rien sera probablement interprété comme du bruit sur le media, donc pas un paquet. Il faut un logiciel capable d'analyser la couche 1, soit le physique.
Acer Aspire X3990-Dual boot Windows 7 / Ubuntu 18.04
Hors ligne