2

расширяет исходный порт NAT и UDP / ответы NAT и UDP

Скажем, Алиса и Боб стоят за натсами (два натса, которые могут так или иначе сообщать не странный случай конуса, пожалуйста, исправьте меня в этом).

Оба открывают локальный сокет udp на 0.0.0.0, обнаруживают их исходящий порт ip: с помощью torrent dht (http://www.bittorrent.org/beps/bep_0042.html / bootstrapping).

Достаточно ли этого для отправки пакетов udp обоими способами? скажем открой сеанс utp.

Или все еще требуется попытаться соединиться с Алисой и Бобом, а Бобом с Алисой, чтобы пробить то, что может быть на пути (fw / nats)?

2 ответа2

4

Обычно динамический NAT отображает соединения, изменяя исходный порт исходных соединений. Часто сопоставление также ограничивается IP-адресом назначения, и обратно сопоставляются только пакеты из одного и того же пункта назначения. NAT может даже сопоставить один и тот же порт источника более одного раза с разными адресами назначения.

С таким NAT Алисе или Бобу необходимо настроить свой NAT (вручную или с помощью некоторых других средств, таких как UPnP), чтобы сопоставить конкретный порт NAT своему клиенту, чтобы другая сторона могла инициировать соединение с использованием указанного порта. После того, как соединение (или первый пакет получен с UDP) установлено, остальная часть потока пакетов как обычно.

1

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

Я полагаю, что ваш вопрос больше относится к UDP через NAT без какого-либо промежуточного общего сервера, что является общей проблемой обхода NAT. Проблема здесь заключается в том, что устройство NAT не имеет автоматического метода определения внутреннего хоста, для которого предназначены входящие пакеты, поскольку отправляющая сторона не знает номер порта, который прослушивает другая сторона.

Было разработано несколько алгоритмов для решения этой проблемы пробивания отверстий UDP. Некоторые алгоритмы дырокола UDP зависят от того, используют ли обе стороны одни и те же порты. Другие алгоритмы используют временное TCP-соединение для передачи информации, необходимой для установления UDP-соединения.

Другие методики UDP-дырокола не требуют никакой информации о порте, но вместо этого используют алгоритмы, когда обе стороны начнут посылать друг другу, используя несколько попыток и принимая тот факт, что по крайней мере первые пакеты будут потеряны. После первой неудачной попытки устройство NAT записало, что оно отправило пакет на другой компьютер, и пропустит любые пакеты, поступающие с этого IP-адреса и номера порта. Алгоритм этого подробно описан в ссылке на статью в Википедии.

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

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

У IETF есть целая рабочая группа, определяющая, что устройства NAT должны делать, чтобы сделать наименьшее количество беспорядка: ПОВЕДЕНИЕ Существует несколько методов получения данных через устройства NAT, некоторые из которых перечислены на странице BEHAVE. Есть также STUN, UPnP, NAT-PMP и Teredo.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .