Как работает неткод и от чего зависит его эффективность

Пришло время вооружиться знаниями обо всём, что связано с неткодом: от тикрейта до выделенных серверов и пиринговых (peer-to-peer или P2P) сетей.

Неткод – это непрофессиональный термин, используемый в основном разработчиками и геймерами, чтобы описывать одну из важнейших частей игр: онлайн-соединение и всё, что с ним связано. Иными словами, это фундамент, на котором строятся все мультиплеерные игры, и если фундамент оказывается шатким, то всё остальное уже не имеет значения. Играть в онлайне становится попросту неприятно. А когда неткод хорош, о нём даже не думаешь и просто наслаждаешься игрой. Но когда про неткод той или иной игры отзываются нелестным образом, что именно имеют в виду? Какие проблемы подразумеваются?

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

Важные термины, связанные с неткодом

Пинг

Вы смотрели фильм «Охота за “Красным Октябрём”», в котором «пинг» (активный импульс сонара) использовался для определения дистанции между американской и советской подводными лодками?
Так вот, пинг в современных онлайн-играх выполняет примерно ту же функцию.

Когда ПК или консоль «пингует» сервер, устройство отправляет ICMP-запрос (протокол межсетевых управляющих сообщений) на игровой сервер, после чего сервер присылает ICMP-ответ.

Время, которое проходит между отправкой запроса и получением ответа, и является пингом конкретного игрового сервера. Поэтому если пинг составляет 20 мс, это значит, что на передачу данных с клиента до сервера тратится 10 мс, поскольку пинг учитывает ещё и ответ сервера.

Чем выше пинг, тем более заметными становятся задержки и лаги во время игры, поэтому разумно будет выбирать сервера с низкими пингами – это одно из основных условий комфортного и отзывчивого геймплея.

Маршрутизация

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

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

Существуют специальные утилиты вроде WTFast, создающие более «быстрые» (то есть короткие) маршруты с наименьшим количеством остановок. Однако эффективность подобных программ зависит от вашего местоположения и вашего интернет-провадера. Если провайдер позволяет создавать более короткие маршруты, то такие программы действительно могут помочь. Поэтому перед тем, как приобрести подписку на утилиту, обязательно проверьте, действительно ли она способна снизить количество задержек вашего интернет-соединения.

Потеря пакетов — куда делись мои данные?

Никто не гарантирует, что отправленный вашим устройством пакет данных достигнет точки назначения. Когда он исчезает по дороге, это называется потерей пакета, и это одна из главных проблем онлайн-игр, поскольку повторная отправка данных увеличивает время задержек.

Так что же вызывает потерю пакетов?

  • Проблема может заключаться в вашей локальной сети (LAN)
  • У вашего ПК может быть неисправный сетевой интерфейс или повреждённые драйвера
  • Помехи или перегрузки в WiFi или электрическом кабеле
  • Неисправный сетевой порт или сетевой кабель

Потеря пакетов так же может быть вызвана проблемой с прошивкой роутера, технической неисправностью оборудования или же недостаточной пропускной способностью восходящих и нисходящих каналов.
Решить этот вопрос можно обновлением прошивки, простой перезагрузкой роутера или, если речь идёт о перегруженности восходящих или нисходящих каналов, приобретением роутера, в котором можно выставить высокий приоритет для активно используемых приложений. Рекомендуем обратить внимание на модель Edge Router X от фирмы Ubiquity.

Если же потеря пакетов происходит вне вашей домашней сети, вам остаётся лишь связаться со службой поддержки вашего провайдера и надеяться, что они исправят эту проблему.

Частота обновления

Помимо скорости передачи данных (пинг) задержка зависит ещё и от частоты, с которой игра отправляет запросы и получает ответы.

Если, допустим, игра делает это с частотой 30 Гц (30 обновлений в секунду), то между обновлениями проходит больше времени, чем в случае, если частота составляет 60 Гц.

Повышая частоту обновления, можно снизить уровень задержек в игре.

Низкая частота обновлений не только влияет на общую задержку в сети, но и вызывает такие явления, как «суперпули» – когда выстрел из оружия в игре наносит больше урона, чем следует. Позвольте объяснить, с чем это связано.

Предположим, игровой сервер отправляет 10 обновлений в секунду, как это происходит в большинстве игр серии Call of Duty, когда клиент является хостом созданного матча. При этой частоте обновлений промежуток между каждым обновлением составляет 100 мс, и ровно столько же времени проходит между двумя выстрелами у оружия, стреляющего со скоростью 600 пуль в минуту.

Но во многих шутерах, в том числе и в Call of Duty, имеется оружие, делающее 750 выстрелов в минуту или даже больше. Это превышает скорость обновлений, поэтому игре приходится отправлять в обновлении сразу несколько пуль.

Поэтому если в игрока попадает 2 пули, то урон от этих двух пуль отправляется единым пакетом, и игрок получает урон от так называемой «суперпули», значительно превышающий урон от простых выстрелов.
На этом примере можно понять, что высокая частота обновлений нужна не только для снижения задержек в сети, но и для того, чтобы обеспечить плавный игровой опыт. К тому же при высокой частоте обновления потеря пакетов играет меньшую роль, тогда как низкая частота обновлений способна испортить впечатление от игры как игроку, страдающему от потери пакетов, так и тому, кто попался в его прицел. Чем меньше пакетов с данными вы получаете, тем важнее каждый из них.

Тикрейт

Тикрейт, или частота симуляции, – это показатель того, сколько раз в секунду игра создаёт и обрабатывает данные.

В начале очередного «тика» сервер запускает обработку полученных данных и обновляет с их помощью игровую ситуацию. Затем он отправляет результат клиенту и приостанавливает обработку до следующего тика. Чем быстрее завершается тик, тем раньше клиент получает обновлённые данные от сервера – иными словами, это сокращает задержку между сервером и клиентом. Высокий тикрейт означает плавную регистрацию попаданий.

Соответственно тикрейт равный 60 Гц вызовет меньшую задержку, чем тикрейт равный 30 Гц, поскольку он сокращает время, затрачиваемое на обновление игровой ситуации. Тикрейт на частоте 60 Гц позволяет серверу высылать обновления со скоростью 60 в секунду, что в сравнении с тикрейтом на частоте 30 Гц, позволяет сократить время передачи одного пакета между клиентом и сервером примерно на 33 мс (-16 мс на доставку пакета от клиента серверу и ещё -16 мс на отправку данных от сервера клиенту).

При тикрейте в 60 Гц у сервера есть только 16.66 мс, в течение которых он должен завершить очередное обновление игровой ситуации. Поэтому если сервер имеет фиксированный тикрейт, он должен обновлять ситуацию в игре как можно быстрее или хотя бы вписываться в окно, выдаваемое тикрейтом.

В том случае, если сервер не справляется с этой задачей, последствия заметны невооружённым глазом: телепортирующиеся игроки, проблемы с физикой, выстрелы, проходящие сквозь цели и не задевающие их, и многое другое.

Модели сети

Теперь, вооружившись всеми терминами, самое время рассмотреть структуру, по которой работает большинство онлайн-игр. На данный момент существует три модели сети, используемые в многопользовательских проектах. Каждая из них имеет собственные плюсы и минусы.

1. Выделенный игровой сервер

Используя данную модель сети, разработчики могут заключать контракты с компаниями вроде i3d или использовать облачные сервера, в числе которых AWS от Amazon, Azure от Microsoft и Cloud Service от Google, чтобы создавать выделенные игровые сервера, к которым будут подключаться геймеры.
Игровой сервер в этом случае работает на мощном оборудовании, а центр данных обеспечивает достаточную пропускную способность, необходимую для обработки пакетов всех игроков, подключающихся к серверу. Благодаря своему централизованному дизайну данная модель позволяет контролировать античит-системы и эффект, который оказывают игроки с высоким пингом на регистрацию попаданий.

Минусом выделенных серверов является их высокая стоимость. Если игроки не готовы брать на себя эти затраты (а в большинстве случаев они действительно не готовы), то расходы ложатся на плечи издателей или разработчиков.

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

Итог. Выделенные игровые сервера – это лучший выбор для динамичных онлайн-игр, где в одном матче участвует более 2 игроков, но при этом это самый дорогой вариант, поскольку вычислительные мощности, пропускная способность и другие слагаемые комфортной игры предоставляются профессиональными компаниями.

2. Локальный сервер

Другая модель, которую некоторые путают с пиринговыми сетями, позволяет использовать ПК или консоль одного из игроков в качестве хоста – то есть устройство геймера фактически становится сервером.
В этом случае разработчикам не приходится тратиться на дорогостоящие выделенные сервера.

Данная модель позволяет геймерам в удалённых регионах играть вместе с друзьями на сервере с низкими показателями задержек (при условии, что все друзья живут неподалёку).

Одним из главных минусов этого варианта является тот факт, что игрок, являющийся сервером, получает заметное преимущество, поскольку его пинг равен нулю. Он видит противника на долю секунды раньше и, соответственно, открывает огонь раньше. При этом игрок-хост может искусственно увеличивать пинг других игроков, что даёт ему нечестное преимущество (таких игроков называют лаг-свитчерами).

Основной проблемой данной модели подключения является то, что скорость сервера целиком зависит от скорости и пропускной способности интернет-соединения хоста. Если же ПК-хост использует Wi-Fi, о комфортной игре можно забыть. В этом случае игрокам приходится мириться с лагами, потерей пакетов, телепортацией персонажей и плохо работающей регистрацией попаданий. Это также ограничивает частоту обновлений игры, поскольку большинство домашних сетей попросту не справляется с хостингом матча, к которому подключается более 10 игроков, и не способны обновляться с частотой 60 Гц.

Хост видит WAN IP-адреса других игроков, что позволяет ему блокировать их, а также (чисто теоретически) устраивать DDoS-атаку этих адресов. В подобных ситуациях античит-системы практически бесполезны, поскольку игровая ситуация обрабатывается целиком на компьютере такого же игрока.

Тем не менее, самым раздражающим элементом игры на локальных серверах является миграция хоста – процесс, запускающийся после выхода хоста из матча, при котором вся игра ставится на паузу в течение нескольких секунд, пока выбирается новый игрок на роль сервера.

Итог. Когда разработчик решает внедрить в игру систему локальных серверов, им движет лишь желание сэкономить, а не предоставить геймерам комфортный и плавный опыт игры.

3. Пиринговые сети

Пиринговые (или одноранговые) сети чаще встречаются в файтингах формата 1х1 и спортивных симуляторах, однако можно встретить и другие мультиплеерные игры, использующие данную модель для матчей, в которых участвуют более 2 игроков. В качестве примера можно привести Destiny и For Honor.
Реализация выделенных и локальных серверов работает по одной и той же схеме в каждой игре, тогда как пиринговые сети имеют множество различных моделей. Например, в играх серии Destiny в обработке игровых ситуаций частично используются выделенные сервера.

Но все пиринговые сети имеют одну общую особенность: все клиенты напрямую взаимодействуют друг с другом.

В результате все игроки видят WAN IP-адреса своих союзников и противников, и некоторые стримеры критикуют эту особенность, поскольку это повышает шансы стать жертвой DDoS-атаки.
Другой проблемой игр вроде For Honor и Destiny является то, что если к пиринговой сети подключается более 2 игроков, это значительно увеличивает нагрузку на сеть, особенно если речь идёт о домашнем интернет-соединении.

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

Итог. В файтингах формата 1х1 или спортивных симуляторах пиринговая сеть (P2P) вполне оправдана, поскольку выделенный сервер только увеличит задержку, а локальный – даст одному из игроков несправедливое преимущество.

Но если мы говорим о динамичных мультиплеерных играх, в которых принимает участие более 2 геймеров, то лишь выделенные сервера способны обеспечить пропускную способность и вычислительную мощность, необходимые для высокого тикрейта и частоты обновления.

Поэтому важно понимать, что если разработчик или издатель внедряет в игру, мультиплеер которой рассчитан не только на 2 игроков, поддержку локальных серверов или пиринговых сетей, отказываясь от выделенных серверов, это говорит только об одном. Студия стремится сэкономить, а не обеспечить комфортную игру в онлайне.

Компенсация лагов

Каждый игрок сталкивается с задержками в процессе онлайн-игры, и причиной их является дистанция между сервером и клиентом, количество остановок пакетов с данными и частота обновлений, а также тикрейт сервера.

С этим связано ещё одно понятие онлайн-игр. Компенсация лагов. Из-за вышеупомянутых задержек мы бы видели игроков в том положении, где они находились несколько миллисекунд назад, а не там, где они находятся в данный момент. Если бы игра не компенсировала эти задержки, мы бы не смогли попадать по другим игрокам. Мы бы буквально стреляли по призракам.

Тем не менее, в некоторых играх данная компенсация переходит допустимые границы. Это приводит к нелепым и раздражающим ситуациям, при которых, например, игрок со стабильным соединением и с минимальным количеством лагов, находясь за укрытием, получает урон от игрока с запредельным пингом. Любители мультиплеера Rainbow 6 Siege поймут, о чём я говорю.

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

DICE попыталась избавиться от этой проблемы в Battlefield 1, внедрив компенсацию лишь определённого процента задержки. Как только пинг игрока превышает установленный разработчиками порог, сервер перестаёт компенсировать дополнительные задержки, в результате чего игроку приходится самостоятельно приспосабливаться и корректировать свои выстрелы.

Это позволяет свести случаи, при которых игроки получают урон в укрытиях, к минимуму. На видео ниже продемонстрирована данная механика в действии:

Я бы хотел подчеркнуть, что издателям и разработчикам необходимо уделять внимание количеству создаваемых серверов. Причина, по которой в некоторых играх полно людей с высокими пингами, заключается в том, что в их регионах попросту не хватает серверов. Поэтому им приходится довольствоваться серверами, пинг на которых редко опускается ниже 150 мс.

Регистрация попаданий

В шутерах она нужна для того, чтобы определить, куда попал ваш выстрел.

Существует два вида регистрации попаданий. Самый простой и быстрый (на сленге называющийся «хитскан») обходится без учёта скорости полёта пули. Вы фактически стреляете лазерами, моментально достигающими цели. Данный вид регистрации попаданий используется в шутерах с маленькими картами, поскольку в тесных условиях скорость полёта пуль практически ни на что не влияет.

А в играх вроде Battlefield используется сложный просчёт полёта пуль, используемый для регистрации попаданий. Каждый патрон имеет скорость полёта и траекторию, и влияет на это ряд факторов.

Но где именно происходят вычисления, связанные с регистрацией попаданий? Здесь тоже есть несколько вариантов.

Регистрация попаданий может происходить на вашем устройстве (клиенте), после чего на сервер (а в случае с P2P-сетью – на устройства других клиентов) будет отправляется отчёт о том, куда попал ваш выстрел. Данная схема позволяет с точностью до пикселя зафиксировать ваше попадание, но она весьма уязвима для различных читов вроде аимбота.

Поэтому если в игре регистрация попаданий происходит на устройстве игрока, важно, чтобы сервер проверял каждое из них и только после этого фиксировал его.

При классической системе регистрации попаданий все вычисления происходят на сервере. То есть клиент сообщает серверу, в каком направлении вы выстрелили, а сервер определяет, в кого или во что вы попали. К сожалению, это не устраняет проблему с читами полностью, но создавать читы и хаки в таких условиях становится сложнее.

Десинхронизация

В мультиплеерном матче игровая ситуация должна отображаться одинаково у всех. Однако временами происходит так называемая десинхронизация, когда, допустим, один игрок видит открытую дверь, тогда как на экране другого эта дверь закрыта. Причиной этого может являться баг, проблема с производительностью или неполадки со связью между клиентом и сервером или другими клиентами. Вашему клиенту может не дойти отчёт об изменении игровой ситуации или дойти, но не целиком – например, сервер сообщит о подрыве какой-нибудь бочки, но не отправит данных касательно того, где она приземлилась.

Заблуждения, связанные с неткодом

Вам кажется, что в неткоде легко запутаться? Вы не одиноки. Перед вами самые распространённые заблуждения на эту тему.

Достаточно увеличить тикрейт и высокий пинг перестанет быть проблемой.

Повышение тикрейта и частоты обновления с 30 до 60 Гц действительно сократит число задержек, однако это не «исправит» высокий пинг, поскольку частое обновление данных не означает, что они будут передаваться быстрее.

Для онлайн-игр нужно как минимум 100 Мб/с.

Если вы видите рекламу «высокоскоростного» тарифного плана у того или иного провайдера, учитывайте, что это касается в первую очередь пропускной способности – то есть скачивание и загрузка файлов будут происходить быстрей. Но это никак не влияет на саму скорость передачи данных.

Пропускная способность сети не связана с фактической скоростью передачи пакетов данных. Поэтому если вы перейдёте с 10 Мб/c на 100, пакеты данных не начнут передаваться в 10 раз быстрее.

За это отвечает «коэффициент скорости» медных или оптико-волоконных кабелей, которые соединяют сервер и клиент.

Коэффициент скорости (VF%) описывает скорость, с которой сигнал передаётся по кабелю, относительно скорости света. Например, коэффициент скорости витой пары категории 5e равен 64, а у оптико-волоконного кабеля он составляет 67.

Как показано на графике ниже, большинство онлайн-игр не особо требовательны к пропускной способности восходящих и нисходящих каналов.

Таким образом, если восходящий канал вашего интернет-соединения равен 2 Мб/c, у вас не должно возникнуть проблем. Если, конечно, не скачивать файлы или обновлять приложения во время игры.

Для онлайн-игр подойдёт и WiFi.

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

Для WiFi (беспроводной локальной сети) характерна нестабильность. Частота 2.4 Гц обычно переполнена, а частота 5 Гц имеет меньший радиус действия, и низкая пропускная способность быстро приводит к перегрузке сети.

Ещё одним минусом WiFi является тот факт, что если у вас установлена точка доступа MU-MIMO, ваши клиенты не могут взаимодействовать с ней одновременно. Это приводит к увеличению задержки, поскольку ваш ПК вынужден ожидать «своей очереди», что чревато потерей пакетов данных.

Так что каким бы удобным ни выглядел WiFi, он ни в коем случае не подходит для онлайн-игр.

В Call of Duty используются пиринговые сети.

Игры из серии Call of Duty никогда не использовали одноранговые сети. Некоторые проекты франшизы CoD использовали только выделенные сервера, тогда как в других применялась смесь выделенных и локальных серверов (где хостом матча выступал компьютер определённого игрока).

Ингредиенты хорошего неткода

Использование лучшей модели сети

Пиринговые сети – это идеальный вариант для спортивных симуляторов или файтингов формата 1х1, тогда как для остальных игр необходимы выделенные сервера, эксплуатация которых сопряжена с серьёзными затратами.

Геймплей должен быть отзывчивым

Высокий тикрейт и частота обновлений позволят снизить уровень задержек и избавиться от «суперпуль» (с накопленным уроном).

Защита

Дизайн сети должен гарантировать безопасность (не доверять клиентам), чтобы ликвидировать возможность использования читов и хаков.

К тому же большинство игроков желает, чтобы игра не выставляла их IP-адреса на всеобщее обозрение (для этого необходимы выделенные сервера).

Низкие задержки – ключ к успеху

В процессе матчмейкинга игра не должна смешивать людей с низкими и высокими пингами.
Если в игре используются выделенные сервера, разработчики должны позаботиться о том, чтобы все игроки имели доступ к серверам с низким пингом. В противном случае это приведёт к волне недовольства. Ведь никому не понравится игра с пингом 150 мс (или выше), а геймеры с пингом 20 мс вряд ли будут в восторге, если выстрелы игроков с высоким пингом будут доставать их даже в укрытиях.

Ограничение компенсации лагов

Даже если матчмейкинг продуман таким образом, что к игре допускаются игроки с более-менее равным пингом, нет никаких гарантий, что в процессе матча у одного из них внезапно не вырастет пинг. Важно сделать так, чтобы компенсация лагов происходила в разумных пределах – другие игроки не должны страдать от проблем с соединением одного-единственного участника.

Не перегружайте домашние сети

Количество передаваемых пакетов в секунду порой бывает важнее пропускной способности сети. Если игра привязывает частоту отправки пакетов клиента к частоте смены кадров, то это может привести к тому, что частота отправки достигнет 200 Гц или выше. С этим столкнулись игроки Quake Champions, в мультиплеере которой происходили неприятные телепортации персонажей. Геймеры смогли решить эту проблему, только снизив частоту смены кадров.

Уведомляйте игроков о том, что что-то пошло не так

Игроков разочаровывает неотзывчивый геймплей в онлайн-режиме, и они в первую очередь винят в этом игру и её разработчиков. Поэтому создатели должны объяснять, в чём заключается проблема: в соединении игроков или в недоработках самой игры. Если дело в проблеме игрового сервера, необходимо сообщить об этом игрокам, чтобы они могли найти другой сервер для комфортной игры.

Похожие записи