J'ai une application de streaming vidéo qui fonctionne bien dans mon bureau mais échoue lamentablement chez le client. Le symptôme est que toutes les deux secondes, j'arrête de recevoir des paquets UDP pendant 2 secondes, puis le flux reprend comme si de rien n'était.
J'ai couru http://www.pingtest.net/ chez le client et il est revenu excellent. Pas de paquets perdus et faible latence. La seule différence que j'ai remarquée entre nos deux sites est que les ping google.ca
délais d'attente à leur emplacement mais fonctionnent dans le mien.
Comment puis-je tester si le réseau sur lequel je suis bloque les paquets UDP entrants? Existe-t-il un moyen pour moi d'isoler qui abandonne les paquets?
networking
udp
Gili
la source
la source
Réponses:
Vous pouvez essayer d'établir une connexion UDP avec
netcat
.Sur une machine A en dehors du réseau du consommateur, exécutez:
Notez le
-u
qui indique à netcat d'utiliser UDP. (Et sachez également qu'il existe différentes versions denetcat
, qui auront besoin du-p
paramètre ou non; étant donné les variantes des deux plus courantes (?), Toutes deux incluses dans Debian.)Sur place des consommateurs:
nc -u [addr of machine A] 1234
.Essayez d'envoyer du texte ou, mieux encore, utilisez des canaux pour envoyer un fichier entre les deux emplacements et effectuez ensuite une différence.
la source
-l
«It is an error to use this option in conjunction with the -p, -s, or -z options.
», j'ai donc corrigé la commande en une que j'ai testée pour fonctionner. De plus, j'ai changé «ip» en «addr» parce que les noms d'hôtes peuvent également être utilisés et sont en quelque sorte une «adresse».addr
vs.ip
Mais maintenant, avec votre commande, j'obtiens une erreur:listen needs -p arg
(j'ai également testé mes commandes données dans la réponse;)
). Il existe différents nc, si vous donnez plus de détails comme la version nc et / ou votre distribution, j'ajouterai une note à ma réponse.nc
commande par défaut est un lien symbolique/bin/nc -> /etc/alternatives/nc -> /bin/nc.openbsd
fourni par le paquet Debiannetcat-openbsd
. Ma machine Ubuntu locale a aussinc.openbsd
par défaut. Aucun des deux n'acceptera-l -p
. J'ai également installéncat
sur les deux machines à partir dunmap
paquet Ubuntu / Debian. l'ancienne machine Debian,ncat
refuse-l -p
, maisncat
sur Ubuntu accepte les deux façons. Bien que la version Debian doit être ancienne car elle n'a pas la--sctp
possibilité de gêner.: - /nc
variante? Je remarque qu'il existe également unnetcat-traditional
package ' ', mais je n'ai pas essayé cela.netcat-traditional
(v 1.10-38) car il est livré avec debian. Merci pour votre indice, j'ai maintenant inclus les deux variantes dans la réponse.côté serveur, établissez un serveur UPD avec
côté client, vérifiez la connexion UDP avec
la source
Les
netcat
commandes de la réponse de mpy sont utiles à des fins de diagnostic, mais je complète cette réponse par une autre approche de votre problème sous-jacent.Il peut être utile de faire retomber votre application sur SCTP , ou même TCP. J'ai trouvé cette question parce que je cherchais comment rejeter les paquets UDP entrants des utilisateurs utilisant plus que leur part de la liaison descendante lorsqu'elle est congestionnée, car contrairement à SCTP et TCP, UDP n'a pas de contrôle de congestion, ce qui rend très difficile la priorisation de la liaison descendante trafic.
SCTP et TCP ont tous deux un contrôle de la congestion et fonctionnent bien avec QoS, mais SCTP a l'avantage supplémentaire par rapport à TCP qu'il a été conçu pour les applications de streaming en temps réel, ce qui en fait un bon remplacement pour TCP et UDP. En effet, SCTP est le meilleur des deux protocoles de transport les plus courants.
Ce n'est pas une mauvaise idée d'avoir un repli, plutôt que de compter uniquement sur UDP. Même si vous ne retombez que sur TCP, vous pouvez au moins dire que cela fonctionne, peut-être tout simplement pas de manière optimale.
la source