Рейтинг:1

Как онлайн-игры отправляют пакеты UDP через Интернет?

флаг ca

Как многопользовательские онлайн-игры, использующие UDP, доставляют пакеты между сетями через Интернет? Насколько я понимаю, клиенты должны включить переадресацию портов на своих маршрутизаторах, чтобы пакеты поступали на их компьютер. Это то, что большие онлайн-игры (WoW, Diablo и т. д.) требуют от игроков?

Например, недавно я создал сервер, который обрабатывает udp-трафик. Он просто возвращает все, что отправил отправитель. Я развернул это на сервере в Интернете. Я могу вернуть эхо отправителю только после включения переадресации портов, но это не сработает, если в одной локальной сети есть два отправителя.

Рейтинг:3
флаг in

Краткий ответ: отслеживание соединения NAT

Следует помнить, что подавляющее большинство маршрутизаторов в Интернете IPv4 являются маршрутизаторами NAT.

Большинство реализаций NAT выполняет интеллектуальное отслеживание. Когда вы отправляете UDP от внутреннего клиента куда-то, у вас будет порт назначения и порт источника. Если трафик поступает с перевернутыми портами, то этот трафик будет перенаправлен обратно вашему клиенту и разрешен в большинстве брандмауэров.

NAT/брандмауэры с отслеживанием определяют эти пакеты как связанные и пересылают их обратно.

Пример на основе комментариев с сервер в порту 5000 UDP

  • Клиент отправляет пакет для сервер: 5000, источник клиент: 5001
  • Первый маршрутизатор NAT увидит пакет с IP-адресом источника и портом клиент: 5001, и пункт назначения сервер: 5000.
  • Маршрутизатор отправляет это по пути и будет иметь Совет NAT: порт NAT
  • Сервер получает это и создает ответ на Совет NAT: порт NAT который имеет источник сервер: 5000
  • NAT получает это и имеет источник сервер: 5000 пункт назначения Совет NAT: порт NAT, который соответствует отправленному пакету (но имеет местами источник и пункт назначения)
  • NAT отправляет это на клиент: 5001 еще с исходником сервер: 5000

Исходный IP+порт и IP+порт назначения создают комбинацию, которую можно отследить. (там больше деталей, но это основы)

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

diaper avatar
флаг ca
Можете ли вы объяснить, что вы подразумеваете под «если трафик поступает с перевернутыми портами»? Означает ли это, что если мой сервер вне NAT получил пакет на порт 5000 от :5001, то он должен отправить ответ на :5000?
флаг in
Добавлен пример @diaper
user10489 avatar
флаг nc
См. также https://en.wikipedia.org/wiki/Hole_punching_(networking)
diaper avatar
флаг ca
@NiKiZe спасибо, это имеет смысл. Звучит так, будто пробивка отверстий — это в основном «отправить пакет более одного раза, потому что первый может быть отброшен». Хотелось бы мне понять, почему мое примерное приложение все еще не работает, в то время как другие вещи в моей сети работают без переадресации портов (xbox, вызовы масштабирования, д.), но это уже другой вопрос
флаг in
Большинство маршрутизаторов NAT разрешают трафик, убедитесь, что вы возвращаете данные на тот же порт, с которого пришел трафик. Сервер имеет статический номер порта, клиент имеет случайный номер порта в качестве источника.

Ответить или комментировать

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