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 journée.
Partager