Warum friert eine bidirektionale iperf-Anforderung auf dem Server auf der Clientseite ein?

2055
Eldros

Um den Unterschied im Netzwerkverkehr zwischen zwei Standorten und unserem Hauptserverzentrum zu diagnostizieren, verwende ich iperf, um die Verkehrsrate mit dem folgenden Befehl zu protokollieren:

iperf -c <server ip> -F 500MB_Test_File.zip -n 500M -y C 

Nachdem ich Unterschiede zwischen Upload- und Download-Rate festgestellt hatte, wollte ich die -dOption nutzen und stolperte über ein seltsames Verhalten: Obwohl die Übertragung in der Client-Server-Richtung durchging, fror sie ein und schien nicht zu tiemout. Hier ist ein Test, den ich gemacht habe, der zeigt, dass er nicht mit der Tatsache zusammenhängt, dass ich eine Datei als Quelle für die Datenübertragung verwende:

$ iperf -c <server IP> -d -i 1 ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ ------------------------------------------------------------ Client connecting to <server ip>, TCP port 5001 TCP window size: 153 KByte (default) ------------------------------------------------------------ [ 5] local <local ip> port 35144 connected with <server ip> port 5001 [ 4] local <local ip> port 5001 connected with <server ip> port 39967 [ ID] Interval Transfer Bandwidth [ 5] 0.0- 1.0 sec 9.75 MBytes 81.8 Mbits/sec [ 4] 0.0- 1.0 sec 10.7 MBytes 89.3 Mbits/sec [ 5] 1.0- 2.0 sec 10.9 MBytes 91.2 Mbits/sec [ 4] 1.0- 2.0 sec 10.9 MBytes 91.3 Mbits/sec [ 5] 2.0- 3.0 sec 11.0 MBytes 92.3 Mbits/sec [ 4] 2.0- 3.0 sec 10.9 MBytes 91.4 Mbits/sec [ 5] 3.0- 4.0 sec 11.0 MBytes 92.3 Mbits/sec [ 4] 3.0- 4.0 sec 10.9 MBytes 91.4 Mbits/sec [ 5] 4.0- 5.0 sec 11.0 MBytes 92.3 Mbits/sec [ 4] 4.0- 5.0 sec 10.9 MBytes 91.4 Mbits/sec [ 5] 5.0- 6.0 sec 11.0 MBytes 92.3 Mbits/sec [ 4] 5.0- 6.0 sec 10.9 MBytes 91.4 Mbits/sec [ 5] 6.0- 7.0 sec 10.9 MBytes 91.2 Mbits/sec [ 4] 6.0- 7.0 sec 10.9 MBytes 91.4 Mbits/sec [ 5] 7.0- 8.0 sec 11.2 MBytes 94.4 Mbits/sec [ 4] 7.0- 8.0 sec 10.9 MBytes 91.4 Mbits/sec [ 5] 8.0- 9.0 sec 11.1 MBytes 93.3 Mbits/sec [ 5] 9.0-10.0 sec 11.1 MBytes 93.3 Mbits/sec [ 5] 0.0-10.0 sec 109 MBytes 91.4 Mbits/sec ^C^C 

Ich verwende iperf 2.0.5. Sowohl die Clients als auch der Server sind Linux-Maschinen, wobei der Server virtuell ist.

BEARBEITEN

Nachdem ich dem Vorschlag von MariusMatutiae gefolgt war, habe ich den iperf-Server auf dem Client-Computer gestartet und dann versucht, die bidirektionale Anforderung von der VM aus zu stellen.

[host@centos ~]$ iperf -c <client_id> -d -i 1 bind failed: Address already in use ------------------------------------------------------------ Client connecting to <client_id>, TCP port 5001 TCP window size: 19.3 KByte (default) ------------------------------------------------------------ [ 4] local <server_id> port 40175 connected with <client_id> port 5001 [ ID] Interval Transfer Bandwidth [ 4] 0.0- 1.0 sec 11.6 MBytes 97.5 Mbits/sec [ 4] 1.0- 2.0 sec 9.50 MBytes 79.7 Mbits/sec [ 4] 2.0- 3.0 sec 10.6 MBytes 89.1 Mbits/sec [ 4] 3.0- 4.0 sec 11.0 MBytes 92.3 Mbits/sec [ 4] 4.0- 5.0 sec 11.0 MBytes 92.3 Mbits/sec [ 4] 5.0- 6.0 sec 10.9 MBytes 91.2 Mbits/sec [ 4] 6.0- 7.0 sec 11.0 MBytes 92.3 Mbits/sec [ 4] 7.0- 8.0 sec 10.8 MBytes 90.2 Mbits/sec [ 4] 8.0- 9.0 sec 8.38 MBytes 70.3 Mbits/sec [ 4] 9.0-10.0 sec 9.75 MBytes 81.8 Mbits/sec [ 4] 0.0-10.0 sec 105 MBytes 87.8 Mbits/sec [host@centos ~]$ 

Ich dachte, großartig, der Befehl stoppt von selbst, aber ich bekomme nur die Ergebnisse in eine Richtung. Bis ich die Maschine, auf der ich den iPerf-Server startete, anschaute und folgendes sah:

$ iperf -s ------------------------------------------------------------ Server listening on TCP port 5001 TCP window size: 85.3 KByte (default) ------------------------------------------------------------ [ 4] local <client_ip> port 5001 connected with <server_ip> port 40179 ------------------------------------------------------------ Client connecting to <server_ip>, TCP port 5001 TCP window size: 85.0 KByte (default) ------------------------------------------------------------ [ 6] local <client_ip> port 36243 connected with <server_ip> port 5001 [ ID] Interval Transfer Bandwidth [ 6] 0.0-10.0 sec 45.4 MBytes 38.0 Mbits/sec [ 4] 0.0-10.2 sec 64.2 MBytes 52.8 Mbits/sec 

Ich musste denken, dass ich möglicherweise einen Server als Daemon auf beiden Seiten der Verbindung starten muss, damit der bidirektionale Befehl funktioniert. Ich habe zwar ähnliche Ergebnisse erhalten und nur die Leistung auf einer Seite der Transaktion ausgegeben, aber als solche Ich habe keine Möglichkeit, die Leistungsdaten auf der anderen Seite abzurufen: Ich habe den iperf-Dämon mit gestartet, -D > iperflogaber das Protokoll scheint nicht gefüllt zu sein ...

Ist es vermutlich so, dass eine iperf in beiden Maschinen laufen soll, damit eine bidirektionale Anforderung durchlaufen wird? bind failed: Address already in useBekomme ich die Meldung, wenn ich einen iperf-Client starte und ein Server auf beiden Seiten läuft, ein Hinweis darauf, wo das Problem liegen könnte? Ich habe das Gefühl, dass das, was ich mache, nicht das Standardverfahren sein sollte ...

0
Was passiert, wenn Sie den Host anstelle des VM-Gasts als anderes Ende der Verbindung verwenden? MariusMatutiae vor 8 Jahren 0
Sie meinen, die VM als iperf-Client und den früheren Client als Server zu verwenden? Ich muss es versuchen, ich melde mich bei Ihnen. Eldros vor 8 Jahren 0
@MariusMatutiae hat es ausprobiert und einige Informationen hinzugefügt Eldros vor 8 Jahren 0
Die Fehlermeldung "Binden fehlgeschlagen: Adresse bereits verwendet" bedeutet, dass Sie nicht auf demselben PC einen Client und einen Server ausführen können. Die korrekte Methode ist, einen Server auf einem Rechner und einen Client auf dem anderen Rechner mit der Option -d zu starten (keine Option -d für den Server). Sie sagten, ein Server ist virtuell: Ist der andere PC der Host des virtuellen Servers? MariusMatutiae vor 8 Jahren 0
@MariusMatutiae: Die Hosts befinden sich an unterschiedlichen Standorten, da wir den Datenverkehr zwischen einigen Ihrer Standorte und unserem Hauptservercenter testen möchten. Aber wie ich in meinem letzten Schnitt erwähnt habe, scheint es, als sei der Server als Daemon gestartet, was überhaupt nicht intuitiv war ... Eldros vor 8 Jahren 0

1 Antwort auf die Frage

0
Eldros

Wie ich vermutete und Marius bestätigte, können Client und Server nicht auf demselben Rechner laufen. Also wartete ich auf eine günstige Zeit, um den Dämon zu beenden, damit er nicht gleichzeitig mit dem Client ausgeführt werden konnte. Er startete den Server nur mit -sdem Host (der sich an einem völlig anderen Ort befindet, wie Marius gefragt hatte) und die bidirektionale Anfrage auf dem Server gestartet hatte VM und die Anfrage gingen durch (dachte an den Moment: "Was zum ...").

Und dann traf es mich, ich bekomme das Problem nur, wenn der Server als Daemon gestartet wird.

Ich bestätigte meine Hypothese, indem ich sowohl Server als Dämon als auch Dämon testete und die Rolle der Maschinen vertauschte.

Zusammenfassung: Wenn Sie bidirektionale Anforderungen verwenden möchten, starten Sie den Server nicht als Daemon.

Mir wurde klar, dass, anstatt zu versuchen, den Server als Dämon zum Laufen zu bringen, die meisten Benutzer in meiner Situation wahrscheinlich zufrieden sein würden, einen funktionierenden Server zu haben und ihn ohne die Option "-D" auszuführen, also entferne ich den Inhalt der gestellten Frage und machte es ist die Antwort. Eldros vor 8 Jahren 0