Что такое ping и jitter в скорости интернета
Что такое сетевой джиттер и как его предотвратить?
Что такое джиттер?
Джиттер или дисперсия задержки пакета это термин, используемый для обозначения колебаний задержки при передаче пакетов по сети. Таким образом, джиттер является изменяющейся скоростью задержки в сети и измеряется в миллисекундах. Например, если у вас есть два компьютера, которые общаются друг с другом в офисе, произойдет обмен пакетами данных. В исправных сетях эти пакеты будут проходить с постоянным интервалом (примерно 10 мс задержки на пакет).
В сети, испытывающей дрожание, уровень задержки во время передачи будет колебаться и может привести к задержке 50 мс при передаче пакетов. Конечный результат перегрузка сети, когда устройства борются за одно и то же пространство. Чем больше трафика перегружено, тем больше вероятность потери пакетов..
На изображении выше изображен диалог VoIP, в котором пакеты преобразуют звук голоса пользователя и транспортируют его в конечный пункт назначения. Как вы можете видеть с левой стороны, пакеты проходят через интервалы без изменений. Однако с правой стороны компоновка пакетов была нарушена, и конечный пользователь получает пакеты вне времени. Это приводит к аудио, которое трудно различить и понять.
Что такое приемлемый джиттер?
Хотя дрожание далеко не идеально, во многих случаях небольшое дрожание в вашей сети не окажет заметного влияния на вашу связь. Иногда возникают аномальные колебания, которые не имеют длительного эффекта. В этих случаях джиттер не является большой проблемой. Cisco предполагает, что приемлемые уровни дрожания или уровни допуска дрожания являются следующими:
В идеале, вы должны стараться держать джиттер ниже 20 мс для лучшей производительности. Если ваш джиттер превышает 30 мс, это будет заметно влиять на качество ваших разговоров в реальном времени. На 30 мс или старше вы начнете испытывать искажения, которые сделают другого пользователя более трудным для понимания.
В случае, если ваш джиттер, потеря пакета или задержка превысят показатели, перечисленные выше, вам следует немедленно предпринять действия, чтобы найти причину проблемы. Поддерживая эти ключевые показатели ниже пороговых значений, вы можете гарантировать, что важные службы, включающие видеозвонки и VOIP-звонки, не испытывают серьезных проблем с производительностью.
Как джиттер влияет на сеть?
Эффект джиттера зависит от услуги, которую вы используете. На некоторых сервисах дрожание не будет очень заметным, но на других, таких как VoIP-звонки и видеозвонки, оно будет гораздо более выраженным. Джиттер оказывает наибольшее влияние на услуги реального времени, такие как трафик VoIP. Когда вы разговариваете по телефону VoIP, вы общаетесь с другим пользователем вживую, и все, что вы слышите, должно быть кристально чистым. Это означает, что поступающие аудиосигналы должны поддерживаться в последовательности, чтобы оставаться понятными.
То же самое нельзя сказать о загрузках файлов, когда вы не сможете определить, вызвало ли дрожание пакеты, которые были задержаны или скремблированы. Для разговоров по VoIP, что-либо меньшее, чем доставка сигнала в реальном времени, приведет к разговору с неразборчивыми аудиосигналами. Пропуски в аудио и шаткие звуковые сигналы характерны для джиттера, принимающего разговор.
Почему джиттер является такой проблемой для телефонных звонков VoIP?
Всякий раз, когда обсуждается дрожание сети, телефонные звонки VoIP являются одной из наиболее часто упоминаемых областей, где дрожание является вредным. Это в первую очередь из-за способа передачи данных VoIP. Когда вы говорите в VoIP телефон ваш голос преобразуется в данные, которые передаются через Интернет. Ваш голос разбивается на множество разных пакетов и затем передается вызывающему абоненту на другом конце.
Однако, пока ваши сегментированные речевые данные находятся в пути, они конкурируют с диапазоном другого трафика, проходящего через вашу сеть. Все эти данные влияют на сетевые ресурсы, что иногда приводит к задержке. Эта задержка может не проявляться при загрузке файла, но когда ваш голос проходит через неорганизованные пакеты, это может привести к путанице и искажению того, что вы первоначально сказали пользователю.
Напротив, когда вы отправляете электронное письмо, пакеты повторно собираются непосредственно перед тем, как они достигают пользователя на другом конце. С вызовами VoIP на это нет времени, и поэтому ваш голос звучит не по порядку. Именно по этой причине VoIP является одной из ключевых проблем, когда речь идет о дрожании сети, поскольку он является одним из наиболее восприимчивых. Это верно и для других сервисов реального времени, таких как видеозвонки и видеоигры..
Одной из наиболее распространенных причин дрожания услуг VoIP является отсутствие приоритетов пакетов. Если голосовые пакеты не имеют приоритета, то конечный пользователь, скорее всего, получит дрожание. Решение заключается в том, чтобы перейти к маршрутизатору и определить приоритеты пакетов, которые передаются по сети (подробнее о расстановке приоритетов мы рассмотрим ниже).
Как найти джиттер с помощью инструментов мониторинга сети
Мониторинг джиттера очень важен, потому что он позволяет вам действовать в тот момент, когда он становится проблемой. Это также дает вам контекст проблемы производительности, чтобы вы могли проводить информированное устранение неполадок в будущем. Благодаря появлению возможности дрожания сети ваши усилия по устранению и предотвращению дрожания сети в будущем будут более информированными и эффективными..
В следующем разделе мы рассмотрим, как вы можете использовать инструменты мониторинга сети для реализации мониторинга QoS. Следя за проблемами производительности, такими как дрожание и задержка, вы сможете определить, когда ваша сеть работает хорошо и когда вам нужно вмешаться.
Вот два лучших инструмента для борьбы с дрожанием сети:
Мониторинг QoS для джиттера: PRTG Network Monitor (БЕСПЛАТНАЯ ПРОБНАЯ ВЕРСИЯ)
Paessler PRTG Сетевой монитор предлагает ряд функций, которые очень полезны для мониторинга джиттера. Инструмент включает в себя QOS датчик прохождения сигнала, Односторонний датчик QOS, Cisco IP SLA Sensor, и, в частности, Датчик дрожания пинга предназначен для измерения степени влияния джиттера на ваш сервис. Датчик Ping Jitter отправляет ICMP-запросы на URL для определения статистического значения джиттера и времени выполнения.
Результат показан на циферблатах с прозрачным цветом, как показано на рисунке выше. Эта функция полезна для тех, кто хочет определить, насколько сильно дрожание влияет на ключевой сервис. Также вы можете использовать PRTG Сетевой монитор настроить свои собственные уникальные оповещения, чтобы уведомлять вас, когда у службы возникают проблемы с производительностью. В реальной среде это помогает вам быстро реагировать на дрожание, когда оно происходит. Вы можете попробовать Paessler Ping Jitter Sensor который поставляется в комплекте в Paessler PRTG Сетевой монитор на 30-дневную бесплатную пробную версию.
Сетевой монитор Paessler PRTG с датчиком Ping Jitter Скачать 30-дневную бесплатную пробную версию
Мониторинг QoS для телефонов VoIP: VoIP SolarWinds & Менеджер качества сети (БЕСПЛАТНАЯ ПРОБНАЯ ВЕРСИЯ)
Учитывая, что дрожание сети является проблемой, которая очень проблематична для вызовов VoIP, принятие Решение по мониторингу QoS для VoIP поможет вам устранить неполадки для поддержания этой важной службы. Инструменты сетевого мониторинга, такие как SolarWinds VoIP & Менеджер по качеству сети позволяют измерять такие показатели, как дрожание, задержка, и потеря пакета которые влияют на конечную производительность вызовов VoIP.
SolarWinds VoIP & Менеджер по качеству сети Это хороший выбор, потому что он не только отслеживает эти метрики, но и активно уведомляет вас при обнаружении джиттера. Это означает, что вы будете получать оповещение каждый раз, когда выполнение вызова падает против любого количества предопределенных параметров. Знание того, как именно ваш звонок терпит неудачу, позволяет вам устранять неполадки с гораздо большей информацией. SolarWinds VoIP & Менеджер по качеству сети доступна на 30-дневную бесплатную пробную версию для оценки.
SolarWinds VoIP & Диспетчер качества сетиСкачать 30-дневная БЕСПЛАТНАЯ пробная версия
Как предотвратить дрожание
Конечно, как только вы обнаружите, что у вас есть дрожание сети, вам нужно будет принять меры для его устранения. Есть несколько различных способов сделать это от приоритезации определенного трафика до развертывания буфера дрожания. В этом разделе мы собираемся обсудить некоторые из наиболее распространенных способов борьбы с дрожанием сети и вернуть сеть к полной работе..
Самое замечательное в большинстве этих техник состоит в том, что они удваиваются, чтобы уменьшить задержку. Некоторые из приведенных ниже шагов позволяют вам «убить двух зайцев одним выстрелом», чтобы устранить задержки и дрожание одновременно. Перед выполнением любого из этих изменений вы должны быть абсолютно уверены в влиянии джиттера на вашу сеть (идентифицируя его с помощью инструмента сетевого мониторинга).
Буферы джиттера для минимизации джиттера
В контексте VoIP или видеовызова это привело бы к меньшему дрожанию и разговору, который остается понятным для обеих сторон. Буфер дрожания будет задержать пакеты данных перед отправкой в попытке чтобы убедиться, что пакеты поступают в последовательности. В вызове VoIP конечный результат сводит к минимуму дрожание и перерывы в качестве вызова.
Однако важно отметить, что с помощью буфера дрожания вы будете увеличивать общую задержку в вашей сети. Удерживая пакеты буфер дрожания буквально добавляет задержку на службу. Аналогично, вы должны быть осторожны с настройкой буферов дрожания при реализации полнодуплексной связи. В результате вы хотите проверить канал передачи перед развертыванием буфера дрожания.
Основная проблема с буферами дрожания состоит в том, что они являются решением проблемы с полосой. Они не обращаются к основной причине дрожания, они только обращаются к признакам. Если вы хотите полностью устранить дрожание сети, вам нужно углубиться в сердце вашего маршрутизатора. Добавление новых настроек QoS позволит вам начать решать корень проблемы и улучшить свой сервис.
Настройки QoS: расстановка приоритетов пакетов
Для поддержки вызова VoIP и обеспечения наилучшего качества вам необходимо убедиться, что любые пакеты, содержащие медиаданные VoIP, имеют приоритет над другим трафиком. Вы должны установить канал передачи данных с «высоким приоритетом», чтобы этот трафик обрабатывался раньше всего. В случае перегрузки канала передачи данных неприоритетный трафик будет отброшен до приоритетного трафика..
Чтобы расставить приоритеты VoIP-трафика, вы можете приоритезировать транспортный протокол в реальном времени (RTP) пакеты. Как это сделать, будет зависеть от дизайна вашего роутера. Например, на маршрутизаторе Linksys вы можете перейти к представлению QoS в веб-интерфейсе. Чтобы расставить приоритеты RTP-трафика, вы должны ввести следующее номера портов:
После перезапуска трафик RTP будет более привилегированным, чем любой другой трафик. Независимо от того, какое устройство вы используете, вы хотите сохранить настройки как можно более простыми, чтобы не перегружать свои конфигурации.
Другие решения
Здесь мы рассмотрим некоторые другие решения, которые, тем не менее, не являются наиболее распространенными способами предотвращения дрожания сети, тем не менее, заслуживают рассмотрения..
1. Купите новый, более мощный маршрутизатор
Если ваш маршрутизатор недостаточно мощный, чтобы справиться с текущими сетевыми требованиями, неудивительно, что вы испытываете дрожание. Покупка нового маршрутизатора может быть одним из самых быстрых способов улучшить ваш сервис и устранить дрожание сети. Однако вы должны убедиться, что тщательно изучили свой новый маршрутизатор перед его развертыванием. Самое главное, чтобы убедиться, что он имеет пропускную способность для хорошей обработки вашего сетевого трафика.
2. Увеличьте пропускную способность или перейдите на высокоскоростное подключение к Интернету.
В ряде случаев проблема заключается не в вашей инфраструктуре, а в скорости вашего соединения. Низкие скорости соединения имеют тенденцию создавать дрожание, особенно при совместном использовании полосы пропускания с другими устройствами. Увеличение пропускной способности вашего текущего интернет-провайдера или смена поставщиков услуг может привести к заметному улучшению обслуживания, которое устраняет дрожание.
QoS останавливает дрожание сети
В большинстве случаев дрожание сети не является большой проблемой. Однако, если вы начнете использовать расширенные сервисы, такие как системы VoIP-телефонов и программное обеспечение для видеоконференций, вам, скорее всего, потребуется внедрить QoS для управления дрожанием сети. Даже если вы не страдаете от джиттера в сети, оставайтесь на связи и следите за качеством своих услуг с помощью монитора производительности сети, чтобы убедиться, что джиттер не станет нерешенной проблемой.
Как только дрожание сети становится очевидным, измерьте, насколько оно сильное. Если он превышает пороговые значения, указанные Cisco, тогда стоит вмешаться и принять меры. Вы можете сделать это, установив приоритет передачи критических пакетов и развернув буфер дрожания. Хотя обновление пропускной способности также является возможным решением, оно часто лучше оптимизировать текущую пропускную способность, чем просто покупать больше пропускной способности.
Принимая упреждающий подход к смягчению последствий дрожания сети, вы убедитесь, что в следующий раз, когда вы общаетесь с клиентом или коллегой, весь разговор протекает естественно. Помните, что плохое голосовое общение не только неудобно, но и потенциально может стоить вам значительной суммы денег (особенно если вы общаетесь с клиентом!). Инвестирование в инструменты мониторинга сети и другие решения теперь поможет вам сэкономить деньги в будущем.
Лаги, джиттер и потеря пакетов: откуда берутся проблемы с неткодом и как их решать
Если вы когда-либо играли в онлайн-игры, то наверняка знаете о лагах не понаслышке. Пропущенный выстрел, который должен был попасть в цель; мяч, резко меняющий направление прямо в воздухе; вы вдруг снова оказываетесь на несколько шагов назад в том месте, где находились секундой ранее. В этом нет ничего сверхъестественного: это обычные артефакты систем, обеспечивающих совместную игру с людьми из других стран почти так же эффективно, как и с соседом по комнате. По крайней мере, большую часть времени.
В этой статье речь пойдет о самых базовых вещах, почему вообще возникает сетевая задержка, с какими еще проблемами неткода можно столкнуться, а также с тем, что можно сделать со своей стороны, чтобы улучшить ситуацию. Также разберем остальную часть конвейера между ПК и игровым сервером, который может повлиять на получение лучшего игрового опыта без задержек и прочих неприятностей.
Итак, почему вообще возникают лаги? Почему в 2021 году это все еще является проблемой — с мощностью современных компьютеров, повсеместным использованием широкополосного Интернета и спустя десятилетия попыток разработчиков решить эту проблему?
С точки зрения разработчиков, реализация даже базового мультиплеерного режима — задача непростая. Необходимо получать данные от множества игроков одновременно, неоднократно — тысячи раз в секунду — передавать эту информацию на некий центральный сервер, а затем возвращать обработанный результат на ПК каждого игрока.
Состояние игры должно быть идеально синхронизировано с минимальной задержкой независимо от того, имеете ли вы дело с игроками в одной локальной сети или с разных континентов. Поэтому вам придется придумать способ компенсации задержки игроков. При этом лучше избегать необходимости ожидания игроками, пока сервер сообщит им результаты их же собственных действий, ведь динамике это на пользу не пойдет. Для этого вам, вероятно, потребуется показать эффекты ввода каждого игрока сразу же, а затем уже сглаживать любые различия между ПК игрока и сервером таким образом, чтобы это было внешне неочевидно.
Мы не можем знать, что делают другие игроки, пока сервер не сообщит нам об этом. Поэтому мы вынуждены отображать действия других игроков в матче такими, какими они были в прошлом. Также достаточно большую проблему может составить читерство, поэтому необходимо убедиться, что игроки имеют ограниченный доступ к данным с сервера, не позволяющий компьютеру игрока принимать решения о том, что на самом деле произошло в игре — например, насколько успешен был выстрел или какое количество здоровья осталось у игрока.
С двумя-то игроками это реализовать достаточно сложно, а теперь представьте, каково организовать подобное для игры с 10, 20 или даже сотнями игроков на одном сервере. При разработке игры жанра battle royale со всеми ее особенностями реализация хорошего мультиплеера является одной из самых сложных частей разработки даже для опытной команды, поэтому неудивительно, что временами в игре могут возникать сетевые проблемы. Конечно, это не делает такие сбои менее раздражающими, и чем быстрее скорость и выше конкуренция в игре, тем больше такой опыт может помешать вам получить от нее удовольствие.
Помимо лагов и сбоев, могут возникнуть и другие проблемы с сетью: rubber banding, когда игровой мир возвращает вас туда, где вы были несколько секунд назад; получение урона сразу после того, как вы оказались за укрытием; промахи ваших собственных выстрелов, а то и вовсе потеря связи с игрой.
Так что же вызывает все эти проблемы?
Обычно в играх можно столкнуться с тремя сетевыми явлениями, каждое из которых по-разному влияет на пакеты данных с вашими вводами и игровые состояния, которые передаются между вашим компьютером и сервером.
Первое из них — задержка. Она возникает тогда, когда пакеты с данными слишком долго передаются серверу и затем возвращаются к игроку. Проще говоря, задержка — это скорость реакции вашего интернет-соединения, то есть время, необходимое для передачи данных с вашего устройства на сервер. Важно отметить, что задержка зависит от качества вашего интернет-соединения, а не от скорости.
Часто задержку путают с лагами, и хотя они не означают одно и то же, но имеют причинно-следственную связь. Лаг — это задержка прибытия пакета от источника к месту назначения или, с точки зрения геймплея, задержка между нажатием кнопки и ответом игры, выведенным на экран. То есть, по сути совокупность вообще всех явлений, которые происходят между этими двумя событиями.
Джиттер — это колебания задержки, означающие, что пакеты отправляются и принимаются с разной скоростью. Это похоже на плохой frame pacing: то ваш пинг меняется с 20 миллисекунд до секунды, то с секунды до 90 миллисекунд, а затем возвращается к 30 миллисекундам, которые были когда-то уже давно.
Потеря пакетов — это когда пакеты вообще не достигают места назначения. Она вызывает необходимость повторной отправки одних и тех же данных и и потенциально — странное поведение игры.
Конечно, наличие даже одной из этих проблем может довольно сильно раздражать. С точки зрения игрока, если вы не чувствуете, что контролируете игру, если ваша производительность страдает от проблем с сетью, велика вероятность, что вы просто закроете игру и больше в нее не зайдете. Для разработчиков и издателей это будет означать, что аудитория станет меньше, а если у вас free-to-play тайтл, это поставит под угрозу само его существование. Особенно важно это для соревновательных игр, поскольку любые повторяющиеся проблемы могут заставить игроков и организаторов турниров отказаться от их проведения до тех пор, пока проблемы не разрешатся.
Так почему же возникают подобные сбои?
Существуют три основных типа проблем с соединением:
проблемы «первой мили», вызванные домашней сетью вашего ПК и подключением к Интернету;
проблемы «средней мили», обусловленные перемещением данных по маршруту между вашим интернет-провайдером и игровым сервером;
проблемы «последней мили», связанные непосредственно с игровым сервером.
Обычно первая и последняя миля вызывают наименьшую задержку — в нашем примере это около одной миллисекунды. Средняя же миля имеет наибольшую задержку, ведь именно на ней пакеты преодолевают все географическое расстояние между вашим компьютером и сервером.
Начнем с того, что может улучшить со своей стороны сам игрок, — с проблем, связанных с ПК и домашней сетью.
Точно так же, как производительность игры ограничивается компонентами ПК, такими как центральный процессор или видеокарта, сетевое соединение тоже зависит от многих элементов. На то, как будут отправляться и приниматься пакеты данных, могут влиять настройки игры, сетевое оборудование вашего ПК и его драйверы, ваша операционная система и ее настройки. Но есть и физические аспекты — например, то, как ваш компьютер подключен к роутеру, какой у вас роутер и как он настроен — и, конечно же, подключение к Интернету, предоставляемое провайдером.
Пожалуй, наиболее важным для игр является переключение с беспроводного на проводной Интернет, что может значительно снизить задержки, джиттер и потерю пакетов. Помимо этого, возможно, стоит изучить роутеры с более гибко настраиваемой прошивкой — например, отдать предпочтение роутерам OpenWRT или pfSense — или просто повысить скорость вашего интернет-соединения — особенно в домашних условиях, где оно используется несколькими людьми, которые могут смотреть потоковые видео, загружать файлы из Интернета и выполнять другие задачи с высокой пропускной способностью одновременно. В идеале роутер должен иметь возможность отдавать приоритет критическим с точки зрения задачам, таким как онлайн-игры и видеоконференции, по сравнению с такими вещами, как воспроизведение видео с YouTube.
Наконец, полезно будет убедиться, что драйвера обновлены, вы отключили все приложения, которые используют значительный объем ЦП или пропускной способности сети в фоновом режиме, а также что сетевые настройки игры установлены правильно.
Теперь поговорим о средней миле, где у вас нет особого контроля над тем, что происходит, ведь пакет данных, отправляемый вашим компьютером, выходит в более широкий Интернет.
В первую очередь ваш пакет должен обработать местный интернет-провайдер. Но совсем скоро он перейдет к оптоволоконным магистралям, которые соединяют города и страны друг с другом. Здесь маршрут, по которому идет пакет, не обязательно окажется самым быстрым, и нет никакой гарантии, что пакет вообще доберется до конечного пункта назначения. Помните, что предшественник Интернета был разработан министерством обороны США для работы в условиях ядерной войны. Таким образом, доставляемость для него важнее скорости.
Сами маршруты со временем могут перенасыщаться и повреждаться, а потому изменяться. Так, вы можете обнаружить, что ваше соединение с определенным сервером может оказаться быстрым и надежным в один день, но на следующий уже совсем никуда не годится.
Так что же могут сделать разработчики игр для оптимизации на этом участке? Географическое расстояние критически влияет на пинг, поэтому можно открывать новые игровые серверы, которые находились бы в недостаточно обслуживаемых регионах базы игроков. Это уменьшит задержку для этих игроков и вероятность того, что какое-то соединение между игроком и сервером замедлится или полностью выйдет из строя. Но, конечно, запускать серверы повсеместно может оказаться непросто, особенно для небольшой компании с ограниченными ресурсами — да и это не решит всех проблем.
Другая идея состоит в том, чтобы вообще не полагаться на общедоступный Интернет для передачи пакетов от игрока к серверу — вместо этого пакеты могут передаваться через частные оптоволоконные маршруты, которые арендуют разработчики или их партнеры. Это дорого, но при использовании таких выделенных полос вы будете меньше зависеть от периодов занятости в вечернее время, когда возможны более высокие пинги и, как следствие, снижение надежности сетевого соединения.
Такой контроль над маршрутизацией также открывает некоторые интересные возможности для киберспорта, где отборочные и другие важные матчи проводятся онлайн. Можно настроить маршрутизацию и выбрать расположение сервера так, чтобы у обеих команд был одинаковый пинг, даже если одна из них находится географически ближе к серверу, и тем самым обеспечить участникам более справедливую игру.
Наконец, перейдем к последней миле в цепочке — игровым серверам.
До сих пор мы предполагали, что имеем дело с игроками, подключенными к одному выделенному серверу для проведения матча, поскольку часто это обеспечивает наилучший опыт. Так разработчики игр или их партнеры могут гарантировать, что на каждом сервере достаточно оборудования и обеспечивается самое быстрое подключение к Интернету, но есть и другие варианты.
Client hosting — это когда ПК одного из игроков сам по себе выступает в качестве сервера. Это хороший способ для разработчиков игр минимизировать затраты, но опыт каждого участника матча будет зависеть от качества соединения игрока-хоста. Таким образом, если такие игроки подключаются к сети через Wi-Fi или вовсе испытывают проблемы с подключением, другие игроки тоже столкнутся с лагами, джиттером и потерей пакетов.
Назначенный хост также имеет нулевую задержку для сервера, что дает ему огромное конкурентное преимущество перед остальными и, конечно, не является идеалом для соревновательных игр. При этом, если он покидает игру, необходимо найти другого хоста, что прерывает игру для всех участников на несколько секунд, пока не поизойдет так называемая миграция хоста.
Другой вариант — одноранговая (peer-to-peer) сеть, где игроки напрямую подключается друг к другу. Как правило, в таком случае тоже существует некий хост, который номинально отвечает за обработку новых соединений, поэтому проблема с миграцией хоста в данном случае сохраняется.
Помимо различных архитектур серверов, разработчикам игр необходимо оптимизировать пакеты, которые отправляются каждому игроку и обратно, и выбирать, как часто будет обновляться игровой мир. Чем чаще это происходит, чем выше частота тиков, тем быстрее должна выполняться обработка состояния игры на ПК игрока и на сервере, но в целом игра при этом становится более отзывчивой.
Некоторые игры работают с переменным весом тиков — например, королевские битвы, в которых скорость тиков повышается по мере выбывания игроков, или Counter-Strike, где сторонние и киберспортивные матчи проводятся со скоростью 128 тиков в секунду по сравнению со встроенным в игру матчмейкингом, работающим на 64 тиках.
Матчмейкинг — наиболее важная часть мультиплеера. Чтобы свести игроков в одном матче, вам, как разработчику игры, понадобится учитывать такие факторы, как пинг, уровень навыков, количество игроков в группе и выбранные каждым игроком карты и режимы. Каждый новый фактор существенно уменьшает размер пула для подбора игроков — что, в свою очередь, увеличивает время ожидания игры в среднем.
Даже небольшие инженерные улучшения или улучшенная маршрутизация в состоянии помочь с матчмейкингом, если это увеличит пул игроков — и, следовательно, позволит улучшить игровой опыт, не увеличивая время ожидания.
Наконец, последнее — методы борьбы с лагами, которые разработчики могут реализовать со своей стороны в коде.
Так называемое предсказание на стороне клиента часто используют в шутерах от первого лица. Его можно разделить на предсказание ввода и расчет траектории (dead reckoning): первое будет скрывать задержку действий самого игрока, в то время как второй — других игроков.
Предсказание ввода подчиняется следующей последовательности: клиент генерирует команду игрока, которая передается на сервер, где происходит вычисление следующего состояния игры, после чего оно отправляется обратно всем клиентам, и каждый из них отображает сцену на своем устройстве. Но все это время игроку тоже нужно что-то показывать, поэтому суть метода состоит в выполнении перемещения клиента локально, просто предполагая, что сервер примет команду. Недостатком его является то, что, если ответ сервера не будет соответствовать прогнозу клиента, возникнет резкое заметное изменение положения аватара игрока на экране.
Dead reckoning — это, по сути, алгоритм оценки положения объекта в виртуальном мире на основе его предыдущего положения, направления движения, скорости, ускорения и других параметров. Получив первый блок данных протокола состояния (protocol data unit, PDU) для объекта (например, персонажа другого игрока), каждый клиент начинает перемещение этого объекта, применяя согласованный алгоритм dead reckoning. Его движение обновляется при получении последующих PDU. Если для пакетов, несущих PDU, возникнет увеличенная задержка или вовсе их потеря, каждая копия виртуального мира продолжит показывать движение объектов в соответствии с алгоритмом до тех пор, пока не получит следующее обновление. Кроме того, при несоответствиях между статусом сервера и предсказанным клиентом некоторые игры могут сделать переход к новому статусу менее резким, используя алгоритмы сглаживания.
В дополнение к предсказанию клиента сервер может прибегать к методу компенсации сетевой задержки, чтобы правильно объединить виртуальные реальности, которые из-за проблем с неткодом испытывают рассинхронизацию. В таком случае сервер хранит историю последних позиций игроков (так, серверы, на которых работает движок Valve Source, сохраняют позиции игроков в течение 1 секунды), и когда ему нужно вычислить новое состояние, он сначала оценивает момент, когда действие было выполнено в клиентской версии состояния игрового мира. Другими словами, сервер «перематывает время» в соответствии с задержкой конкретного клиента, вычисляя выполнение введенной им команды (например, удалось ли выстрелу игрока поразить цель). Для этого используется следующая формула:
Время выполнения команды = Текущее время сервера — Задержка пакета — Интерполяция представления клиента
Иллюстрация выше представляет собой пример скриншота, сделанного на сервере сразу после того, как он подтвердил обращение. Красный хитбокс показывает позицию цели на клиенте, как это было некоторое время назад. Пока команда игрока (то есть, выстрел по цели) добиралась до сервера, цель продолжала двигаться влево. После того, как команда прибыла на сервер, для расчета факта попадания сервер восстанавливает позицию цели (синий хитбокс) на основе предполагаемого времени выполнения команды. Так сервер отслеживает траекторию выстрела и подтверждает или не подтверждает попадание.
Впрочем, иногда такой алгоритм приводит к ошибкам попадания, когда цель уже скрылась за укрытием. Эту проблему можно было бы решить, если бы клиент мог послать сообщение «попадание» вместо сообщения «выстрел». Однако серверы не могут разрешить клиентам сообщать о попаданиях по соображениям безопасности: некоторые клиенты могут этим воспользоваться в собственных целях и прибегнуть к читерству.
Мы рассмотрели основные причины различных задержек и других нежелательных аспектов производительности сети. Как у игрока, у вас есть немало опций, которые могут значительно улучшить качество вашего игрового опыта. Надежное сетевое соединение может сделать игру намного стабильнее и интереснее. Также мы рассмотрели варианты, что со своей стороны могут сделать разработчики и как они могут повлиять на игровой процесс.
Для получения дополнительной информации о лагах и о том, что вы можете с ними сделать, можно ознакомиться с каналом Battle(non)sense: там разбираются тесты сетевых проблем в разных играх и то, как разные технологии на них влияют. Прилагаем также и другие ссылки на видео и статьи о сетевом коде ниже: