Durchsatztest · Latenztest über UDP

Test-Peer

Ein Test-Peer ist ein kleines Programm, das du selbst auf einem Computer im selben Netzwerk wie dein iPhone oder iPad ausführst. Er antwortet auf das eigene Testprotokoll von Linkalyst, sodass die beiden Enden die Verbindung zwischen ihnen messen können.

Er ist kein Dienst zur Messung der Internetgeschwindigkeit und weder iperf noch ein anderes bestehendes Tool. Eine Website oder ein gewöhnlicher TCP-Dienst kann auf dieses Protokoll nicht antworten.

Welche Tools einen Test-Peer brauchen

Durchsatztest
throughput_peer.py · TCP 5202
Latenztest im UDP-Modus
echo_peer.py · UDP 9999

Dies sind die Standardports; beide lassen sich beim Start eines Peers ändern. Alle anderen Tools sowie der „Latenztest“ im Ping-Modus funktionieren ohne Test-Peer.

Download

Jeder Peer ist eine einzelne Python-Datei, die nur die Standardbibliothek verwendet. Der Computer benötigt Python 3.9 oder neuer und sonst nichts. Auf einem Mac ohne Python bietet der erste Befehl python3 an, die Befehlszeilen-Entwicklertools von Apple zu installieren, die Python enthalten.

throughput_peer.py 4.8 KB

Für den „Durchsatztest“. Sendet oder empfängt synthetische Daten über eine TCP-Verbindung.

SHA-256
6f3cf1a7bb8b076d8df0ddf77eb642cb8bdfc4a626e470b0231a8e2bd1d9643c
Herunterladen

echo_peer.py 7.8 KB

Für den „Latenztest“ im UDP-Modus. Sendet Pakete, die seinen Zugangscode enthalten, als Echo zurück.

SHA-256
d92e20436907a11897c9b14086360d9a4d92586c8c05250d5398e19a6bebfab4
Herunterladen

Um einen Download zu prüfen, vergleiche den SHA-256-Wert oben mit der Ausgabe von shasum -a 256 echo_peer.py unter macOS oder Linux oder von certutil -hashfile echo_peer.py SHA256 unter Windows.

Beide Programme werden im vorliegenden Zustand bereitgestellt, gemäß Abschnitt 5 der Nutzungsbedingungen.

Bevor du einen Peer startest

  • Betreibe einen Peer nur in einem privaten Netzwerk. Beide übertragen Klartext, keiner ist verschlüsselt, und der Durchsatz-Peer hat überhaupt keinen Zugangscode. Leite ihre Ports nicht aus dem Internet weiter.
  • Ein Peer lauscht nur auf dem Computer selbst (127.0.0.1), bis du ihm eine Adresse gibst; bis dahin kann dein Smartphone ihn nicht erreichen. Der UDP-Peer lehnt öffentliche und Wildcard-Adressen ab und beantwortet nur Pakete von privaten Adressen.
  • Der Durchsatz-Peer sendet und empfängt synthetische Daten. Er liest keine Dateien, behält nicht, was er empfängt, und leitet nichts weiter.
  • Starte den Peer auf der Adresse der Schnittstelle, die du messen möchtest. Ist der Computer per Kabel verbunden, bleibt eine zweite Funkstrecke aus dem Ergebnis heraus.

Ausführen

  1. 01

    Adresse des Computers ermitteln

    Verwende die IP-Adresse der Schnittstelle, die sich im selben Netzwerk wie dein Smartphone befindet.

    macOS · WLAN ist meist en0
    ipconfig getifaddr en0
    Windows · nach „IPv4-Adresse“ suchen
    ipconfig
    Linux
    hostname -I
  2. 02

    Peer auf dieser Adresse starten

    Öffne ein Terminal in dem Ordner, in dem du die Datei gespeichert hast. Die Beispiele verwenden 192.168.1.20; ersetze diese durch die Adresse deines Computers. Unter Windows gibst du py statt python3 ein.

    Durchsatztest
    python3 throughput_peer.py --host 192.168.1.20
    Ausgabe
    Listening on 192.168.1.20:5202 (single connection; 64 MiB / 60 s maximum)
    Latenztest über UDP
    python3 echo_peer.py --bind 192.168.1.20
    Ausgabe
    Linkalyst UDP echo peer: 192.168.1.20:9999
    Access code: 3f9c2a61d04b7e85
    Private networks only. Do not forward this port from the Internet; the access code is not encryption. Press Ctrl+C to stop.
  3. 03

    Eingehende Verbindungen zulassen

    Wenn eine Firewall fragt, ob Python eingehende Verbindungen annehmen darf, erlaube dies für das private Netzwerk. Die Firewall muss dafür nicht ausgeschaltet werden.

  4. 04

    Adresse in Linkalyst eingeben

    Gib für den „Durchsatztest“ unter „Test-Peer“ die Adresse und den Port ein, die der Peer ausgegeben hat. Füge für den „Latenztest“ im UDP-Modus ein UDP-Ziel mit dieser Adresse und diesem Port hinzu und gib den 16-stelligen Zugangscode ein, den der UDP-Peer ausgegeben hat.

  5. 05

    Computer wach halten, dann Peer beenden

    Der Computer muss während des gesamten Tests wach bleiben; auf einem Mac verhindert der Start des Peers mit caffeinate -i python3 … den Ruhezustand bei Inaktivität. Drücke Ctrl+C, um den Peer zu beenden, wenn du fertig bist.

Optionen

throughput_peer.py

--host ADDRESSNumerische Adresse, auf der gelauscht wird. Standard: 127.0.0.1, nur vom Computer selbst erreichbar.
--port PORTTCP-Port. Standard: 5202.
--onceNach einer Verbindung beenden.

echo_peer.py

--bind ADDRESSPrivate, Loopback- oder Link-Local-Adresse in numerischer Form, auf der gelauscht wird. Standard: 127.0.0.1.
--port PORTUDP-Port. Standard: 9999.
--token CODEDiesen 16-stelligen Zugangscode statt eines zufälligen verwenden.

Führe eine der beiden Dateien mit --help aus, um die vollständige Liste zu sehen. Die Optionen des UDP-Peers zur Fehlerinjektion, etwa --drop-every, dienen zum Testen von Linkalyst selbst und machen die Ergebnisse nicht repräsentativ.

Wenn die App den Peer nicht erreicht

Jede Anfrage läuft in ein Timeout, oder die Verbindung schlägt fehl

Prüfe, ob Smartphone und Computer im selben Netzwerk sind und nicht in einem Gastnetzwerk, das Geräte voneinander trennt; ob die Adresse in der App die ist, die der Peer ausgegeben hat; und ob die Firewall Python zulässt.

Der UDP-Peer beendet sich mit --bind must be a numeric private/loopback/link-local address

Gib ihm eine private IPv4- oder IPv6-Adresse, die zu diesem Computer gehört, in numerischer Schreibweise. Hostnamen, 0.0.0.0 und öffentliche Adressen werden abgelehnt.

Address already in use

Ein anderer Peer oder ein anderes Programm verwendet den Port. Beende dieses, oder starte den Peer mit --port und gib in der App denselben Port ein.

Der UDP-Peer läuft, aber es kommt nichts zurück

Prüfe den Zugangscode. Der Peer ignoriert Pakete ohne den Code, den er ausgegeben hat, und die App behält den Code nur, solange sie läuft; gib ihn also erneut ein, nachdem die App geschlossen wurde.