Кинь мне файл по Jabber...

Долгое время я брался за решение проблемы передачи файлов по сети jabber и получал неоднозначные результаты. Проанализировав их, вот что получилось:

Передача возможна, если вы:

1) в одной подсети,

2) в разных подсетях с серыми адресами, используя прокси с серым адресом,

3) в разных подсетях с белыми адресами, используя прокси с белым адресом.

 

Передача невозможна, если вы:

4) за NAT/PAT,

5) в разных подсетях, не используя прокси, или находясь в серой и белой подсетях.

 

В некоторых случаях поможет STUN-сервер (если имеется только NAT, но не PAT), а во всех остальных передача невозможна, к сожалению.

Что такое NAT? Это преобразование одного адреса в другой. Представим, что с одной стороны (в сторону интернета) у нас есть 3 адреса и с другой (в сторону локальной сети LAN) тоже 3. Тогда каждый адрес с одной стороны можно заменить адресом с другой. Это чистый NAT (Network Address Translation).

А что делать, если в сторону интернета имеется только 1 адрес, а в локальной сети их более, чем 1? В этом случае каждому адресу локальной сети ставим в соответствие номер порта и далее заменяем локальный адрес на единственный глобальный (в инет), добавив номер порта. Таким образом, 1 внешний (в интернет) адрес логически "делится" на несколько с помощью номеров портов, что и является PAT.

Но всем нам хорошо известно, что ни один компьютер в сети, имеющий 1 адрес, не ограничивается использованием только 1 порта. В самом деле, выходя в интернет для просмотра страниц, используется порт 80, для ftp 20 и 21, для почты 25, 110, 485 и т.д. В лучшем случае, на 1 адрес (комп) нужно выделить 10 портов. Но самих-то адресов тоже несколько! Арифметика говорит, что всего для PAT нам потребуется M = N(адресов в сети) * n(портов для каждого адреса/компа).