qft
QFT es una pequeña aplicación para transferencias de archivos UDP de igual a igual rápidas (y realmente confiables).
Si un amigo te envió aquí...
...mira la sección "Lanzamientos" en la barra lateral. Debería ver un enlace titulado vX.YZ. Haga clic en él y luego elija el archivo correcto para su sistema operativo: qft
para Linux, qft-mac
para Mac y qft.exe
para Windows. Descargue este archivo, hágalo ejecutable en el caso de Linux o Mac y luego siga las instrucciones de su amigo sobre cómo recibir el archivo que quería enviarle.
Uso:
- Encuentre un ayudante QFT público (por ejemplo, tudbut.de:4277)
- En la PC del remitente, ingrese
qft sender <helper> <shared-phrase> <filename>
. - En la PC del receptor, ingrese
qft receiver <helper> <shared-phrase> <filename>
. - Ambas PC deberían comenzar a transferir después de un momento. Si no es así, inténtelo de nuevo.
O
- En ambas PC, ingrese
qft gui
. - Seleccionar modo
- Seleccione el archivo para enviar y el archivo para guardar
- Actualice las frases compartidas y la tasa de bits para que coincidan
- Haga clic en iniciar
Argumentos:
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]
¿Qué hacen los ayudantes?
Los ayudantes NO son retransmisores de datos, solo se utilizan para ESTABLECER la conexión.
Los ayudantes están ahí para ayudar con la perforación.
- P1 se conecta* al ayudante
- J1 envía la frase al ayudante
- P1 espera una respuesta
- Pasa algo de tiempo
- P2 se conecta* al mismo ayudante
- J2 envía la frase al ayudante.
- P2 obtiene la IP pública y el puerto de P1
- P1 obtiene la IP pública y el puerto de P2
- P1 y P2 se desconectan* del ayudante
- P1 y P2 inician un bucle (ligeramente simplificado):
- dispararse un paquete entre sí varias veces
- intenta recibir tantos paquetes del otro
- si no se recibe ninguno, vuelva a realizar el bucle
- si se recibe uno, salga del bucle
- Se establece la conexión entre P1 y P2.
*UDP es un protocolo sin conexión, no hay apretones de manos. La palabra "conexión" se utiliza aquí como indicador de que los datos se intercambiarán entre las partes "conectadas". La palabra "desconectar" se utiliza aquí como indicador de que no se intercambiarán más datos entre las partes "previamente conectadas".
Desmentiendo algunos mitos sobre las redes P2P
- "El verdadero P2P sólo es posible sin una NAT": tanto a mis experimentos como a Wikipedia les gustaría hablar sobre la perforación. El único problema que he encontrado son algunos proveedores de datos móviles alemanes, pero enviar archivos grandes a través de datos móviles rara vez es algo que quieras hacer, y si es así, usa algo como croc o the magic wormhole, que no son puramente P2P. .
- "Croc también es P2P, ¿por qué existe esto?" - Croc no es Peer-to-Peer. Croc utiliza un servidor de retransmisión para intercambiar datos entre los dos clientes (a menos que uno de los clientes tenga configurado un reenvío de puertos, lo cual casi nunca es el caso). Eso es Cliente-a-Servidor-a-Cliente, que en realidad no es Peer-to-Peer. Peer-to-Peer significa que dos clientes se envían sus datos directamente entre sí, sin un servidor. "Los pares ponen una parte de sus recursos, como la potencia de procesamiento, el almacenamiento en disco o el ancho de banda de la red, directamente a disposición de otros participantes de la red, sin la necesidad de una coordinación central por parte de servidores o hosts estables". -Wikipedia
Consejos y trucos
- Puede agregar un número al final de ambos comandos (después del nombre del archivo) para aumentar la velocidad de transferencia (menor = más rápido), pero un número demasiado pequeño puede causar falta de confiabilidad debido a las condiciones de la red local, VPN, etc. (el valor predeterminado es 500). . Esto modificará el retraso entre los paquetes enviados.
- También puedes agregar un número después de eso . Modificará el tamaño del paquete, y un número más alto aquí tiene efectos similares a uno más bajo en el argumento anterior.
- Puede ejecutar un asistente usted mismo, como sugiere el argumento del modo "ayudante". Este asistente simplemente debe ejecutarse en un servidor al que se pueda acceder desde cualquier lugar de la web (un VPS barato definitivamente será suficiente).
- Los ayudantes no tienen que ejecutarse en un servidor público, también funcionan en LAN, pero de esa manera, sólo las computadoras en la misma LAN podrán usarlos.
- Puede permitir la transmisión (por ejemplo, cuando desee transmitir desde /dev/stdin) configurando la variable ambiental
QFT_STREAM
. - Para usar los alias qfts y qftr en Linux o Mac, ejecute (reemplazando
(shell)
con su nombre de shell, generalmente bash o zsh):
echo ' alias qftr="qft receiver tudbut.de:4277" ' >> ~ /.(shell)rc
echo ' alias qfts="qft sender tudbut.de:4277" ' >> ~ /.(shell)rc
source ~ /.(shell)rc
cosas interesantes
- Los archivos se transfieren a través de UDP, pero qft cuenta con medidas de confiabilidad adicionales para evitar archivos rotos.
- ¿Conexión a Internet poco confiable? ¡Ningún problema! ¡QFT simplemente pausará la transmisión hasta que se restablezca la conexión! ¿No funciona? ¡Consulta la sección "Reanudar una transferencia completamente detenida"!
- ¿Sabía que puede hibernar o suspender su computadora mientras se está transfiriendo y continuará donde la dejó, incluso cuando solo un lado esté suspendido? (A menos que su enrutador haya bloqueado el puerto, lea la sección "Reanudar una transferencia completamente detenida" en ese caso)
- QFT puede soportar cargas pesadas
clima Condiciones de red: un ping de 1000 ms es tan rápido como un ping de 10 ms; se toleran tasas de pérdida/reordenación de paquetes superiores al 10 % (pero pueden reducir la velocidad, especialmente cuando el ping es alto). - Está escrito en Rust 100% puro .
Reanudar una transferencia completamente detenida
Lo más probable es que no necesites esto a menos que la transferencia finalice por completo debido a una pausa MUY larga o a un reinicio de la computadora, pero si lo haces:
Detenga qft en ambos extremos y reinícielo con el parámetro [skip] implementado (si no especificó una tasa de bits antes, el valor predeterminado es 256). Saltará esos bytes y continuará donde usted especificó.
Solución de problemas
Dice Connecting...
pero no se conecta
Uno de tus extremos no se conectó correctamente con el asistente. Detenga la transferencia en ambos extremos y vuelva a intentarlo.
cocodrilo
Mucha gente ha mencionado que esto se parece al cocodrilo. No lo es, porque croc utiliza un relé por el que se envían todos tus datos. Esto es un cuello de botella y también significa que los administradores de retransmisión son responsables del contenido que se envía. El relé también almacena una gran cantidad de datos, lo que significa que su RAM podría llenarse si la conexión del remitente es mucho más rápida que la del receptor. La etiqueta de Croc como "peer-to-peer" es, en el mejor de los casos, engañosa porque rara vez utiliza las capacidades P2P (requiere un reenvío de puerto para hacer P2P, lo cual rara vez se hace). Lee la sección anterior sobre los mitos del P2P si crees que Croc siempre es peer-to-peer.
XKCD relevante
Preguntas frecuentes
¿Qué es un ayudante?
Como se explicó anteriormente, se utiliza para establecer la conexión entre los dos socios.
¿Por qué se necesita un ayudante?
Su enrutador utiliza algo llamado traducción de direcciones de red . Es necesario porque, de lo contrario, habría demasiadas direcciones IP en uso e Internet dejaría de funcionar durante las horas punta. Sin embargo, esta NAT también es un problema porque es una capa entre su PC y la Internet abierta. Cuando hay una nueva conexión entrante, la NAT no sabrá a qué PC de su LAN reenviar la conexión, por lo que la conexión simplemente se rechaza. Por lo tanto, cualquier software Peer-to-Peer necesita un servidor auxiliar (también llamado servidor "STUN") en el que ambos pares solicitarán la dirección IP y el puerto del otro. Luego, ambos pares pueden enviarse un montón de conexiones salientes entre sí. Si todo va bien, ambos pares han enviado un mensaje saliente en el momento adecuado, lo que hace que ambos NAT piensen que son conexiones salientes, cuando en realidad son una especie de combinación de conexiones entrantes y salientes.
TL;DR: La creación de redes P2P es imposible sin un servidor auxiliar, debido a los enrutadores. De lo contrario, sería necesario reenviar puertos, lo que puede resultar difícil de configurar.
¿Cómo hacer un ayudante público/privado?
Lea el segundo punto de la sección Consejos y trucos.