Как p2p соединения устанавливаются через интернет

Говорят, что одноранговая сеть не является серверной базой для маршрутизации и обработки данных и использует только сервер для получения обновленных адресов узлов (вероятно, их IP-адреса в Интернете) для прямого подключения к другому узлу без промежуточного сервера. поэтому мой вопрос в том, как компьютер (узел) A может установить соединение с узлом B через Интернет. IP-адреса, которые дает нам провайдер, недействительны и недоступны. так как же этот p2p работает с этим недопустимым IP-адресом узла через интернет?

1 ответ

Предполагая, что вопрос касается домашних / жилых связей:


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

Для P2P: а) клиент добавляет статическое правило ("переадресация портов", или DNAT), чтобы всегда отправлять пакеты для указанного порта TCP/UDP на свой компьютер (узел A). Затем другие узлы могут просто использовать публичный адрес маршрутизатора, и он будет пересылать пакеты внутренне на узел А.

(Программы могут даже использовать NAT-PMP и / или UPnP IGD для автоматического добавления правил "переадресации портов".)

Или б) программа может использовать различные механизмы "обхода NAT" / "дырокола", такие как STUN (который использует "вспомогательный" сервер для начального рукопожатия). Эти механизмы обычно включают в себя использование автоматического отслеживания соединений маршрутизаторов, чтобы создать впечатление, что каждый узел одновременно подключается к другому на той же паре портов.


Для интернет-провайдеров, которые используют CGNAT и вообще не предоставляют клиентам публичный IPv4-адрес, опция a) обычно невозможна, а опция b) иногда работает, иногда нет. AFAIK, два CGNAT-узла обычно не могут общаться напрямую.

(Обратите внимание, что даже узлы с CGNAT могут по-прежнему устанавливать исходящие соединения с любым узлом, имеющим публичный адрес, поэтому они не полностью изолированы. Я имею в виду, что если они не могут этого сделать, то они не могут получить доступ к сети / почте / игровые серверы тоже?)

Однако, по крайней мере, некоторые из этих интернет-провайдеров предоставляют поддержку IPv6 наряду со службой CGNAT IPv4. Обычно IPv6 предоставляет общедоступный адрес каждому устройству, поэтому, когда оба узла поддерживают IPv6, они могут напрямую использовать общедоступный IPv6-адрес друг друга.

(Они могут все еще нуждаться в перфорации или ручной настройке маршрутизатора, но это потому, что обычно мешает брандмауэр, а не из-за маршрутизации / адресации.)

Другие вопросы по тегам