Как пакеты отправляются даже за брандмауэром или NAT с каким-либо приложением?

#security #networking #audio #network-programming #voice

#Безопасность #сеть #Аудио #сетевое программирование #голос

Вопрос:

Например, приложения Skype / Team viewer / Logmein и т.д., Которые отправляют аудио / видео за NAT (за брандмауэром). Но когда я создаю небольшое крошечное приложение, которое отправляет текст в другое местоположение NAT, оно не смогло сделать то же самое.

 Example: 

Sender: 
-> Public ip: 91.1.2.3 My lan ip is: 192.168.1.2 with port 14446 udp
-------> Data format: RTP packets
Receiver:
<------- Data received: 0 packets
-> Public ip: 92.1.2.3 Friend lan ip is: 10.0.0.2 with port 14446 udp

* same in both way
  

Как это делают другие? Каков способ разработки одноранговых приложений для преодоления проблем с NAT? У нас всегда есть общедоступные IP-адреса, и в основном у него проблемы с NAT.

Но как тогда Skype работает и в таких случаях? Есть ли у нас диапазон аудио / видео портов для UDP или UDP всегда открыт из чего-либо? Но мой не работает над портами диапазона для UDP, которые я также пробовал. В чем секрет? это вызывает у меня любопытство !!.

Примечание: Моя цель — обработка аудиопакетов, где, как я полагаю, слишком большая фильтрация или брандмауэр вызывают задержку и запаздывание, и другие проблемы также возникают относительно. Итак, я хотел бы очень четко знать для моего приложения, что некоторые из портов (какие диапазоны портов?) может использоваться для таких целей, где это действительно не блокирует нагрузку на разработку.

Ответ №1:

Существует несколько типов NAT, которые различаются по тому, какой трафик они пропускают.

Смотрите статью Википедии о NATs

Для большинства NAT STUN позволит вам открывать порты и узнавать, какой порт вы открыли (может отличаться от порта, с которого вы отправляли). В SIP и RTSP вы обычно предоставляете внешний IP-адрес и порт, определенные STUN, на другой конец.

Полностью симметричный NAT означает, что STUN не позволит вам использовать сторонний сервер для поддержки портов через STUN, поэтому вам придется использовать UPnP (если он включен) или сопоставлять порты в маршрутизаторе (или настраивать триггеры), или вам придется играть в злые игры, чтобы обе стороны думали, что они инициировали соединение. (Непросто и не гарантировано.)

Смотрите спецификации ICE amp; TURN (RFC) от IETF для подробных механизмов обхода NAT — хотя обратите внимание, что в некоторых случаях для пересылки пакетов необходимо использовать внешний прокси.

Комментарии:

1. Отличная информация. Но все же мы имеем дело с задержкой. Идея, которую я пытаюсь реализовать, заключается в том, чтобы А) пожать друг другу руки (при отсутствии проблем с брандмауэром / NAT) Б) передавать необработанные пакеты от пользователя 1 к пользователю 2, не привлекая коммутатор / прокси-сервер для обработки медиапакетов. Потому что в моих исследованиях и экспериментах было доказано, что одноранговые 2-одноранговые среды не должны включать фильтрацию третьей стороной. И главная цель — наименьшая задержка в мультимедиа.

2. Прочитайте статьи, на которые я ссылался. Вы не можете легко справиться с полностью симметричным маршрутизатором без управления маршрутизатором; конечно, не полностью симметричные маршрутизаторы на обоих концах без какого-либо типа RTP-прокси / переадресатора (см. ICE / TURN). Вы можете работать с симметричными маршрутизаторами через UPnP (если включен) или вручную сопоставлять порты. Я не уверен на 100%, что вы подразумеваете под «рукопожатием». Связь с низкой задержкой будет лучше, если вы сможете избежать прокси-сервера — ICE позволяет вам определить, есть ли способ избежать ретрансляции.

3. Совместимы ли они с IPv6? Или они будут удалены и технологии приостановлены, когда IPv4 не существует.

Ответ №2:

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

Комментарии:

1. A (за брандмауэром), B (друг за брандмауэром), C (отключение сервера / сопоставление nat). A подключает C, а C подключает A и регистр A к C? или A подключает B, но не может установить связь из-за отсутствия NAT. или A и B в телефонных разговорах о том, что есть информация о согласовании, и пытаются установить за сопоставлением NAT? Что именно вы имеете в виду, это STUN, который представляет собой только общедоступный IP и общедоступные карты портов, но все равно от A до B.

2. Я имел в виду следующее: A подключается к C и, таким образом, определяет его внешний IP / порт. Это все, что делает STUN. Владелец сервера C теперь может объявить, что A подключен к сети и доступен по этому внешнему IP / порту. Таким образом, B может напрямую подключаться к A. C не будет участвовать в прямой связи.

Ответ №3:

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