qft
QFT — небольшое приложение для быстрой (и очень надежной) одноранговой передачи файлов UDP.
Если друг послал тебя сюда...
...посмотрите раздел «Релизы» на боковой панели. Вы должны увидеть ссылку под названием vX.YZ. Нажмите на нее, а затем выберите файл, подходящий для вашей ОС: qft
для Linux, qft-mac
для Mac и qft.exe
для Windows. Загрузите этот файл, сделайте его исполняемым в случае Linux или Mac, а затем следуйте инструкциям вашего друга о том, как получить файл, который он хотел вам отправить.
Использование:
- Найдите общедоступный помощник по QFT (например, tudbut.de:4277).
- На компьютере отправителя введите
qft sender <helper> <shared-phrase> <filename>
. - На ПК-получателе введите
qft receiver <helper> <shared-phrase> <filename>
. - Оба компьютера должны начать передачу данных через некоторое время. Если нет, попробуйте еще раз.
ИЛИ
- На обоих компьютерах введите
qft gui
. - Выберите режим
- Выберите файл для отправки и файл для сохранения.
- Обновите общие фразы и битрейт, чтобы они соответствовали
- Нажмите «Пуск»
Аргументы:
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]
Что делают помощники
Помощники НЕ являются ретрансляторами данных, они используются только для УСТАНОВЛЕНИЯ соединения.
Есть помощники, которые помогут с пробиванием отверстий.
- P1 подключается* к помощнику
- P1 отправляет фразу помощнику
- P1 ждет ответа
- Проходит некоторое время
- P2 подключается* к тому же помощнику
- P2 отправляет фразу помощнику
- P2 получает публичный IP-адрес и порт P1.
- P1 получает публичный IP-адрес и порт P2.
- P1 и P2 отключаются* от помощника
- P1 и P2 запускают цикл (немного упрощенно):
- отправить пакет друг в друга несколько раз
- попытайтесь получить как можно больше пакетов от другого
- если ничего не получено, повторите цикл еще раз
- если он получен, выйти из цикла
- Соединение между P1 и P2 установлено.
*UDP — протокол без установления соединения, рукопожатия отсутствуют. Слово «соединение» используется здесь как индикатор того, что данные будут обмениваться между «подключенными» сторонами. Слово «отключение» используется здесь как индикатор того, что между «ранее подключенными» сторонами обмен данными больше не будет.
Развенчание некоторых мифов о P2P-сетях
- «Настоящий P2P возможен только без NAT» — и мои эксперименты, и Википедия хотели бы сказать пару слов о пробивании дыр. Единственная проблема, которую я обнаружил, - это некоторые немецкие поставщики мобильных данных, но отправка больших файлов по мобильным данным редко является чем-то, что вам хотелось бы делать - и если да, используйте что-то вроде крокодила или волшебной червоточины, которые не являются чисто настоящим P2P. .
- «Крок тоже P2P, почему он существует?» - «Крок» не является одноранговым. «Крок» использует сервер ретрансляции для обмена данными между двумя клиентами (если только у одного из клиентов не настроен переадресация портов, что практически никогда не происходит). Это клиент-сервер-клиент, что на самом деле не является одноранговым. Одноранговая сеть означает, что два клиента отправляют свои данные напрямую друг другу без сервера. «Одноранговые узлы делают часть своих ресурсов, таких как вычислительная мощность, дисковое хранилище или пропускная способность сети, доступной напрямую другим участникам сети без необходимости централизованной координации со стороны серверов или стабильных хостов». - Википедия
Советы и подсказки
- Вы можете добавить число в конец обеих ваших команд (после имени файла), чтобы повысить скорость передачи (ниже = быстрее), но слишком маленькое число может привести к ненадежности из-за условий локальной сети, VPN и т. д. (по умолчанию — 500). . Это изменит задержку между отправленными пакетами.
- После этого вы также можете добавить номер. Это изменит размер пакета, и большее число здесь имеет тот же эффект, что и меньшее в предыдущем аргументе.
- Вы можете запустить помощник самостоятельно, как предполагает аргумент режима «помощник». Этот помощник следует просто запустить на сервере, доступном со всего Интернета (определенно подойдет дешевый VPS).
- Помощники не обязательно должны запускаться на общедоступном сервере, они также работают в локальной сети, но в этом случае их смогут использовать только компьютеры в одной локальной сети.
- Вы можете разрешить потоковую передачу (например, если вы хотите передавать из /dev/stdin), установив переменную среды
QFT_STREAM
. - Чтобы использовать псевдонимы qfts и qftr в Linux или Mac, запустите (заменив
(shell)
именем вашей оболочки, обычно bash или zsh):
echo ' alias qftr="qft receiver tudbut.de:4277" ' >> ~ /.(shell)rc
echo ' alias qfts="qft sender tudbut.de:4277" ' >> ~ /.(shell)rc
source ~ /.(shell)rc
Классная штука
- Файлы передаются по UDP, но в qft предусмотрены дополнительные меры надежности, позволяющие избежать повреждения файлов.
- Ненадежное подключение к Интернету? Без проблем! QFT просто приостановит передачу до тех пор, пока соединение не восстановится! Не работает? Загляните в раздел «Возобновить полностью остановленную передачу»!
- Знаете ли вы, что можете перевести компьютер в спящий режим или приостановить его во время передачи, и он продолжит работу с того места, на котором остановился, даже если приостановлена только одна сторона? (Если ваш маршрутизатор не заблокировал порт, в этом случае прочтите раздел «Возобновить полностью остановленную передачу»).
- QFT выдерживает тяжелые
погода условия сети: пинг 1000 мс такой же быстрый, как пинг 10 мс, допускается потеря/переупорядочение пакетов более 10 % (но может замедляться скорость, особенно при высоком пинге). - Он написан на 100% чистом Rust .
Возобновить полностью остановленную передачу
Скорее всего, вам это не понадобится, если передача полностью не прервется из-за ОЧЕНЬ долгой паузы или перезагрузки компьютера, но если вы это сделаете:
Остановите qft на обоих концах и запустите его снова с параметром [skip] (если вы ранее не указали битрейт, значение по умолчанию — 256). Он пропустит эти байты и продолжит работу с указанного вами места.
Поиск неисправностей
Пишет Connecting...
но не подключается
Один из ваших концов неправильно подсоединился к помощнику. Остановите передачу на обоих концах и повторите попытку.
Крок
Многие люди упоминали, что это похоже на крокодила. Это не так, потому что Croc использует реле, через которое передаются все ваши данные. Это узкое место, а также означает, что администраторы ретранслятора несут ответственность за отправляемый контент. Реле также буферизует большой объем данных, а это означает, что его оперативная память может переполниться, если соединение отправителя намного быстрее, чем соединение получателя. Пометка Croc как «одноранговая» в лучшем случае вводит в заблуждение, поскольку он редко использует возможности P2P (для P2P требуется переадресация портов, что делается редко). Прочтите предыдущий раздел о мифах о P2P, если вы считаете, что «Крок» всегда является одноранговым.
Соответствующий XKCD
Часто задаваемые вопросы
Что такое помощник?
Как объяснялось выше, он используется для установления связи между двумя партнерами.
Зачем нужен помощник?
Ваш маршрутизатор использует функцию , называемую трансляцией сетевых адресов . Это необходимо, потому что в противном случае будет использоваться слишком много IP-адресов, и Интернет перестанет работать в часы пик. Однако этот NAT также является проблемой, поскольку он представляет собой прослойку между вашим компьютером и открытым Интернетом. При появлении нового входящего соединения NAT не будет знать, на какой компьютер в вашей локальной сети перенаправить соединение, поэтому соединение просто отклоняется. Поэтому любому одноранговому программному обеспечению необходим вспомогательный сервер (также называемый сервером «STUN»), у которого оба узла будут запрашивать IP-адрес и порт другого. Оба узла могут затем отправить друг другу несколько исходящих соединений. Если все идет хорошо, оба узла отправили исходящие соединения в правильное время, в результате чего оба NAT думают , что они являются исходящими соединениями, хотя на самом деле они представляют собой своего рода комбинацию входящих и исходящих соединений.
TL;DR: Работа в сети P2P невозможна без вспомогательного сервера из-за маршрутизаторов. В противном случае потребуется переадресация портов, которую может быть сложно настроить.
Как сделать публичный/частный помощник?
Прочтите второй пункт в разделе «Советы и рекомендации».