6 / 6 / 1
Регистрация: 09.02.2016
Сообщений: 296
|
|
Передача данных между двумя клиентами с серыми динамическими IP с помощью сервера11.02.2025, 14:03. Показов 777. Ответов 9
Метки нет Все метки)
(
День добрый.
Так получилось, что с разных сторон ситуации толкают в эту сторону, поэтому приходится погружаться глубже. Сейчас пытаюсь понять, как работает технология p2p под капотом и для абстрагирования от привычных шаблонов (чатов и т.п.) буду использовать пример из жизненной ситуации, а именно - подключение по RDP к удаленному ПК. Как я себе это представляю. Есть два клиента с серыми динамическими и сервер с белым статическим IP. На клиенте, который подключается к другому, ставим службу на WebSockets, которая подключается к серверу и пробрасывает полученные и переданные данные на какой-нибудь порт localhost. Далее открываем RDP и вводим туда эти самые localhost и порт. На клиенте, к которому подключаемся стоит похожая служба, которая должна подключиться к серверу и перенаправить эти данные на localhost и порт RDP (3389 вроде). На сервере стоит служба на тех же WebSokets, которая ждет, пока оба клиента установят с ним соединение и если обмен идет через него, то просто пробрасывает данные от одного подключения к другому и наоборот, а если соединение p2p, то связывает клиентов между собой. А теперь вопросы: 1) Как практически серверу связать клиентов напрямую? Т.е. мы имеем по факту два webSokets - что мы должны делать дальше? Как сообщить клиентам, что им нужно теперь обмен варится данными через другую цепочку маршрутов? 2) Чем по факту, кроме шифрования и создания внутренней сети отличается такая схема соединения через сервер от обычного VPN? Всем спасибо за участие!
0
|
11.02.2025, 14:03 | |
Ответы с готовыми решениями:
9
Передача данных между клиентами Передача данных между клиентами: вопрос скорости и оптимальности Создать VPN туннель между двумя компьютерами с серыми IP |
6 / 6 / 1
Регистрация: 09.02.2016
Сообщений: 296
|
|
11.02.2025, 15:40 [ТС] | |
Uswer,
Разложу подробнее. 1) По вопросу 1 (тот что про p2p). Сервер - связующее звено. Без него клиенты никогда не достучатся друг до друга. Сокеты - классы .Net, которые дают нам доступ к подключениям. Как вы верно подметили, в p2p сервер данные через себя не гоняет, а только связывает клиентов. Перед этим клиенты должны связаться с сервером. Соответсвенно, самый подходящий для такого сценария способ связи в .Net это WebSokets. И того - на сервере мы имеем два WebSokets к которым установлено подключение от клиентов (у каждого свой) и теперь нам нужно что-то сделать с этими WebSokets, чтобы клиенты перестали обращаться к серверу и начали общаться друг с другом напрямую. Вопрос - что сделать? 2) По вопросу 2 (тот, в котором обмен идет через сервер). Схема очень напоминает классический VPN, кроме шифрования и создания внутренней сети. В чем принципиально у их отличие?
0
|
11.02.2025, 16:05 | ||
0
|
![]() ![]() |
|||
11.02.2025, 16:16 | |||
2. юзер запрашивает другого юзера через сервер. Сервер отдает актуальный IP (либо что юзер не пинговался последние 5 минут) 3. юзер подключается по указаному IP Я бы почитал про организацию торента. Там очень похожая история, кроме того момента что не нужно прокидывать трафик для сторонней программы. Теоретически вы можете в настройках RDP указать прокси, поднять этот прокси endpoint локально, а уже он будет перекидывать трафик на другой ПК. Для унификации действий этот прокси можно сделать SOCKS 5, который вроде как умеет разруливать много подключений для разных программ. Второе немаловажное отличие -- весь трафик VPN проходит через сервак (на самом деле нет, но считайте что весь), при этом для конечного клиента это исходящее подключение (т.е. инициализирует сам клиент). Такой трафик не особо блокируется по умолчанию, что несколько упрощает жизнь. Вы же хотите тупо пробросить трафик путём p2p. Первое во что упретесь -- NAT. Он должен понимать куда перенаправить входящий трафик. Ещё провайдер может блочить входящие подключения. Для каждой программы придется настраивать это дело. P.S. почему вам не подходит просто поднять VPN на двух устройствах?
0
|
6 / 6 / 1
Регистрация: 09.02.2016
Сообщений: 296
|
|
11.02.2025, 16:16 [ТС] | |
Uswer, это в общих чертах, оно понятно. Мне интересна более конкретная реализация.
Мы же не можем просто отдать клиенту адрес другого клиента, чтоб он к нему подключился, так как сервер и клиенты могут (и скорее всего) находятся в разных подсетях за всякими NAT. Клиент тупо не сможет достучаться, насколько я понимаю.
0
|
11.02.2025, 16:29 | |||
![]()
0
|
6 / 6 / 1
Регистрация: 09.02.2016
Сообщений: 296
|
|||||||
11.02.2025, 16:43 [ТС] | |||||||
0
|
![]() ![]() |
||||
11.02.2025, 17:45 | ||||
Повторю вопрос: почему не просто VPN? У вас предполагается много трафика? Не хотите трафик пропускать через сервер? Кроме VPN существует обычное прокси соединение, которое зачастую можно указывать конкретным программам. Я подозреваю что сисадмины знают ещё сотню-другую методов туннелирования трафика. Готовое решение будет в 100 раз быстрее настроить и в 100500 раз надёжнее.
0
|
6 / 6 / 1
Регистрация: 09.02.2016
Сообщений: 296
|
|||||
11.02.2025, 21:52 [ТС] | |||||
Но в целом, не то, чтобы я хотел прям его писать. Сейчас больше интересно детально понять как работает, а там видно будет. В целом у шарпа, насколько помню, была какая-то библиотека для работы с p2p, но вроде древняя. Первую было бы иделаьно решить через p2p - сконнектил и пусть они там на максимально возможной скорости интернет соединения общаются. Хоть и говорят, что для RDP не так важна скорость, но по опыту знаю, что на быстрооткликающейся машине работать гораздо приятнее. Секретных данных нет, поэтому шифровать не обязательно. Вторую тоже было бы хорошо так решить, но нужен более стабильный канал на длительном промежутке времени (p2p как я понимаю этим похвастаться не может), поэтому нужен проброс данных через сервер. VPN в целом справлялся с этими проблемами, до того как РКН начал его блокировать и мои VPN сервисы не начали умирать один за другим...
0
|
11.02.2025, 21:52 | |
Помогаю со студенческими работами здесь
10
Передача данных из БД между динамическими Child окнами в MDI приложении Socket между двумя клиентами и сервером Передача данных между двумя классами Передача данных между двумя устройствами
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
![]() |
||||
Размещения без повторений
VistaSV30 31.05.2025
Код возвращает список вариантов размещений
A^{k}_{n}=\frac{n!}{(n-k)!}
from itertools import permutations
def pwr(k, n): # Размещение без повторений (Placement without repetition)
if k. . .
|
Redis и Node.js с TypeScript - решения для высоконагруженных систем
Reangularity 31.05.2025
Redis (Remote Dictionary Server) — сверхбыстрое хранилище данных в памяти, способное обрабатывать операции за микросекунды. И что особенно важно для нас — с удивительно простым API. А теперь. . .
|
Unit-тестирование с моками в Go
golander 31.05.2025
Большинство разработчиков предпочитают тестировать код без использования моков. Например, при интеграции с Elasticsearch логичнее запустить контейнер локально и тестировать Go-код непосредственно с. . .
|
Как работать с PDF в C#
stackOverflow 31.05.2025
Нам приходится сталкиваться с PDF по разным причинам. Генерация счетов, создание отчетов, извлечение данных из загруженных пользователем документов, автоматизация рабочих процесов - это лишь верхушка. . .
|
Двухбуквенные коды стран в шифровании.
russiannick 31.05.2025
Человечество издревле манила возможность замены сочетаний букв вымышленными символами, делающие сообщение понятным только для посвещенных. Настала пора внести в это свой вклад. Двухбуквенные коды. . .
|
Мой опыт в исправлении ошибки приложения Boinc в части заряда батареи смартфона.
Programma_Boinc 31.05.2025
Мой опыт в исправлении ошибки приложения Boinc в части заряда батареи смартфона.
Хотел бы поделиться опытом в исправлении ошибки приложения в части заряда батареи смартфона. Сразу скажу, что. . .
|
Добро пожаловать на конкурс PrimeGrid, посвященный 20-летию PrimeGrid
Programma_Boinc 31.05.2025
Добро пожаловать на конкурс PrimeGrid, посвященный 20-летию PrimeGrid:
5-дневный обобщенный поиск простых чисел Ферма n = 20 с 12 июня 20:20 UTC по 17 июня 20:20 UTC.
12 июня 2005 года. . .
|
Вероятность в шансы / Шансы в вероятность
VistaSV30 31.05.2025
# Шансы -> Вероятность
def Chance_to_Probability(ch):
def gcd(a, b): # НОД - нужен для упрощения значений шансов
while b != 0:
a, b = b, a % b
return a. . .
|
FastAPI и Flask: Отличия, производительность и примеры использования
py-thonny 30.05.2025
Если вы разрабатываете веб-приложения на Python, вы наверняка слышали о Flask и FastAPI. Эти два фреймворка часто становятся предметом жарких дискуссий в сообществе разработчиков. И не без основания. . .
|
ML.NET и TensorFlow.NET: Умные приложения на C# с машинным обучением
stackOverflow 30.05.2025
Еще совсем недавно, когда речь заходила о машинном обучении, C# разработчики обреченно вздыхали и тянулись к Python. Мир искуственного интеллекта словно был огражден невидимым забором с табличкой. . .
|