qft
QFT est une petite application pour le transfert de fichiers UDP Peer-To-Peer rapide (et vraiment fiable).
Si un ami vous a envoyé ici...
... regardez la section « Communications » dans la barre latérale. Vous devriez voir un lien intitulé vX.YZ Cliquez dessus, puis choisissez le bon fichier pour votre système d'exploitation : qft
pour Linux, qft-mac
pour Mac et qft.exe
pour Windows. Téléchargez ce fichier, rendez-le exécutable sous Linux ou Mac, puis suivez les instructions de votre ami pour recevoir le fichier qu'il voulait vous envoyer.
Usage:
- Recherchez un assistant QFT public (par exemple tudbut.de:4277)
- Sur le PC de l'expéditeur, saisissez
qft sender <helper> <shared-phrase> <filename>
. - Sur le PC du récepteur, entrez
qft receiver <helper> <shared-phrase> <filename>
. - Les deux PC devraient commencer à transférer après un court instant. Si ce n'est pas le cas, réessayez.
OU
- Sur les deux PC, entrez
qft gui
. - Sélectionnez le mode
- Sélectionnez le fichier à envoyer et le fichier dans lequel enregistrer
- Mettez à jour les phrases partagées et le débit en conséquence
- Cliquez sur Démarrer
Arguments :
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]
Que font les assistants
Les assistants ne sont PAS des relais de données, ils servent uniquement à ÉTABLIR la connexion.
Des assistants sont là pour vous aider à percer des trous.
- P1 se connecte* à l'assistant
- P1 envoie la phrase à l'assistant
- P1 attend une réponse
- Un certain temps passe
- P2 se connecte* au même assistant
- P2 envoie la phrase à l'assistant
- P2 obtient l'adresse IP publique et le port de P1
- P1 obtient l'adresse IP publique et le port de P2
- P1 et P2 se déconnectent* de l'assistant
- P1 et P2 démarrent une boucle (légèrement simplifiée) :
- se lancer un paquet plusieurs fois
- essayez de recevoir autant de paquets de l'autre
- si aucun n'est reçu, refaites une boucle
- si on en reçoit un, quittez la boucle
- La connexion entre P1 et P2 est établie.
*UDP est un protocole sans connexion, il n’y a pas de poignée de main. Le mot « connexion » est utilisé ici comme indicateur que des données seront échangées entre les parties « connectées ». Le mot « déconnexion » est utilisé ici pour indiquer qu'il n'y aura plus d'échange de données entre les parties « précédemment connectées ».
Démystifier certains mythes sur les réseaux P2P
- "Le vrai P2P n'est possible que sans NAT" - Mes expériences et Wikipédia aimeraient avoir un mot sur la perforation. Le seul problème que j'ai trouvé concerne certains fournisseurs de données mobiles allemands, mais l'envoi de fichiers volumineux via des données mobiles est rarement quelque chose que vous voudriez faire - et si c'est le cas, utilisez quelque chose comme Croc ou le trou de ver magique, qui ne sont pas purement du vrai P2P. .
- "Croc est aussi du P2P, pourquoi cela existe-t-il ?" - Croc n'est pas Peer-to-Peer. Croc utilise un serveur relais pour échanger des données entre les deux clients (sauf si l'un des clients dispose d'une configuration de redirection de port, ce qui n'est presque jamais le cas). Il s'agit de client à serveur à client, qui n'est pas vraiment du peer-to-peer. Peer-to-Peer signifie que deux clients s'envoient leurs données directement, sans serveur. "Les pairs mettent une partie de leurs ressources, telles que la puissance de traitement, le stockage sur disque ou la bande passante du réseau, directement à la disposition des autres participants du réseau, sans avoir besoin d'une coordination centrale par des serveurs ou des hôtes stables." - Wikipédia
Trucs et astuces
- Vous pouvez ajouter un nombre à la fin de vos deux commandes (après le nom du fichier) pour augmenter les vitesses de transfert (inférieur = plus rapide), mais un nombre trop petit peut entraîner un manque de fiabilité en raison des conditions du réseau local, des VPN, etc. (la valeur par défaut est 500) . Cela modifiera le délai entre les paquets envoyés.
- Vous pouvez également ajouter un numéro par la suite . Cela modifiera la taille du paquet, et un nombre plus élevé ici a des effets similaires à ceux d'un nombre inférieur dans l'argument précédent.
- Vous pouvez exécuter un assistant vous-même, comme le suggère l'argument du mode "helper". Cet assistant doit simplement être exécuté sur un serveur accessible depuis tout le Web (un VPS bon marché fera certainement l'affaire).
- Les assistants n'ont pas besoin d'être exécutés sur un serveur public, ils fonctionnent également en LAN, mais de cette façon, seuls les ordinateurs du même LAN pourront les utiliser.
- Vous pouvez autoriser le streaming (par exemple lorsque vous souhaitez transmettre depuis /dev/stdin) en définissant la variable d'environnement
QFT_STREAM
. - Pour utiliser les alias qfts et qftr sous Linux ou Mac, exécutez (en remplaçant
(shell)
par le nom de votre shell, généralement bash ou zsh) :
echo ' alias qftr="qft receiver tudbut.de:4277" ' >> ~ /.(shell)rc
echo ' alias qfts="qft sender tudbut.de:4277" ' >> ~ /.(shell)rc
source ~ /.(shell)rc
Des trucs sympas
- Les fichiers sont transférés via UDP, mais qft a mis en place des mesures de fiabilité supplémentaires pour éviter les fichiers cassés.
- Connexion Internet peu fiable ? Aucun problème! QFT mettra simplement la transmission en pause jusqu'à ce que la connexion soit rétablie ! Ça ne marche pas ? Consultez la section « Reprendre un transfert complètement arrêté » !
- Saviez-vous que vous pouvez mettre en veille prolongée ou suspendre votre ordinateur pendant le transfert et qu'il continuera là où il s'était arrêté, même lorsqu'un seul côté est suspendu ? (À moins que votre routeur n'ait bloqué le port, lisez dans ce cas la section "Reprendre un transfert complètement arrêté")
- QFT peut résister à des charges lourdes
météo conditions du réseau : un ping de 1 000 ms est aussi rapide qu'un ping de 10 ms, des taux de perte/réorganisation de paquets supérieurs à 10 % sont tolérés (mais peuvent ralentir la vitesse, en particulier lorsque le ping est élevé). - Il est écrit en Rust 100% pur .
Reprendre un transfert complètement arrêté
Vous n'en aurez probablement pas besoin à moins que le transfert ne soit complètement interrompu en raison d'une TRÈS longue pause ou d'un redémarrage de l'ordinateur, mais si vous le faites :
Arrêtez qft aux deux extrémités et redémarrez-le avec le paramètre [skip] en place (si vous n'avez pas spécifié de débit auparavant, la valeur par défaut est 256). Il ignorera ces octets et continuera là où vous avez spécifié.
Dépannage
Il est écrit Connecting...
mais ne se connecte pas
L'une de vos extrémités ne s'est pas correctement connectée à l'assistant. Arrêtez le transfert aux deux extrémités et réessayez.
Croco
Beaucoup de gens ont mentionné à quel point cela ressemble à un crocodile. Ce n'est pas le cas, car croc utilise un relais par lequel toutes vos données sont envoyées. Il s'agit d'un goulot d'étranglement et cela signifie également que les administrateurs relais sont responsables du contenu envoyé. Le relais met également en mémoire tampon beaucoup de données, ce qui signifie que sa RAM peut se remplir si la connexion de l'expéditeur est beaucoup plus rapide que celle du destinataire. Le fait que Croc soit étiqueté « peer-to-peer » est au mieux trompeur car il utilise rarement les capacités P2P (il nécessite un transfert de port pour faire du P2P, ce qui est rarement fait). Lisez la section précédente sur les mythes du P2P si vous pensez que Croc est toujours peer-to-peer.
XKCD pertinent
FAQ
Qu'est-ce qu'une aide ?
Comme expliqué ci-dessus, il sert à établir la connexion entre les deux partenaires.
Pourquoi une aide est-elle nécessaire ?
Votre routeur utilise un outil appelé Traduction d' adresse réseau . C’est nécessaire car sinon, il y aurait beaucoup trop d’adresses IP utilisées et Internet cesserait de fonctionner pendant les périodes de pointe. Ce NAT pose également problème, car il constitue une couche entre votre PC et l’Internet ouvert. Lorsqu'il y a une nouvelle connexion entrante, le NAT ne saura pas vers quel PC de votre réseau local transférer la connexion, la connexion est donc simplement rejetée. Tout logiciel Peer-to-Peer a donc besoin d'un serveur d'assistance (également appelé serveur "STUN") sur lequel les deux pairs demanderont l'adresse IP et le port de l'autre. Les deux pairs peuvent ensuite s’envoyer un ensemble de connexions sortantes. Si tout se passe bien, les deux pairs ont envoyé une connexion sortante au bon moment, ce qui fait que les deux NAT pensent qu'il s'agit de connexions sortantes, alors qu'en réalité, il s'agit d'une sorte de combinaison de connexions entrantes et sortantes.
TL;DR : La mise en réseau P2P est impossible sans un serveur d'assistance, à cause des routeurs. Autrement, une redirection de port serait nécessaire, ce qui peut être difficile à mettre en place.
Comment créer un assistant public/privé ?
Lisez le deuxième point de la section Trucs et Astuces.