qft
QFT é um pequeno aplicativo para transferência rápida (e realmente confiável) de arquivos UDP ponto a ponto.
Se um amigo te mandou aqui...
...veja a seção "Lançamentos" na barra lateral. Você deverá ver um link intitulado vX.YZ Clique nele e escolha o arquivo certo para o seu sistema operacional: qft
para Linux, qft-mac
para Mac e qft.exe
para Windows. Baixe este arquivo, torne-o executável no caso de Linux ou Mac e siga as instruções do seu amigo sobre como receber o arquivo que ele deseja enviar para você.
Uso:
- Encontre um auxiliar QFT público (por exemplo tudbut.de:4277)
- No PC remetente, digite
qft sender <helper> <shared-phrase> <filename>
. - No PC receptor, digite
qft receiver <helper> <shared-phrase> <filename>
. - Ambos os PCs devem começar a transferir depois de um tempo. Se não, tente novamente.
OU
- Em ambos os PCs, digite
qft gui
. - Selecione o modo
- Selecione o arquivo para enviar e o arquivo para salvar
- Atualize as frases compartilhadas e a taxa de bits para corresponder
- Clique em 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]
O que os ajudantes fazem
Helpers NÃO são retransmissores de dados, eles são usados apenas para ESTABELECER a conexão.
Ajudantes estão lá para ajudar na perfuração.
- P1 conecta* ao ajudante
- P1 envia a frase para o ajudante
- P1 aguarda resposta
- Algum tempo passa
- P2 conecta* ao mesmo ajudante
- P2 envia a frase para o ajudante
- P2 obtém IP público e porta de P1
- P1 obtém IP público e porta de P2
- P1 e P2 desconectam* do auxiliar
- P1 e P2 iniciam um loop (ligeiramente simplificado):
- disparar um pacote um contra o outro várias vezes
- tente receber o máximo de pacotes do outro
- se nenhum for recebido, faça um loop novamente
- se um for recebido, saia do loop
- A conexão entre P1 e P2 é estabelecida.
*UDP é um protocolo sem conexão, não há handshakes. A palavra “conexão” é usada aqui como um indicador de que os dados serão trocados entre as partes “conectadas”. A palavra "desconectar" é usada aqui como um indicador de que não serão mais trocados dados entre as partes "anteriormente conectadas".
Desmascarando alguns mitos sobre redes P2P
- "O verdadeiro P2P só é possível sem NAT" - Tanto meus experimentos quanto a Wikipedia gostariam de ter uma palavra sobre perfuração. O único problema que encontrei são alguns provedores de dados móveis alemães, mas enviar arquivos grandes por dados móveis raramente é algo que você gostaria de fazer - e se for o caso, use algo como croc ou o buraco de minhoca mágico, que não são P2P puramente verdadeiros .
- "Croc também é P2P, por que isso existe?" - Croc não é ponto a ponto. Croc usa um servidor de retransmissão para trocar dados entre os dois clientes (a menos que um dos clientes tenha uma configuração de encaminhamento de porta, o que quase nunca é o caso). Isso é cliente-servidor-para-cliente, que não é realmente ponto-a-ponto. Peer-to-Peer significa dois clientes enviando seus dados diretamente um para o outro, sem um servidor. “Os peers disponibilizam uma parte de seus recursos, como poder de processamento, armazenamento em disco ou largura de banda da rede, diretamente para outros participantes da rede, sem a necessidade de coordenação central por servidores ou hosts estáveis”. - Wikipédia
Dicas e truques
- Você pode adicionar um número ao final de ambos os comandos (após o nome do arquivo) para aumentar a velocidade de transferência (menor = mais rápido), mas um número muito pequeno pode causar falta de confiabilidade devido às condições da rede local, VPNs, etc. (o padrão é 500) . Isso modificará o atraso entre os pacotes enviados.
- Você também pode adicionar um número depois disso . Isso modificará o tamanho do pacote, e um número maior aqui terá efeitos semelhantes aos de um número menor no argumento anterior.
- Você mesmo pode executar um auxiliar, como sugere o argumento do modo "auxiliar". Este auxiliar deve simplesmente ser executado em um servidor acessível de toda a web (um VPS barato certamente servirá).
- Os helpers não precisam ser executados em um servidor público, eles funcionam em LAN também, mas dessa forma, apenas computadores na mesma LAN poderão utilizá-los.
- Você pode permitir o streaming (por exemplo, quando deseja transmitir de /dev/stdin) definindo a variável ambiental
QFT_STREAM
. - Para usar aliases qfts e qftr no Linux ou Mac, execute (substituindo
(shell)
pelo nome do seu shell, geralmente 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
Coisas legais
- Os arquivos são transferidos por UDP, mas o qft possui medidas adicionais de confiabilidade para evitar arquivos quebrados.
- Conexão de internet não confiável? Sem problemas! O QFT simplesmente pausará a transmissão até que a conexão seja restabelecida! Não funciona? Confira a seção "Retomar uma transferência totalmente interrompida"!
- Você sabia que pode hibernar ou suspender seu computador durante a transferência e ele continuará de onde parou, mesmo quando apenas um lado estiver suspenso? (A menos que seu roteador tenha bloqueado a porta, leia a seção "Retomar uma transferência totalmente interrompida" nesse caso)
- QFT pode suportar peso
clima condições de rede: o ping de 1000 ms é tão rápido quanto o ping de 10 ms, taxas de perda/reordenação de pacotes superiores a 10% são toleradas (mas podem diminuir a velocidade, especialmente quando o ping é alto). - Está escrito em Rust 100% puro .
Retomar uma transferência totalmente interrompida
Você provavelmente não precisará disso, a menos que a transferência morra completamente devido a uma pausa MUITO longa ou à reinicialização do computador, mas se precisar:
Pare o qft em ambas as extremidades e inicie-o novamente com o parâmetro [skip] em vigor (se você não especificou uma taxa de bits antes, o padrão é 256). Ele irá ignorar esses bytes e continuar onde você especificou.
Solução de problemas
Diz Connecting...
mas não conecta
Uma de suas extremidades não se conectou corretamente ao auxiliar. Pare a transferência nas duas extremidades e tente novamente.
crocodilo
Muitas pessoas mencionaram como isso se parece com o crocodilo. Não é, porque o croc usa um relé pelo qual todos os seus dados são enviados. Isso é um gargalo e também significa que os administradores de retransmissão são responsáveis pelo conteúdo enviado. O relé também armazena muitos dados em buffer, o que significa que sua RAM pode ficar cheia se a conexão do remetente for muito mais rápida que a do destinatário. Croc sendo rotulado como "ponto a ponto" é, na melhor das hipóteses, enganoso porque raramente usa os recursos P2P (requer um encaminhamento de porta para fazer P2P, o que raramente é feito). Leia a seção anterior sobre os mitos do P2P se você acha que o Croc é sempre ponto a ponto.
XKCD relevante
Perguntas frequentes
O que é um ajudante?
Conforme explicado acima, é utilizado para estabelecer a ligação entre os dois parceiros.
Por que é necessário um ajudante?
Seu roteador usa uma coisa chamada Tradução de Endereço de Rede . É necessário porque, caso contrário, haveria muitos endereços IP em uso e a Internet deixaria de funcionar durante horários de pico. Este NAT também é um problema, porque é uma camada entre o seu PC e a Internet aberta. Quando há uma nova conexão de entrada, o NAT não saberá para qual PC da sua LAN encaminhar a conexão, então a conexão será simplesmente rejeitada. Qualquer software ponto a ponto, portanto, precisa de um servidor auxiliar (também chamado de servidor "STUN"), no qual ambos os pontos solicitarão o endereço IP e a porta do outro. Ambos os pares podem então enviar várias conexões de saída entre si. Se tudo correr bem, ambos os pares enviaram uma mensagem de saída no momento certo, fazendo com que ambos os NATs pensem que são conexões de saída, quando na verdade são uma espécie de combinação de conexões de entrada e saída.
DR: A rede P2P é impossível sem um servidor auxiliar, por causa dos roteadores. Caso contrário, o encaminhamento de porta seria necessário, o que pode ser difícil de configurar.
Como fazer um ajudante público/privado?
Leia o segundo ponto na seção Dicas e Truques.