Как многопользовательские онлайн-игры, использующие UDP, доставляют пакеты между сетями через Интернет? Насколько я понимаю, клиентам придется включить переадресацию портов на своих маршрутизаторах, чтобы пакеты приходили на их компьютер. Этого ли требуют от игроков крупные онлайн-игры (WoW, Diablo и т. д.)?
Например, я недавно создал сервер, который обрабатывает трафик udp. Он просто возвращает обратно все, что отправил отправитель. Я развернул его на сервере в Интернете. Я могу вернуть эхо отправителю только после включения переадресации портов, но это не сработает, если в одной локальной сети находятся два отправителя.
решение1
Короткий ответ: отслеживание подключений NAT
Следует помнить, что подавляющее большинство маршрутизаторов в Интернете IPv4 — это маршрутизаторы NAT.
Большинство реализаций NAT используют интеллектуальное отслеживание. Когда вы отправляете UDP с внутреннего клиента куда-либо, у вас будут порт назначения и порт источника. Если трафик приходит с перепутанными портами, то этот трафик будет направлен обратно к вашему клиенту и разрешен в большинстве брандмауэров.
NAT/брандмауэры с отслеживанием определяют эти пакеты как связанные и пересылают их обратно.
Пример на основе комментариев с server
портом 5000
UDP
- Клиент отправляет пакет для
server:5000
, источникclient:5001
- Первый маршрутизатор NAT увидит пакет с исходным IP-адресом и портом
client:5001
, а также пунктом назначенияserver:5000
. - Маршрутизатор отправляет это по своему пути и будет иметь
NATip:NATport
- Сервер получает это и создает ответ,
NATip:NATport
который имеет источникserver:5000
- NAT получает его и имеет источник
server:5000
назначенияNATip:NATport
, который соответствует отправленному пакету (но имеет источник и назначение в обратном порядке) - NAT отправляет это по-
client:5001
прежнему с источникомserver:5000
Исходный IP+порт и целевой IP+порт создают комбинацию, которую можно отслеживать. (есть более подробная информация, но это основы)
Еще немного чтенияНо мне следует поискать более подробную документацию по этому вопросу, а не просто ссылаться на отдельные свидетельства того, что я видел и испытал.