Plugin:Jabber/ru/Передача файлов: Difference between revisions

From Miranda NG
Jump to navigation Jump to search
No edit summary
 
(13 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Languages/Jabber FT}}
{{PageLang|ru}}__TOC__
 
== Теория ==
== Теория ==
В Jabber существует 4 «способа» передачи файлов.
В Jabber существует 4 «способа» передачи файлов.


=== In-Band Bytestreams (IBB) ===
=== In-Band Bytestreams (IBB) ===
Файл передается в основном XML-потоке, как простые сообщения, но со специальным флагом, чтобы клиент принимающей стороны понимал, что это часть файла, а не передаваемый текст (XEP'ы [http://xmpp.org/extensions/xep-0047.html 47] + [http://xmpp.org/extensions/xep-0095.html 95]/[http://xmpp.org/extensions/xep-0096.html 96]). Принцип работы — такой же, как и у плагина {{Plugin/ru|FileAsMessage}}.
Файл передается в основном XML-потоке, как простые сообщения, но со специальным флагом, чтобы клиент принимающей стороны понимал, что это часть файла, а не передаваемый текст (XEP'ы {{XEP|0047}} + {{XEP|0095}}/{{XEP|0096}}). Принцип работы — такой же, как и у плагина {{Plugin|FileAsMessage}}.
; Преимущества
; Преимущества
* самый простой и надежный вариант, работающий в 99% случаев (с условием, что оба клиента поддерживают этот вариант передачи)
* Самый простой и надежный вариант, работающий в 99% случаев (с условием, что оба клиента поддерживают этот вариант передачи).
; Недостатки
; Недостатки
* так как в этом случае бинарные данные передаются как текст, данные жмутся в base64, из-за чего трафик увеличится в среднем на 33%
* Так как в этом случае бинарные данные передаются как текст, данные жмутся в base64, из-за чего трафик увеличится в среднем на 33%.
* самый медленный
* Самый медленный.
* при передаче файлов возникают проблемы c обменом сообщениями с контактом, с которым происходит файлообмен.
* При передаче файлов возникают проблемы c обменом сообщениями с контактом, с которым происходит файлообмен.


=== Через прокси ===
=== Через прокси ===
Файл передаётся через прокси jabber-сервера. Это — не обычный socks-прокси, а специально заточенный для передачи файлов джаббер-сервис! Этот способ подойдёт, если нет возможности прямого соединения с контактом (передающий находится за непрозрачным NAT, прокси) и у передающего правильно указан адрес данного сервиса (который может быть как на сервере передающего, так и на других серверах). Работает следующим образом: передающий подсоединяется к этому серверу (через изменённый протокол socks5), запрашивает сервер на инициализацию передачи файла. Сервер выделяет IP или id сессии, после чего передающий отправляет этот адрес принимающему. Принимающий подсоединяется к серверу и передает id. Если id совпадают, инициализируется передача файла (XEP'ы [http://xmpp.org/extensions/xep-0065.html 65] + [http://xmpp.org/extensions/xep-0095.html 95]/[http://xmpp.org/extensions/xep-0096.html 96]).
Файл передаётся через прокси Jabber-сервера. Это — не обычный socks-прокси, а специально заточенный для передачи файлов джаббер-сервис! Этот способ подойдёт, если нет возможности прямого соединения с контактом (передающий находится за непрозрачным NAT, прокси) и у передающего правильно указан адрес данного сервиса (который может быть как на сервере передающего, так и на других серверах). Работает следующим образом: передающий подсоединяется к этому серверу (через изменённый протокол SOCKS5), запрашивает сервер на инициализацию передачи файла. Сервер выделяет IP или ID сессии, после чего передающий отправляет этот адрес принимающему. Принимающий подсоединяется к серверу и передает ID. Если ID совпадают, инициализируется передача файла (XEP'ы {{{XEP|0065}}} + {{{XEP|0095}}}/{{{XEP|0096}}}).
; Преимущества
; Преимущества
* помогает, если отправляющая сторона сидит за непрозрачным NAT или прокси
* Помогает, если отправляющая сторона сидит за непрозрачным NAT или прокси.
* скорость передачи данных выше, чем у '''IBB'''
* Скорость передачи данных выше, чем у '''IBB'''.
* отсутствуют недостатки, присущие '''IBB'''
* Отсутствуют недостатки, присущие '''IBB'''.
; Недостатки
; Недостатки
* не все серверы поддерживают эту возможность (хотя иногда встречаются серверы с таким сервисом, открытым для незарегистрированных на этом сервере пользователей)
* Не все серверы поддерживают эту возможность (хотя иногда встречаются серверы с таким сервисом, открытым для незарегистрированных на этом сервере пользователей).
* скорость в большинстве случае ниже, чем у '''DC'''.
* Скорость в большинстве случае ниже, чем у '''DC'''.


=== Direct Connect (DC) ===
=== Direct Connect (DC) ===
Устанавливается прямое соединение передающего с принимающим (XEP'ы [http://xmpp.org/extensions/xep-0065.html 65] + [http://xmpp.org/extensions/xep-0095.html 95]/[http://xmpp.org/extensions/xep-0096.html 96]).
Устанавливается прямое соединение передающего с принимающим (XEP'ы {{{XEP|0065}}} + {{{XEP|0095}}}/{{{XEP|0096}}}).
; Преимущества
; Преимущества
* самый быстрый и надёжный способ передачи файлов
* Самый быстрый и надёжный способ передачи файлов.
; Недостатки
; Недостатки
* не работает, если передающий подключен к интернету через непрозрачный NAT или прокси.
* Не работает, если передающий подключен к интернету через непрозрачный NAT или прокси.


=== Out of Band Data (OOB) ===
=== Out of Band Data (OOB) ===
Упрощённо это можно представить так: клиент передающей стороны открывает у себя HTTP-сервер и даёт HTTP-ссылку другому клиенту, тот подключается и скачивает файл (XEP [http://xmpp.org/extensions/xep-0066.html 66]). Преимущества и недостатки аналогичны '''D'''irect '''C'''onnect'у.
Упрощённо это можно представить так: клиент передающей стороны открывает у себя HTTP-сервер и даёт HTTP-ссылку другому клиенту, тот подключается и скачивает файл (XEP [https://xmpp.org/extensions/xep-0066.html 66]). Преимущества и недостатки аналогичны '''D'''irect '''C'''onnect'у.
 


== Практика ==
== Практика ==
Line 37: Line 39:


=== Приём файлов ===
=== Приём файлов ===
Чтобы принимать файлы способом, отличным от '''IBB''', необходимо снять галку «Разрешать передачу файлов только внутри потока» (Accept only in band incoming filetransfers) в настройках вашего jabber-аккаунта (рис. 1).
Чтобы принимать файлы способом, отличным от '''IBB''', необходимо снять галку ''«Разрешать передачу файлов только внутри потока»'' (Accept only in band incoming filetransfers) в настройках вашей учётной записи Jabber (рис. 1).


=== Передача файлов ===
=== Передача файлов ===
Line 43: Line 45:


==== In-Band Bytestreams (IBB) ====
==== In-Band Bytestreams (IBB) ====
Работает всегда и везде. Единственное условие — клиент принимающего должен поддерживать данный способ передачи файла, ибо многие клиенты его режут. Для использования этого способа нужно снять все 3 галки в настройках джаббера (рис. 2). (Для гиков: Миранда умеет принимать файлы по IBB и с использованием <tt>message</tt>, и с использованием <tt>iq</tt>, но посылает только через <tt>message</tt>.)
Работает всегда и везде. Единственное условие — клиент принимающего должен поддерживать данный способ передачи файла, ибо многие клиенты его режут. Для использования этого способа нужно снять все 3 галки в настройках джаббера (рис. 2).


[[File:Jabber File Transfer 03.png|200px|thumb|Рис. 3]]
[[File:Jabber File Transfer 03.png|200px|thumb|Рис. 3]]
==== Через прокси ====
==== Через прокси ====
Узнать, имеет ли ваш сервер прокси для передачи файлов, и, если имеет, то узнать его адрес, можно следующим образом: зайти в Просмотр служб (Service Discovery) jabber-аккаунта и найти сервис с identity «SOCKS5 Bytestreams» или «Proxy bytestreams» (обычно это <tt>proxy.servername.domain</tt>, например, для сервера jabber.ru это <tt>proxy.jabber.ru</tt>). Ставим соответствующую галку в настройках и указываем адрес нашего прокси (рис. 3).
Узнать, имеет ли ваш сервер прокси для передачи файлов, и, если имеет, то узнать его адрес, можно следующим образом: зайти в ''Просмотр служб'' (Service Discovery) учётной записи Jabber и найти сервис с identity «SOCKS5 Bytestreams» или «Proxy bytestreams» (обычно это <tt>proxy.servername.domain</tt>, например, для сервера jabber.ru это <tt>proxy.jabber.ru</tt>). Ставим соответствующую галку в настройках и указываем адрес нашего прокси (рис. 3).


[[File:Jabber File Transfer 04.png|200px|thumb|Рис. 4]]
[[File:Jabber File Transfer 04.png|200px|thumb|Рис. 4]]
Line 56: Line 58:
* Прямое соединение вашего компьютера с интернетом (прямой канал от провайдера с реальным («белым») IP-адресом)
* Прямое соединение вашего компьютера с интернетом (прямой канал от провайдера с реальным («белым») IP-адресом)
* Если у вас прямой канал от провайдера с реальным («белым») IP-адресом, но установлен роутер, то роутер должен быть:
* Если у вас прямой канал от провайдера с реальным («белым») IP-адресом, но установлен роутер, то роутер должен быть:
** а) или с поддержкой и активированным UPnP, а в настройках сети Миранды для jabber-протокола должна стоять галка «Включить перенаправление портов UPnP» (Enable UPnP port mapping)
** а) или с поддержкой и активированным UPnP, а в настройках сети Миранды для протокола Jabber должна стоять галка ''«Включить перенаправление портов UPnP»'' (Enable UPnP port mapping)
** б) или сконфигурирован для приёма на определённый диапазон адресов, совпадающий с настройками сети Миранды для jabber-протокола (рис. 4).
** б) или сконфигурирован для приёма на определённый диапазон адресов, совпадающий с настройками сети Миранды для протокола Jabber (рис. 4).


Если вы подключены к интернету через прозрачный NAT, то нужно в настройках jabber прописать ваш реальный («белый») IP-адрес (рис. 5).
Если вы подключены к интернету через прозрачный NAT, то нужно в настройках Jabber прописать ваш реальный («белый») IP-адрес (рис. 5).


Если выставлены галки на передаче файлов и через '''DC''', и через '''proxy''', то передача файла пойдет через прокси.
Если выставлены галки на передаче файлов и через '''DC''', и через '''proxy''', то передача файла пойдет через прокси.
Line 65: Line 67:
==== Out of Band Data (OOB) ====
==== Out of Band Data (OOB) ====
Необходимы те же условия, что и для '''DC'''. Миранда сама будет пробовать данный способ, никакой дополнительной настройки не требуется. Но так как приоритет '''OOB''' низок, используется он довольно редко.
Необходимы те же условия, что и для '''DC'''. Миранда сама будет пробовать данный способ, никакой дополнительной настройки не требуется. Но так как приоритет '''OOB''' низок, используется он довольно редко.


== Информация для продвинутых пользователей ==
== Информация для продвинутых пользователей ==
Line 78: Line 81:


=== Приоритеты ===
=== Приоритеты ===
(при условии, что в Миранде настроены все 3 пункта в поле '''File Transfers''', наверху — самый приоритетный):
(При условии, что в Миранде настроены все 3 пункта в поле «File Transfers», наверху — самый приоритетный):
* '''IBB''' (если у принимающего стоит галка IBB only)
* '''IBB''' (если у принимающего стоит галка IBB only)
* '''Proxy'''
* '''Proxy'''
* '''DC'''
* '''DC'''
* '''OOB'''
* '''OOB'''
* '''IBB''' (только если в настройках Jabber не выставлено ни одной из трех галок в секции File Transfers)
* '''IBB''' (только если в настройках Jabber не выставлено ни одной из трех галок в секции «File Transfers»)
'''Proxy''' имеет приоритет перед '''DC''' в целях приватности.
'''Proxy''' имеет приоритет перед '''DC''' в целях приватности.


Line 90: Line 93:


'''SI/FT''' (XEP'ы 95/96) в теории могут быть реализованы друг без друга, но по сути они идут вместе и существует проверка на их наличие в коде.
'''SI/FT''' (XEP'ы 95/96) в теории могут быть реализованы друг без друга, но по сути они идут вместе и существует проверка на их наличие в коде.
Миранда умеет принимать файлы по '''IBB''' с использованием и <tt>message</tt>, и <tt>iq</tt>, но посылает только через <tt>message</tt>.


Проблемы при передаче файлов через '''IBB''' обусловлены тем, что все данные отправляются в цикле в общем потоке, но на сервере есть лимит на количество kB/s от клиента. И, так как нет возможности проверить, принялись ли уже данные от клиента, банально забивается очередь. Все сообщения приходят и уходят, но из-за очереди и лимитов это происходит уже после появления окошка о таймауте.
Проблемы при передаче файлов через '''IBB''' обусловлены тем, что все данные отправляются в цикле в общем потоке, но на сервере есть лимит на количество kB/s от клиента. И, так как нет возможности проверить, принялись ли уже данные от клиента, банально забивается очередь. Все сообщения приходят и уходят, но из-за очереди и лимитов это происходит уже после появления окошка о таймауте.
[[Category:Руководства]]

Latest revision as of 17:23, 6 August 2017

Теория

В Jabber существует 4 «способа» передачи файлов.

In-Band Bytestreams (IBB)

Файл передается в основном XML-потоке, как простые сообщения, но со специальным флагом, чтобы клиент принимающей стороны понимал, что это часть файла, а не передаваемый текст (XEP'ы 0047 + 0095/0096). Принцип работы — такой же, как и у плагина FileAsMessage.

Преимущества
  • Самый простой и надежный вариант, работающий в 99% случаев (с условием, что оба клиента поддерживают этот вариант передачи).
Недостатки
  • Так как в этом случае бинарные данные передаются как текст, данные жмутся в base64, из-за чего трафик увеличится в среднем на 33%.
  • Самый медленный.
  • При передаче файлов возникают проблемы c обменом сообщениями с контактом, с которым происходит файлообмен.

Через прокси

Файл передаётся через прокси Jabber-сервера. Это — не обычный socks-прокси, а специально заточенный для передачи файлов джаббер-сервис! Этот способ подойдёт, если нет возможности прямого соединения с контактом (передающий находится за непрозрачным NAT, прокси) и у передающего правильно указан адрес данного сервиса (который может быть как на сервере передающего, так и на других серверах). Работает следующим образом: передающий подсоединяется к этому серверу (через изменённый протокол SOCKS5), запрашивает сервер на инициализацию передачи файла. Сервер выделяет IP или ID сессии, после чего передающий отправляет этот адрес принимающему. Принимающий подсоединяется к серверу и передает ID. Если ID совпадают, инициализируется передача файла (XEP'ы 0065 + 0095/0096).

Преимущества
  • Помогает, если отправляющая сторона сидит за непрозрачным NAT или прокси.
  • Скорость передачи данных выше, чем у IBB.
  • Отсутствуют недостатки, присущие IBB.
Недостатки
  • Не все серверы поддерживают эту возможность (хотя иногда встречаются серверы с таким сервисом, открытым для незарегистрированных на этом сервере пользователей).
  • Скорость в большинстве случае ниже, чем у DC.

Direct Connect (DC)

Устанавливается прямое соединение передающего с принимающим (XEP'ы 0065 + 0095/0096).

Преимущества
  • Самый быстрый и надёжный способ передачи файлов.
Недостатки
  • Не работает, если передающий подключен к интернету через непрозрачный NAT или прокси.

Out of Band Data (OOB)

Упрощённо это можно представить так: клиент передающей стороны открывает у себя HTTP-сервер и даёт HTTP-ссылку другому клиенту, тот подключается и скачивает файл (XEP 66). Преимущества и недостатки аналогичны Direct Connect'у.


Практика

Рис. 1

Теперь рассмотрим возможности использования и настройки для каждого из способов.

Приём файлов

Чтобы принимать файлы способом, отличным от IBB, необходимо снять галку «Разрешать передачу файлов только внутри потока» (Accept only in band incoming filetransfers) в настройках вашей учётной записи Jabber (рис. 1).

Передача файлов

Рис. 2

In-Band Bytestreams (IBB)

Работает всегда и везде. Единственное условие — клиент принимающего должен поддерживать данный способ передачи файла, ибо многие клиенты его режут. Для использования этого способа нужно снять все 3 галки в настройках джаббера (рис. 2).

Рис. 3

Через прокси

Узнать, имеет ли ваш сервер прокси для передачи файлов, и, если имеет, то узнать его адрес, можно следующим образом: зайти в Просмотр служб (Service Discovery) учётной записи Jabber и найти сервис с identity «SOCKS5 Bytestreams» или «Proxy bytestreams» (обычно это proxy.servername.domain, например, для сервера jabber.ru это proxy.jabber.ru). Ставим соответствующую галку в настройках и указываем адрес нашего прокси (рис. 3).

Рис. 4
Рис. 5

Direct Connect (DC)

Для успешной установки прямого соединения необходимо одно из следующих условий:

  • Прямое соединение вашего компьютера с интернетом (прямой канал от провайдера с реальным («белым») IP-адресом)
  • Если у вас прямой канал от провайдера с реальным («белым») IP-адресом, но установлен роутер, то роутер должен быть:
    • а) или с поддержкой и активированным UPnP, а в настройках сети Миранды для протокола Jabber должна стоять галка «Включить перенаправление портов UPnP» (Enable UPnP port mapping)
    • б) или сконфигурирован для приёма на определённый диапазон адресов, совпадающий с настройками сети Миранды для протокола Jabber (рис. 4).

Если вы подключены к интернету через прозрачный NAT, то нужно в настройках Jabber прописать ваш реальный («белый») IP-адрес (рис. 5).

Если выставлены галки на передаче файлов и через DC, и через proxy, то передача файла пойдет через прокси.

Out of Band Data (OOB)

Необходимы те же условия, что и для DC. Миранда сама будет пробовать данный способ, никакой дополнительной настройки не требуется. Но так как приоритет OOB низок, используется он довольно редко.


Информация для продвинутых пользователей

Выбор способа передачи файлов

Как происходит выбор способа передачи файлов:

  • Получаем капсы от клиента.
  • Если умеет SI/FT (XEP 95/96), то отправляем список транспортов, через которые мы можем отправить файл. По умолчанию в списке всегда присутствует 47 XEP, если стоят галки директ-коннекта (BsDirect) или прокси (BsProxyManual), то еще дополнительно добавляем в список 65 XEP.
  • Клиент принимает этот список, решает какой транспорт для передачи файла выбрать. Если стоит галка IBB only, то выбирает 47 XEP, если галка не стоит, то выбирает 65 XEP.
  • После выбора получателем 47 XEP'а отправитель высылает файл, при выборе 65 XEP'а отправитель высылает список из одного IP-адреса (только direct-connect) или двух IP-адресов (direct-connect и proxy)
  • Получатель к этим IP коннектится (проверяет, куда удалось) и отправляет выбранный IP отправителю, отправитель передаёт файл.
  • Если же клиент не умеет SI/FT, то проверяем умеет ли OOB (XEP 66), если умеет OOB, то отправляем ссылку и через HTTP у нас забирают файл.
  • Если же не умеет ни SI/FT, ни OOB, то выдается ошибка передачи файла.

Приоритеты

(При условии, что в Миранде настроены все 3 пункта в поле «File Transfers», наверху — самый приоритетный):

  • IBB (если у принимающего стоит галка IBB only)
  • Proxy
  • DC
  • OOB
  • IBB (только если в настройках Jabber не выставлено ни одной из трех галок в секции «File Transfers»)

Proxy имеет приоритет перед DC в целях приватности.

Прочее

Proxy и DC описаны одним 65-м XEP'ом. Протоколы там очень похожие, разница только в том, что в первом случае идет коннект до прокси, а во втором — до отправителя.

SI/FT (XEP'ы 95/96) в теории могут быть реализованы друг без друга, но по сути они идут вместе и существует проверка на их наличие в коде.

Миранда умеет принимать файлы по IBB с использованием и message, и iq, но посылает только через message.

Проблемы при передаче файлов через IBB обусловлены тем, что все данные отправляются в цикле в общем потоке, но на сервере есть лимит на количество kB/s от клиента. И, так как нет возможности проверить, принялись ли уже данные от клиента, банально забивается очередь. Все сообщения приходят и уходят, но из-за очереди и лимитов это происходит уже после появления окошка о таймауте.