qft
QFT ist eine kleine Anwendung für die schnelle (und wirklich zuverlässige) Peer-to-Peer-UDP-Dateiübertragung.
Wenn dich ein Freund hierher geschickt hat...
...schauen Sie sich den Abschnitt „Releases“ in der Seitenleiste an. Sie sollten einen Link mit dem Titel vX.YZ sehen. Klicken Sie darauf und wählen Sie dann die richtige Datei für Ihr Betriebssystem aus: qft
für Linux, qft-mac
für Mac und qft.exe
für Windows. Laden Sie diese Datei herunter, machen Sie sie im Fall von Linux oder Mac ausführbar und befolgen Sie dann die Anweisungen Ihres Freundes, wie er die Datei erhält, die er Ihnen senden wollte.
Verwendung:
- Finden Sie einen öffentlichen QFT-Helfer (zum Beispiel tudbut.de:4277)
- Geben Sie auf dem Absender-PC
qft sender <helper> <shared-phrase> <filename>
ein. - Geben Sie auf dem Empfänger-PC
qft receiver <helper> <shared-phrase> <filename>
ein. - Nach kurzer Zeit sollten beide PCs mit der Übertragung beginnen. Wenn dies nicht der Fall ist, versuchen Sie es erneut.
ODER
- Geben Sie auf beiden PCs
qft gui
ein. - Modus auswählen
- Wählen Sie die Datei zum Senden und die Datei zum Speichern aus
- Aktualisieren Sie die freigegebenen Phrasen und die Bitrate entsprechend
- Klicken Sie auf Start
Argumente:
qft helper <bind-port>
qft sender <helper-address>:<helper-port> <phrase> <filename> [send-delay] [bitrate] [skip]
qft receiver <helper-address>:<helper-port> <phrase> <filename> [bitrate] [skip]
Was Helfer tun
Helfer sind KEINE Weiterleitungen für Daten, sie werden nur zum HERSTELLEN der Verbindung verwendet.
Beim Lochen sind Helfer vor Ort.
- P1 verbindet* mit Helfer
- P1 sendet die Phrase an den Helfer
- P1 wartet auf eine Antwort
- Es vergeht einige Zeit
- P2 verbindet* sich mit demselben Helfer
- P2 sendet die Phrase an den Helfer
- P2 erhält die öffentliche IP und den öffentlichen Port von P1
- P1 erhält die öffentliche IP und den öffentlichen Port von P2
- P1 und P2 trennen* sich vom Helfer
- P1 und P2 starten eine Schleife (leicht vereinfacht):
- Feuern Sie mehrmals ein Paket aufeinander ab
- Versuchen Sie, möglichst viele Pakete vom anderen zu empfangen
- Wenn keine empfangen werden, wiederholen Sie die Schleife
- Wenn einer empfangen wird, verlassen Sie die Schleife
- Verbindung zwischen P1 und P2 wird hergestellt.
*UDP ist ein verbindungsloses Protokoll, es gibt keine Handshakes. Das Wort „Verbindung“ wird hier als Indikator dafür verwendet, dass Daten zwischen den „verbundenen“ Parteien ausgetauscht werden. Das Wort „Disconnect“ wird hier als Indikator dafür verwendet, dass zwischen den „zuvor verbundenen“ Parteien keine Daten mehr ausgetauscht werden.
Entlarvung einiger Mythen über P2P-Netzwerke
- „Echtes P2P ist nur ohne NAT möglich“ – Sowohl meine Experimente als auch Wikipedia würden gerne ein Wort zum Lochen verlieren. Das einzige Problem, das mir aufgefallen ist, sind einige deutsche mobile Datenanbieter, aber das Versenden großer Dateien über mobile Daten ist selten etwas, was Sie tun möchten – und wenn ja, verwenden Sie etwas wie Croc oder Magic Wormhole, die kein reines echtes P2P sind .
- „Croc ist auch P2P, warum gibt es das?“ - Croc ist kein Peer-to-Peer. Croc verwendet einen Relay-Server, um Daten zwischen den beiden Clients auszutauschen (es sei denn, einer der Clients hat eine Portweiterleitung eingerichtet, was fast nie der Fall ist). Das ist Client-to-Server-to-Client, was nicht wirklich Peer-to-Peer ist. Peer-to-Peer bedeutet, dass zwei Clients ihre Daten direkt und ohne Server aneinander senden. „Peers stellen einen Teil ihrer Ressourcen, wie Rechenleistung, Festplattenspeicher oder Netzwerkbandbreite, anderen Netzwerkteilnehmern direkt zur Verfügung, ohne dass eine zentrale Koordination durch Server oder stabile Hosts erforderlich ist.“ - Wikipedia
Tipps und Tricks
- Sie können am Ende Ihrer beiden Befehle (nach dem Dateinamen) eine Zahl hinzufügen, um die Übertragungsgeschwindigkeit zu erhöhen (niedriger = schneller). Eine zu kleine Zahl kann jedoch aufgrund lokaler Netzwerkbedingungen, VPNs usw. zu Unzuverlässigkeit führen (Standard ist 500). . Dadurch wird die Verzögerung zwischen gesendeten Paketen geändert.
- Sie können danach auch eine Zahl hinzufügen. Dadurch wird die Paketgröße geändert, und eine höhere Zahl hat hier ähnliche Auswirkungen wie eine niedrigere Zahl im vorherigen Argument.
- Sie können einen Helfer selbst ausführen, wie das Argument „Helfermodus“ nahelegt. Dieser Helfer sollte einfach auf einem Server ausgeführt werden, der aus dem gesamten Internet erreichbar ist (ein billiger VPS reicht auf jeden Fall aus).
- Hilfsprogramme müssen nicht auf einem öffentlichen Server ausgeführt werden, sie funktionieren auch im LAN, aber auf diese Weise können sie nur von Computern im selben LAN verwendet werden.
- Sie können Streaming zulassen (z. B. wenn Sie von /dev/stdin übertragen möchten), indem Sie die Umgebungsvariable
QFT_STREAM
festlegen. - Um qfts- und qftr-Aliase unter Linux oder Mac zu verwenden, führen Sie Folgendes aus (ersetzen Sie
(shell)
durch Ihren Shell-Namen, normalerweise bash oder zsh):
echo ' alias qftr="qft receiver tudbut.de:4277" ' >> ~ /.(shell)rc
echo ' alias qfts="qft sender tudbut.de:4277" ' >> ~ /.(shell)rc
source ~ /.(shell)rc
Cooles Zeug
- Dateien werden über UDP übertragen, aber qft verfügt über zusätzliche Zuverlässigkeitsmaßnahmen, um beschädigte Dateien zu vermeiden.
- Unzuverlässige Internetverbindung? Kein Problem! QFT unterbricht die Übertragung einfach, bis die Verbindung wiederhergestellt ist! Funktioniert nicht? Schauen Sie sich den Abschnitt „Eine vollständig gestoppte Übertragung fortsetzen“ an!
- Wussten Sie, dass Sie Ihren Computer während der Übertragung in den Ruhezustand versetzen oder anhalten können und er dort weitermacht, wo er aufgehört hat, auch wenn nur eine Seite angehalten ist? (Sofern Ihr Router den Port nicht blockiert hat, lesen Sie in diesem Fall den Abschnitt „Eine vollständig gestoppte Übertragung fortsetzen“.)
- QFT hält hohen Belastungen stand
Wetter Netzwerkbedingungen: 1000 ms Ping ist genauso schnell wie 10 ms Ping, Paketverlust-/Neuordnungsraten von über 10 % werden toleriert (kann jedoch die Geschwindigkeit verlangsamen, insbesondere wenn der Ping hoch ist). - Es ist in 100 % reinem Rust geschrieben.
Setzen Sie eine vollständig gestoppte Übertragung fort
Sie werden dies höchstwahrscheinlich nicht benötigen, es sei denn, die Übertragung ist aufgrund einer SEHR langen Pause oder eines Neustarts des Computers vollständig abgebrochen. Wenn Sie dies jedoch tun:
Stoppen Sie qft an beiden Enden und starten Sie es erneut mit dem Parameter [skip] (wenn Sie zuvor keine Bitrate angegeben haben, ist der Standardwert 256). Diese Bytes werden übersprungen und an der von Ihnen angegebenen Stelle fortgesetzt.
Fehlerbehebung
Es wird die Meldung Connecting...
angezeigt, es wird jedoch keine Verbindung hergestellt
Eines Ihrer Enden konnte nicht richtig mit dem Helfer verbunden werden. Stoppen Sie die Übertragung an beiden Enden und versuchen Sie es erneut.
Krokodil
Viele Leute haben erwähnt, dass dies wie ein Krokodil ist. Dies ist nicht der Fall, da Croc ein Relay verwendet, über das alle Ihre Daten gesendet werden. Dies stellt einen Engpass dar und bedeutet auch, dass die Relay-Administratoren für die gesendeten Inhalte verantwortlich sind. Das Relay puffert auch viele Daten, was bedeutet, dass sein RAM möglicherweise voll ist, wenn die Verbindung des Senders viel schneller ist als die des Empfängers. Die Kennzeichnung von Croc als „Peer-to-Peer“ ist bestenfalls irreführend, da es selten die P2P-Fähigkeiten nutzt (für P2P ist eine Portweiterleitung erforderlich, was selten geschieht). Lesen Sie den vorherigen Abschnitt über P2P-Mythen, wenn Sie glauben, dass Croc immer Peer-to-Peer ist.
Relevante XKCD
FAQ
Was ist ein Helfer?
Wie oben erläutert, dient es dazu, die Verbindung zwischen den beiden Partnern herzustellen.
Warum wird ein Helfer benötigt?
Ihr Router verwendet eine Funktion namens Netzwerkadressübersetzung . Dies ist erforderlich, da andernfalls viel zu viele IP-Adressen verwendet würden und das Internet in Stoßzeiten nicht mehr funktionieren würde. Dieses NAT stellt jedoch auch ein Problem dar, da es eine Schicht zwischen Ihrem PC und dem offenen Internet darstellt. Wenn eine neue eingehende Verbindung besteht, weiß das NAT nicht, an welchen PC in Ihrem LAN die Verbindung weitergeleitet werden soll, sodass die Verbindung einfach abgelehnt wird. Jede Peer-to-Peer-Software benötigt daher einen Hilfsserver (auch „STUN“-Server genannt), den beide Peers nach der IP-Adresse und dem Port des anderen fragen. Beide Peers können sich dann gegenseitig eine Reihe ausgehender Verbindungen senden. Wenn alles gut geht, haben beide Peers eine ausgehende Verbindung mit dem richtigen Timing gesendet, was dazu führt, dass beide NATs denken , dass es sich um ausgehende Verbindungen handelt, obwohl es sich tatsächlich um eine Art Kombination aus eingehenden und ausgehenden Verbindungen handelt.
TL;DR: P2P-Netzwerke sind aufgrund von Routern ohne Hilfsserver nicht möglich. Andernfalls wäre eine Portweiterleitung erforderlich, die schwierig einzurichten sein kann.
Wie erstelle ich einen öffentlichen/privaten Helfer?
Lesen Sie den zweiten Aufzählungspunkt im Abschnitt „Tipps und Tricks“.