Возможно ли, чтобы аппаратное устройство изменило информацию ответа на тот же IP?

237
Knight

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

Базовая информация:

Сервер ретрансляции (мы называем это R) получил статический IP.

Приложение (сервер или клиент) (мы называем это A) теоретически может использовать любой тип провайдера, например 3G / 4G / Wifi ... и находиться за любым количеством брандмауэров / NAT / Proxys / Switches ... Подумайте, в худшем случае ,

Таким образом, мой вопрос, если A отправит UDP-сообщение R. R получит IP и порт, на который он может отправить ответ. Все ок.

Но, скажем, A (тот же A) отправляет еще одно UDP-сообщение R. Есть ли в мире какое-либо оборудование или программное обеспечение, которое может изменить IP-адрес или порт, на который будет отвечать R?

Примеры в теории:

Может ли NAT дать другой порт для ответа, даже если сообщение имеет тот же IP, что и раньше? Существует ли межсетевой экран, который разрешает только один ответ на исходящее сообщение? Может ли одно сообщение проходить через прокси, а другое сообщение не проходит через прокси, в результате чего одно из сообщений может иметь другой порт для отправки ответа? Если А использует 3G-соединение и водит машину, они переключают вышку сотовой связи. Может ли R получить другой IP или порт при использовании новой сотовой вышки? Опять же, подумайте о худшем случае.

Зачем?

Я спрашиваю, потому что мне интересно:

  1. Я могу использовать тот же IP-адрес и порт, который я получил из первого сообщения от A.
  2. Или я должен отправить сообщение время от времени, чтобы обновить информацию ответа.
  3. Или R должен отправлять только A, если A сначала отправляет сообщение, а я просто отправляю один ответ на каждый запрос.

№ 3 должен работать всегда, независимо от ситуации. Но я просто хочу знать, думаю ли я об этом.

Этот вопрос может быть слишком широким, но его трудно определить.

0
Вы используете [протокол передачи без сохранения состояния] (https://en.wikipedia.org/wiki/User_Datagram_Protocol), поэтому вам придется самостоятельно отслеживать. Вы не будете знать, когда A уже отправил вам данные, в первую очередь, без отслеживания. Ваш пример включает «любое количество NAT», что уже означает, что он может измениться в любой момент в зависимости от NAT, хотя для обычных пользователей это может быть маловероятным. Поскольку у вас нет подтверждения того, что другая сторона действительно получила ваши сообщения, вы, безусловно, можете это сделать (1), но без проведения какого-либо сеанса это плохо. Seth 6 лет назад 1
@Seth. В этом случае отслеживание не важно для R. У меня уже есть другая система отслеживания. Knight 6 лет назад 0
В этом случае это тоже не важно, потому что это не должно иметь значения. Как уже говорилось, с различными настройками NAT и настройкой прокси есть шанс, и если у вас уже есть реализованный уровень сеанса, используйте данные этого уровня. Seth 6 лет назад 0

0 ответов на вопрос