Метод, используемый большинством 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.