Ich habe eine Video-Streaming-Anwendung, die in meinem Büro einwandfrei funktioniert, aber beim Kunden kläglich ausfällt. Das Symptom ist, dass ich alle paar Sekunden 2 Sekunden lang keine UDP-Pakete mehr empfange und der Stream dann fortgesetzt wird, als ob nichts falsch wäre.
Ich habe http://www.pingtest.net/ am Kundenstandort ausgeführt und es kam ausgezeichnet zurück. Keine verworfenen Pakete und geringe Latenz. Der einzige Unterschied, den ich zwischen unseren beiden Standorten festgestellt habe, ist die ping google.ca
Zeitüberschreitung an ihrem Standort, die jedoch in meinem funktioniert.
Wie teste ich, ob das Netzwerk, in dem ich mich befinde, eingehende UDP-Pakete blockiert? Gibt es eine Möglichkeit für mich zu isolieren, wer die Pakete verwirft?
quelle
Antworten:
Sie können versuchen, eine UDP-Verbindung mit herzustellen
netcat
.Auf einem Computer A außerhalb des Verbrauchernetzwerks laufen:
Beachten Sie,
-u
was netcat anweist, UDP zu verwenden. (Und beachten Sie auch, dass es verschiedene Versionen von gibtnetcat
, die den-p
Parameter benötigen oder nicht; angegeben sind die Varianten für die beiden häufigsten (?), Die beide in Debian enthalten sind.)Am Verbraucherstandort :
nc -u [addr of machine A] 1234
.Versuchen Sie, Text zu senden, oder verwenden Sie Pipes, um eine Datei zwischen beiden Speicherorten zu senden, und führen Sie anschließend einen Diff durch.
quelle
-l
"It is an error to use this option in conjunction with the -p, -s, or -z options.
", also habe ich den Befehl auf einen korrigiert, den ich getestet habe, um zu funktionieren. Außerdem habe ich 'ip' in 'addr' geändert, da auch Hostnamen verwendet werden können und gewissermaßen eine 'Adresse' sind.addr
vs.-ip
Punkt zu. Aber jetzt mit Ihrem Befehl erhalte ich eine Fehlermeldung:listen needs -p arg
(Ich habe meine in der Antwort angegebenen Befehle auch getestet;)
). Es gibt verschiedene NCs da draußen. Wenn Sie weitere Details wie die NC-Version und / oder Ihre Distribution angeben, werde ich meiner Antwort eine Notiz hinzufügen.nc
ist Symlink,/bin/nc -> /etc/alternatives/nc -> /bin/nc.openbsd
der vom Debian-Paket bereitgestellt wirdnetcat-openbsd
. Mein lokaler Ubuntu-Computer hatnc.openbsd
standardmäßig auch. Keiner akzeptiert-l -p
. Ich habe auchncat
auf beiden Computern aus demnmap
Ubuntu / Debian-Paket installiert . Ein Die ältere Debian-Maschinencat
lehnt ab-l -p
,ncat
akzeptiert aber unter Ubuntu beide Möglichkeiten. Obwohl die Debian-Version uralt sein muss, da sie ärgerlicherweise keine--sctp
Option hat .: - /nc
Variante? Ich stelle fest, dass es auch einnetcat-traditional
Paket gibt, aber das habe ich nicht ausprobiert.netcat-traditional
(v 1.10-38), da es mit Debian geliefert wird. Vielen Dank für Ihren Hinweis, ich habe jetzt beide Varianten in die Antwort aufgenommen.Richten Sie auf der Serverseite einen UPD-Server mit ein
Überprüfen Sie auf der Clientseite die UDP-Verbindung mit
quelle
Die
netcat
Befehle in der Antwort von mpy sind für Diagnosezwecke nützlich, aber ich ergänze diese Antwort mit einem anderen Ansatz für Ihr zugrunde liegendes Problem.Es kann sich lohnen, Ihre Anwendung auf SCTP oder sogar TCP zurückzugreifen. Ich habe diese Frage tatsächlich gefunden, weil ich nach Möglichkeiten gesucht habe, eingehende UDP-Pakete von Benutzern abzulehnen, die mehr als ihren Anteil am Downlink verwenden, wenn dieser überlastet ist, da UDP im Gegensatz zu SCTP und TCP keine Überlastungskontrolle hat, was es sehr schwierig macht, den Downlink zu priorisieren der Verkehr.
Sowohl SCTP als auch TCP verfügen über eine Überlastungskontrolle und spielen gut mit QoS. SCTP bietet jedoch gegenüber TCP den zusätzlichen Vorteil, dass es für Echtzeit-Streaming-Anwendungen entwickelt wurde und somit ein guter Ersatz für TCP und UDP ist. Tatsächlich ist SCTP das beste der beiden am häufigsten verwendeten Transportprotokolle.
Es kann keine schlechte Idee sein, einen Fallback zu haben, anstatt sich nur auf UDP zu verlassen. Selbst wenn Sie nur auf TCP zurückgreifen, können Sie zumindest sagen, dass es funktioniert, vielleicht einfach nicht optimal.
quelle