Одноранговый позади NAT с использованием C # - PullRequest
3 голосов
/ 13 июля 2011

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

Итак, общая идея такова: У нас есть два .NET-написанных клиента, которые хотят общаться друг с другом без маршрутизации всего трафика через сервер. Более того, не обязательно, чтобы оба клиента были основаны на .NET, но один будет в любом случае (другим может быть Objective-C, C ++ в Unix и т. Д.).

Идея такова:

  1. Первый клиент устанавливает соединение с некоторым сервером, поэтому NAT запоминает, что клиент находится по адресу 10.0.0.1:1234, а сервер находится по адресу 70.0.0.7:4567. Итак, когда 70.0.0.7 отправит пакет обратно в NAT, NAT будет знать, как маскировать его клиенту.
  2. Второй клиент устанавливает соединение с тем же сервером, поэтому второй NAT также запоминает, что внутренний клиент по адресу 192.168.0.1:19234 подключен к серверу по адресу 70.0.0.7:7654 и также сможет принимать пакеты обратно для 192.168.0.1:19234
  3. Теперь нам нужно установить соединение с 10.0.0.1:1234 на 192.168.0.1:19234.

Оба клиента c # могут знать о конечных точках друг друга (скажем, сервер сохраняет NAT-адреса, и они являются: Client1 - 111.0.0.1:1111 и Client2 - 222.0.0.2:2222). Для этого необходимо, чтобы Client1 мог отправлять пакеты напрямую на 222.0.0.2:2222 без вызова кулака Socket.Connect, а для Client2 отправлять пакеты на 111.0.0.1:1111 без вызова также Socket.Connect.

Возможно ли это сделать только в .NET без использования каких-либо специальных библиотек, только с использованием стандартных сокетов и т. Д.?

Ответы [ 2 ]

3 голосов
/ 13 июля 2011

Похоже, вы хотите сделать что-то похожее на UDP дырокол

1 голос
/ 13 июля 2011
...