Начало работы с сетью / программированием типа p2p

Я изучаю C ++ (например, я сейчас устанавливаю Visual Studio и держу в руках книгу Хортона), и моя причина для этого заключается в том, что я хочу написать клиент-серверную программу типа p2p, которая позволит пользователям для потоковой передачи видео с устройства без необходимости переадресации портов (и экономии времени при обращениях в службу технической поддержки).

Я хочу, чтобы пользователь зарегистрировал устройство на домашнем сервере через меню устройства (инженеры позаботятся об этом), а затем на ПК, войдите в клиент и добавьте устройство в общеизвестный «список друзей» устройств, используя пароль они использовали на машине. Затем в любое время они могут открыть устройство и управлять им через Интернет без необходимости переадресации портов.

Вроде как работает скайп, наверное. Пользователи могут передавать аудио / видео друг другу, не зная IP-адреса друг друга или переадресовывая какие-либо порты.

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

Я читал о p2p-сетях и понимаю основную идею p2p-архитектуры, но не саму теорию и метод связи через p2p.

1

Решение

Как клиент обнаруживает устройство в сети p2p и затем связывается с ним, не зная заранее IP-адрес или не имея никаких портов для информации или команд, поступающих в удаленную сеть, для маршрутизации на устройство?

Вы не можете создать p2p IP-соединение через Интернет, не зная заранее IP-адрес или не имея какого-либо известного сервера, к которому можно подключиться. То есть одна сторона должна заранее зарегистрировать свой собственный адрес сервера и номер порта на каком-либо сервере, который запрашивает другая сторона.

0

Другие решения

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

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

В основном так работает BitTorrent-трекер. С ограничением — в списке сохраняются только одноранговые узлы, допускающие входящие соединения. Это имеет смысл, так как знание о пэре за NAT довольно бесполезно, так как вы все равно не можете достичь его. Вы можете только надеяться, что он запросит трекер и обнаружит вас.

Теперь, если два NAT находятся за NAT, они не могут связаться друг с другом. По крайней мере, в тех случаях, когда протокол P2P не слишком сложен. BitTorrent не позволит этого, в то время как Skype. Это можно решить путем потоковой передачи данных через одно из устройств с общедоступным IP-адресом или через какой-либо выделенный сервер (последний, вероятно, хуже как менее масштабируемый).

Я остановлюсь сейчас … Есть много проблем с разработкой такого протокола через Интернет, и это зависит от того, что именно так тебе нужно. Итак, вам это нужно для работы через Интернет или просто внутри локальной сети? Я рад обсудить это более подробно, если вы предоставите более подробную информацию.

0

По вопросам рекламы [email protected]