IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

trames perdues entre sendto et recvfrom


Sujet :

Réseau C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 5
    Points
    5
    Par défaut trames perdues entre sendto et recvfrom
    Bonjour,

    voici mon problème :

    je mets 2 ordis en réseau wifi ad hoc avec une adresse IP pour chacun et je les fais "pinger".
    J'obtiens un résultat de 0% d'erreurs sur des tests d'environ un millier de ping.
    Parfait.

    Maintenant, je mets toujours ces 2 ordis en réseau ad hoc,
    j'utilise une interface réseau virtuelle sur chacun des ordis
    et je récupère le "ping" qui sort de cette interface virtuelle.

    J'envoie ce "ping" vers le deuxième ordi par l'intermédiaire de "raw socket".
    Ce deuxième ordi répondra "pong" par le même mécanisme.

    Cela fonctionne "presque bien" puisque j'obtiens 3% d'erreurs.
    Ces erreurs proviennent du fait qu'un des 2 ordis n'a pas reçu le "ping" (ou le "pong") que lui a envoyé l'autre.
    Seulement, je ne comprends pas, étant donné que la liaison est excellente (je rappelle qu'en ne passant pas par les "raw socket", j'obtiens 0% d'erreur).
    Ces erreurs ont l'air de se produire aléatoirement.

    Avec Wireshark, j'ai vérifié que le "ping" est bien envoyé par l'intermédiaire de sendto() mais il n'est pas reçu par recvfrom().
    Cette trame envoyée a bien la longueur attendue et la fonction sendto() ne renvoie pas d'erreurs.
    J'ai également vérifié à l'aide de l'outil "strace" que les fonctions sendto() et recvfrom() sont belles et bien appelées.

    Le problème se situe donc entre le moment où j'appelle le sendto() de l'émetteur et le recvfrom() du récepteur qui ne reçoit rien.
    Il n'y a aucun message d'erreur affiché, tout ce passe comme si le récepteur n'avait jamais vu le paquet arriver.

    Quelqun pourrait-il m'aider ?

    Merci

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    J'ai mis un troisième ordi "espion" en réseau pour voir si le problème venait de l'émission ou de la réception.
    Le problème vient de la réception car quand mon ordi récepteur rate une trame, l'ordi espion, lui, arrive à la recevoir.

    J'ai essayé la commande "iwconfig wlan0 rts 1" mais ça ne change rien.
    J'ai également essayé la commande "iwconfig retry" mais ça ne change rien non plus.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    J'ai compris où était le problème.

    Je résume la situation :
    J'utilise un paquet IP contenant un ping.
    J'obtiens ce paquet par l'intermédiaire d'une interface réseau virtuelle (interface TUN) sur laquelle j'exécute la commande Linux "ping".

    Je récupère ce paquet et je lui ajoute une en-tête éthernet avec comme destination "ff:ff:ff:ff:ff:ff" (broadcast).

    Pourquoi je m'amuse à ajouter cette en-tête ? Car je fais du network coding et je dois impérativement envoyer toutes mes trames en broadcast.

    Le problème avec l'envoi Wifi en broadcast est qu'en cas de collision, il n'y a pas de retransmission (car le récepteur n'envoie pas d'acquittements).
    Les trames que j'envoie peuvent donc avoir des collisions (par exemple avec les beacons qu'envoient les stations du réseau ad-hoc).

    J'ai eu une confirmation de ma théorie en envoyant des ping en broadcast : j'obtiens le même taux d'erreur.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par remiH Voir le message
    Les trames que j'envoie peuvent donc avoir des collisions (par exemple avec les beacons qu'envoient les stations du réseau ad-hoc).

    J'ai eu une confirmation de ma théorie en envoyant des ping en broadcast : j'obtiens le même taux d'erreur.
    Merci pour cet intéressant retour !

    Steph

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/01/2010, 11h33
  2. Réponses: 6
    Dernier message: 29/12/2009, 19h53
  3. [CR XI] Données perdues entre l'aperçu et la génération pdf
    Par pcdj dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 03/11/2009, 10h39
  4. [GPS] Problème trames NMEA entre différents modèles de PDA
    Par Julien_G dans le forum Windows Mobile
    Réponses: 3
    Dernier message: 14/05/2009, 12h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo