Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Soft Socket UDP

Réseau

    13 février 2008 à 22:06:26

    Salut à tous,

    Au boulot, j'ai codé une application client-serveur en UDP Multicast, qui vérifie que le nombre de paquets émis est bien égal au nombre de paquets reçus. Je ne vous mets pas le code car il est des plus classique, outrageusement inspiré des nombreux exemples disponibles sur le net.
    Je le teste sur un lien 1 Gb/s, entre deux machines (interfaces Gb) reliées par un switch, sous linux.
    L'application marche très bien pour des débits allant jusqu'à environ 300 Mb/s (je le vérifie par un analyseur réseau, tout est OK, au paquet près). Par contre, pour des "hauts" débits, le recepteur affiche des paquets perdus. Or, si sur l'interface je lance un tcpdump, je constate que les paquets sont bien arrivés sur l'interface. J'en déduis que c'est le soft qui n'est pas assez rapide pour gérer tout ces paquets. Pourtant dans mon "while(1)", entre deux "recvfrom()" il n'y a vraiment pas grand chose (3 additions, une multiplication, 1 printf et 1 fprintf).
    J'ai pu remarquer ce problème avec des appli grand public comme netperf.

    Je me demande donc d'où vient le problème ? Comment font des soft comme tcpdump ou Ethereal pour tout choper ? Cela se passe-t-il au niveau applicatif ou bien faut-il se tourner vers d'autres couches, plus proches de la physique ? Avez-vous de pistes ?

    Merci d'avance,
    Bonne soirée.
    • Partager sur Facebook
    • Partager sur Twitter
      14 février 2008 à 9:36:14

      hum je ne sais pas si c'est possible mais je pense que tu devrais utiliser un système de buffer pour ne pas que le prog soit dépaser par la masse d'information

      edit:
      ah tiens je me rappelles que tcpdump et wireshark ( oui c'est le nouveau nom de Ethereal) utilise le mode promiscuous pour recevoir tout les packets

      ton problème viens peut être de la

      je me souviens plus comment on active ce mode mais ça doit être un truc avec l'équivalent de WSAIoctl() sous linux
      • Partager sur Facebook
      • Partager sur Twitter
        14 février 2008 à 13:50:14

        Merci pour ta réponse.
        Concernant les buffers je ne sais pas si on parle de la même chose mais oui j'utilise des buffers pour stocker mes messages reçus.
        Pour ce qui est du mode promiscuous, il permet à la carte Ethernet de capturer tous les paquets qui lui arrivent dessus, même s'ils ne lui sont pas destinés. Cela ne me concerne donc pas car je suis abonné au flux Multicast, l'interface capture donc les paquets quoiqu'il arrive.

        Je continue à chercher. J'ai entendu parler des "raw sockets", est-ce une bonne piste ?

        Merci d'avance.
        • Partager sur Facebook
        • Partager sur Twitter
          14 février 2008 à 16:38:16

          oué les raw sockets sont intéressants mais tu aurras le même problème c'est à dire qu'il sera dépasser par la masse d'information

          et puis l'interet des raw sockets c'est de récup des données sur l'ip du dest/src, le port du dest/src et quelque autre truc mais pas très interessant donc je ne pense pas que ça te servent trop
          • Partager sur Facebook
          • Partager sur Twitter

          Problème Soft Socket UDP

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown