Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/11/2019, à 20: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, à 20: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, à 21: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, à 21:41)

Hors ligne

#4 Le 06/11/2019, à 00: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 06/11/2019, à 00:47)

Hors ligne

#5 Le 06/11/2019, à 11: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, à 11: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, à 11: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, à 11:47)


Acer Aspire X3990-Dual boot Windows 7 / Ubuntu 18.04

Hors ligne

#8 Le 06/11/2019, à 12: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, à 12: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, à 14: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, à 14: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, à 15: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, à 18: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, à 19: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, à 20: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