(Linux) Tool zur Überwachung der "Qualität" der TCP-Verbindung?

4419
ernesto che

Ich bin auf der Suche nach einem Tool zur Überwachung der Qualität einer TCP-Verbindung. Ich versuche zu beschreiben, was ich meine:

Es sollte ein Tool mit einem Client- und einem Serverteil sein. Der Client sendet beispielsweise 1 KB Daten pro Sekunde an den Server, und der Server überwacht, wie schnell die Pakete zugestellt werden.

Oder anders ausgedrückt: Ich suche etwas Ähnliches wie den "ping" -Befehl, nur dass ich eine TCP-Verbindung testen kann und zwar mit einer ziemlich höheren Bandbreite (dh mehr Paketen), z. B. 1kB / s.

Ich interessiere mich nicht für maximalen Durchsatz, sondern für eine konstant schnelle Lieferung. Zum Beispiel würde ich eine 128-kps-MP3-Datei über eine Verbindung mit einem maximalen Durchsatz von ebenfalls 128 kps, aber geringer Latenzzeit streamen. Und ich möchte diese Datei sofort wiedergeben (oder etwa mit 1 Sekunde Puffer).

Das Ziel ist die Überwachung der Nutzbarkeit einer Netzwerkverbindung (Internetverbindung) im realen Leben. (Und nein, ich bin nicht daran interessiert, etwas Komplexes einzurichten und wie Nagios zu verwenden.)

Vielen Dank!

4
Hallo, es tut mir leid, dass Sie dies zunächst auf stackoverflow.com eingestellt haben. Dies ist keine programmierbezogene Frage. Bitte schauen Sie sich meine anderen Kommentare an, danke! ernesto che vor 14 Jahren 0

6 Antworten auf die Frage

1
Javier

Wie definieren Sie "wie schnell die Pakete zugestellt werden"? Wenn Sie wissen möchten, wie viel Zeit ein Paket benötigt, um Punkt B von Punkt A zu erreichen, dann glaube ich, dass dies ohne eine genaue Taktsynchronisation im Sub-Millisekundenbereich nicht möglich ist.

Was ich versuchen würde, ist, etwas echten Datenverkehr zu erfassen (dh, während Sie Ihre Anwendung tatsächlich verwenden), und es mit WireShark zu analysieren, um die Verzögerung zwischen den gesendeten Daten und dem entsprechenden ACK-Paket zu ermitteln. Das gibt Ihnen die Roundtrip-Zeit (RTT) für Ihren Verkehr.

Update :

Der TCP-Stack muss für jede Verbindung den RTT verfolgen. (wird zur Optimierung der Paketübertragung und zum Verwalten der Fenstergröße verwendet). Wenn Sie Linux verwenden und Ihre eigene Anwendung ist, können Sie getsockopt(fd,.. ,TCP_INFO,...)die zurückgegebenen Daten verwenden, einschließlich all dieser internen Parameter. Sie können diese Daten im Sekundentakt einsehen und an eine Anzeige-App weiterleiten.

Hallo, ich bin nicht an feinkörniger Lieferung interessiert. OK, das Problem (aus Sicht des Endbenutzers) ist: Die Internetverbindungen scheinen manchmal nicht zu funktionieren. Mit "nicht funktionieren" meine ich absolut keine Antwort von irgendeinem Server für einen Zeitraum von mindestens 30 Sekunden bis zu einigen Minuten, wie Hickups. Und ein Wunsch, diese Probleme über einen längeren Zeitraum zu überwachen. Ich suche also nicht nach einigen Millisekunden Latenzzeit, sondern nach Sekunden oder sogar Minuten, in denen keine oder nur sehr wenige Pakete zugestellt werden. vor 14 Jahren 0
1
Andrew McGregor

Klingt, als müsstest du iperf .

Sind Sie sich jedoch sicher, dass in den Verbindungen Ihrer Benutzer eine nicht funktionale Verbindung und keine TCP-Verbindungen auftreten? Die meisten TCPs bleiben stehen, wenn sie drei aufeinanderfolgende Paketverluste sehen.

Verwenden Sie die beste TCP-Überlastungssteuerung Ihres Systems? In Windows sollten Sie Compound TCP aktivieren, wenn Sie können. In Linux sollten Sie Westwood für diese Anwendung verwenden.

1
Trevoke

Just FYI.. Linux 'ping' has this option:

-s packetsize
Specifies the number of data bytes to be sent. The default is 56, which translates into 64 ICMP data bytes when combined with the 8 bytes of ICMP header data.

0
Adrian Cox

Ich bin mir nicht sicher, ob Sie einen langlebigen Monitor oder eine Anwendung wie Ping für einen einmaligen Test suchen. Wenn Sie die TCP-Leistung eines Links erfassen möchten, ist das klassische Tool NetPIPE . NetPIPE kann Ihnen den Durchsatz und die Latenz einer bidirektionalen Kommunikation mitteilen.

Hallo, danke für die Antwort. Ich möchte einen langlebigen Monitor, aber es könnte auch ein Shell-Hilfsprogramm sein, das ich in "screen" ausführen würde oder die Ausgabe in eine Datei leiten würde. Gehen Sie auf NetPIPE. vor 14 Jahren 0
0
Justin Smith

Für niedrigste Latenzzeiten, aber weniger Fehlerkorrektur, ist UDP eine bessere Option als TCP (beispielsweise hat der jackd-Sound-Server ein Backend, das aus genau diesem Grund Audio über UDP streamen kann - jackd ist mehr auf perfekte Klangqualität / Pro-Audio ausgerichtet.) Produktion obwohl).

Schauen Sie sich Icecast für UDP-MP3-Streaming an.

Wenn Sie sich Ihre anderen Antworten ansehen, ist es möglicherweise schwieriger, UDP an Ihre Benutzer zu übermitteln ... aber möglicherweise werden Sie mit diesem Ansatz immer noch etwas Erfolg haben. Ich lasse diese Antwort nur für den Fall. Justin Smith vor 14 Jahren 0
0
Mikhail Moskalev

Theoretisch ist es möglich, einen "passiven" Monitor zu erstellen. Diese Monitoranwendung TCP-Daten und ACK. und meinen Kanalstatus als Ok, wenn die meisten Daten entsprechende ACK haben. Verwenden Sie nur dann einen aktiven Test (ICMP-Ping, TCP-Ping), wenn Daten selten sind. Aber ich kenne solche Software nicht.