Подтвердить что ты не робот

Если брандмауэры не принимают входящие соединения по умолчанию, как работают сети p2p?

Если брандмауэры блокируют все входящие соединения по умолчанию, как работают технологии p2p? Как торренты, как вы подключаетесь ко всем, кто делится файлом и получает информацию от них? Проходит ли он через сервер ретрансляции или что-то в этом роде?

4b9b3361

Ответ 1

Я не разбираюсь во всем о BitTorrent, так как я об общих методах подключения P2P. Обычно клиенты в P2P-сети встречаются на общем сервере сигнализации (например, SIP, XMPP, сервер отслеживания, веб-сайт) для обмена IP-адресами, другими метаданными и сообщениями для загрузки прямых подключений. Затем используйте любой из ниже приведенных ниже методов, чтобы получить сеанс связи:

  • Обе стороны пытаются подключиться друг к другу одновременно - в случае, если одна сторона не может принимать входящие соединения, но разрешено выполнять исходящие соединения. Это относится к сценарию брандмауэра.

  • Отверстие для отверстий (используется совместно с выше). Реле сами по себе не требуются, но помогают обеспечить подключение, когда обе одноранговые узлы находятся за сетевыми устройствами, которые трудно преодолевать. Там обе UDP Hole Punching, а также технология TCP Hole Punching, Подробнее здесь.

  • Реле, в том числе TURN servers, могут быть развернуты в сети P2P, когда невозможна прямая связь. Все ваши любимые приложения для видеозвонков развертывают реле для этих сценариев, но прикладывают все усилия, чтобы заставить одноранговых узлов напрямую подключаться, чтобы избежать затрат на ретрансляцию.

Bing для следующих тем: STUN, TURN, ICE (создание интерактивных подключений), libjingle, pjnath, libnice.

Ответ 2

Если брандмауэр (в отличие от NAT) намерен блокировать входящие соединения (которые, как я считаю, они обычно делают), вы ничего не можете с этим поделать. Вы можете попробовать все пробивки отверстий, которые вам нравятся. Это достигается за счет простого внедрения симметричного NAT, то есть каждое штыревое отверстие открыто специально для ip, port-fourruple (источник, порт назначения и IP).

BitTorrent вряд ли перестанет работать только потому, что вы не можете получать входящие соединения, это будет просто немного хуже. Скорее всего, на рое есть, по крайней мере, некоторые люди, которые могут получать соединения, и вы просто подключаетесь к ним.

Это является старым объяснением того, как быть брандмауэром в основном просто означает худшую производительность.

EDIT:

Короткий ответ на вопрос "почему" заключается в том, что большинство сверстников не находятся за брандмауэрами (только NAT).

Ответ 3

Для потомков:

Короткий ответ: через https://en.wikipedia.org/wiki/Hole_punching_(networking)

Когда вы подключаетесь к google.com с вашего компьютера (который скорее всего сидит за маршрутизатором и NAT), ваш IP-адрес и номер порта NAT будут отправляться на серверы google. Google использует эту информацию о соединении для отправки результатов поиска на ваш компьютер.

Вы можете думать о серверах Google, похожих на один node в сети p2p. Google смог "связаться" с вашими серверами, даже если ваш маршрутизатор не принимает входящее соединение. Это потому, что они не инициировали соединение (они не знают вашу комбинацию ip: NATedport, чтобы инициировать соединение). Но ваш компьютер может делать исходящие подключения и отправлять/публиковать свой ip: NATedport комбо во внешний мир.

Таким образом, оба узла в p2p отправляют свои ip: NATedport комбо на сторонний сайт и обмениваются этой информацией и начинают подключаться (кто бы ни получил информацию первым) друг к другу.

Ответ 4

Пусть F = # межсетевых экранов,
O = # узлы с открытым входящим портом,
T = F + O = общее количество узлов,
P = O/T = доля общих узлов, имеющих открытые порты,
C f= max # соединений, каждый из которых имеет брандмауэр node, и
C o= max # подключений, каждый из которых открыт node.

Затем,
C f= O, ∵ межсетевые экраны могут подключаться только к открытым узлам
C o= T - 1, ∵ открытые узлы могут подключаться ко всем другим узлам (и как только все узлы межсетевых экранов сначала подключены к ним)
так что C o/C f= (T - 1)/O = 1/P - 1/O.

Если T велико, то C o/C f ≈ 1/P.

Итак, скажем, половина узлов имеет открытые входящие порты: P = ½. Затем
C o/C f ≈ 2,
что означает, что открытые узлы имеют ~ 2 × количество подключений как узлы с брандмауэром (что означает, что они перегружены, но также означает, что они имеют большую видимость).

Таким образом, лучше для конкретных узлов и для всей сети иметь P = 1; все узлы будут одинаково видимыми и одинаково обремененными.

Если P = 0, сеть вообще не работает ∵ никто не сможет инициировать подключения к другим аналогам.