Как приложения слушать в локальной сети в интернете? - PullRequest
3 голосов
/ 07 января 2010

Мне было интересно, как такое приложение, как скайп (популярный чат-клиент), работает в локальной сети с одним маршрутизатором, как оно может прослушивать определенный порт?

например: = В одной сети A и B две машины, работающие по Skype, шлюз обеих G1,

Теперь, как A и B будут иметь один и тот же IP в интернете, что и G1, но как они могут гарантировать, что они слушают через разные порты? Как они могут попросить маршрутизатор G1 для уникального порта.

Я хочу сделать простой сервер текстового чата на Linux. Как мне установить соединение между двумя разными компьютерами в двух разных сетях?

Ответы [ 5 ]

2 голосов
/ 07 января 2010

Решение вашей проблемы - иметь сервер пересылки где-нибудь в сети.

Разные программы используют разные средства для связи друг с другом. Но каждый чат-сервер, включая Skype, имеет сервер, который пересылает данные или информацию о доступности IP-адреса / порта подсети.
Существует два типа клиентов: «слушающие» клиенты и «пассивные». Прослушивающие клиенты имеют прямой доступ к Интернету через переадресацию портов маршрутизатора, а «пассивным» приходится использовать дополнительные приемы, чтобы получить в свои руки внешние данные, подключать внешние серверы или дополнительные порты для прослушивания.

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

1 голос
/ 07 января 2010

Обнаружение хоста

  • Обнаружение вручную, клиент A знает, кто является клиентом B

  • Обнаружение через широковещательный UDP, который используется многими играмидля игры по локальной сети.Клиент отправляет пакет на широковещательный адрес для своей подсети.Участники могут выбрать эту трансляцию и ответить.Недостатком является то, что это ограничено текущей подсетью.Более общий INADDR_BROADCAST (255.255.255.255) работает для всех подсетей в локальной ссылке, но он не может быть маршрутизирован, поэтому не будет работать через Интернет (это то, что использует автоматическая конфигурация DHCP).

  • Обнаружение через центральный (рандеву) сервер.Каждый отдельный клиент знает адрес сервера, а последний информирует их друг о друге.Этот метод используется IRC, Voip, IM и большинством одноранговых сетей.

Связь

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

Используя сервер Rendezvous, вы можете общаться друг с другом, используя сам сервер.клиент A сообщает серверу, что сказать, и, в свою очередь, сообщает клиенту B, поскольку оба клиента имеют исходящее соединение с сервером.

Клиенты могут общаться друг с другом без прокси-сервера.Для этого требуется DMZ, переадресация порта или UPnP.DMZ будет в основном пересылать все входящие соединения по всем портам на заданный локальный IP-адрес.Переадресация портов только перенаправляет определенные порты на локальные IP-адреса.UPnP немного более продвинут, клиент запрашивает, чтобы маршрутизатор временно перенаправил порт на него, и вы сообщаете другому клиенту через сервер рандеву, где подключиться.

Реализация приложения для чата

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

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

Еще одним решением будет использование общедоступного веб-сервера и «злоупотребление» его способностью вставлять контент для общения друг с другом.

1 голос
/ 07 января 2010

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

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

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

Многопользовательские интернет-игры Аудио и видео связь Терминальные службы клиентов и серверов Одноранговые приложения для обмена файлами

Когда эти приложения поддерживают UPnP, доступ через ICS Windows XP позволяет им работать без проблем.

1 голос
/ 07 января 2010

Вам нужен центральный UDP Rendezvous Server .

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

Хитрость заключается в том, чтобы открыть UDP-соединение изнутри.

  1. Проверьте протокол потоков мультимедиа в реальном времени и как они его используют.
  2. Выезд UDP Перфорация отверстий

альтернативный текст http://labs.adobe.com/technologies/stratus/images/p2pvideo_250x215.jpg

0 голосов
/ 07 января 2010

Если A и B на самом деле не «слушают» ответы на исходящие запросы, ваш маршрутизатор должен быть настроен для переадресации соответствующих номеров портов соответствующим хостам. Это не то, что вы можете запросить в коде, это то, что вам нужно настроить на самом маршрутизаторе.

...