Вирус не принимает пакеты

Обновлено: 27.03.2024

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

Есть что рассказать? Остались вопросы? Поделитесь своим словом с другими нашими читателями. Вам не убудет, а им будет больше актуальной информации. Спасибо! Комментарии расположены прямо под этой статье.

Коротко по ситуации

Для передачи данных на сетевом уровне (отсылка к модели OSI про 7 уровней) данные передаются ПАКЕТАМИ. При определенных обстоятельствах эти ПАКЕТЫ могут теряться в сети (т.к. за качество передачи отвечает уже вышестоящие уровни, а здесь еще контроля нет). Итого, представим ситуацию:

  • Ваш тарифный план – 100 Мбит/с.
  • У вас каждый третий пакет теряется.
  • Итоговая скорость со всеми огрехами – в районе 60 Мбит/c.

Обидно? Еще бы. И самое страшно, на том или ином уровне эта проблема проявляется у всех. Но местами она бывает совсем недопустимой. Вот и попробуем ее выявить и устранить.

Основные причины

Мы выяснили, что пакеты пропадают – и это вообще нормально. Но почему это происходит? Здесь я попробую установить некий порядок. Не претендую на первоистинность, но именно так можно начинать проводить первичную диагностику на утечки:

Проверки

А теперь переходим к непосредственной проверке потерь. Ведь нужно же с чего-то это все начать?

Шаг 1 – Скорость интернета

Не профессионально, но зато практично:

  • Отключаем все устройства дома от вашего интернета (да-да, не ленимся, физически и из розетки), кроме того, с которого будем производить замер.
  • Вспоминаем, какую скорость интернета обещал вам провайдер (в моем случае сейчас – 100 Мбит/с).
  • Идем на любой тестировщик скорости (например, Speedtest ) и смотрим результат:

Speedtest

В моем случае прямо сейчас с рабочего ноутбука цифры вполне себе даже нормальные. А вот если бы было что-то вроде 60 Мбит/с, я бы уже задумался о проблеме. Но не одним замером можно установить проблему.

Шаг 2- Пингуем

Этими командами мы отправляем по 4 пакета до DNS Гугла, DNS Clouflare, сайта Яндекса, сайта Гугла и нашего сайта соответственно. Смотрим результаты, все пакеты должны доходить, потерь быть не должно. Возможно, здесь удастся вычислить примерное направление возникновения потерь.

ping

Как видите, и здесь потерь нет.

Утилита ping существует в Linux и в MAC. Так что на любом железе можно отпинговать все сомнительные участки сети.

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

Для разбирающихся, рекомендую пошаманить над командой пинг следующими параметрами: -t – бесконечная отправка пакетов, -l – размер пакета. В моей практике были случаи, что роутер не пускал размеры пакетов выше порогового. Бывает редко, но на всякий случай оставлю эту информацию здесь.

Шаг 3 – Трассировка

Допустим, мы знаем, что на пути до роутера (192.168.0.1) уже теряются пакеты. Задача – на всякий случай просмотреть все узлы до него в сети, увидеть как идет наш запрос:

tracert

Другие программы

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

Краткий чеклист проверок

Если вы уже попробовали все (а обычно так в поиске причины и бывает), рекомендую еще пробежаться вот по этому списку. Авось приедет какая-то умная мысль в голову:

  • Проверка антивирусом. Желательно автономным вроде CureIt! (считаем рекламой, сам пользуюсь).
  • Ставим любой экран и пытаемся вычислить программу, которая спамит сеть. Бывает зараза, а бывает просто обновлятор Windows не может успокоиться.
  • Обновляем драйвера не только на сеть (DRP и аналоги в помощь). Если же наоборот проблема началась после обновления, рекомендую найти предыдущие версии и сделать откат. У меня была подобная проблема с драйверами разработчиков, откат помог.
  • Используем безопасный режим на тестах сети, дабы не грузить чего-то левого.
  • Другой кабель.
  • Ручное назначение IP и смена MAC-адреса. А мало ли…
  • Дешевая сетевая карта. Если есть возможность воткнуть на тест другую сетевуху – пробуем.
  • Крайние случаи – меняем Windows, обновляем или просто сбрасываем BIOS.
  • Пробуем другой роутер или напрямую.
  • По возможности – диск текущей системы запускаем на другом железе. Исключаем программные ошибки ОС. Или загружаемся из-под Live образа.
  • Исключаем перегрев процессора – ну мало ли.

Личный опыт

Здесь я просто вынесу тезисы по личному опыту, на что следует обращать внимание:

Дополнение от Бородача

Бородач

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

Есть очень полезная программка WinMTR – она в реальном времени показывает трассировку до выделенного сервера. Например, вы играете в CS GO, Dota или другую онлайн игру и видите потерю пакетов. В моем случае, я видел, что есть просадка при игре в HOTS, поэтому давайте покажу на её примере.

WinMTR

  1. Пойдет живая трассировка до выделенного сервера. Давайте коротко расскажу про информацию, которая вам будет представлена:
    1. Nr – номер узла. Первый – это обычно идет локальный IP адрес вашего роутера (если он есть). Внешний не отображается. Далее обычно идут два или три узла вашего провайдера – это пару коммутаторов и выделенный сервер. По сути вам нужно смотреть на потерю пакетов у вас (или у вашего роутера), и у узлов вашего провайдера.
    2. Loss (%) – потеря пакетов в процентах.
    3. Sent – сколько отправлено пакетов.
    4. Recv – сколько получено пакетов.
    5. Best, Avrg, Worst – это лучшая, средняя и худшая задержка до выделенного узла.
    6. Last – последняя задержка.

    WinMTR проверка игры

    • Если вы подключены по Wi-Fi, то попробуйте переподключиться по проводу.
    • Выключите роутер из розетки, подождите так примерно минут 10 и включите снова, возможно он перегрелся и тупит.
    • Зайдите в настройки роутера и обновите его прошивку.
    • Обновите драйвера на сетевую карту или Wi-Fi модуль.
    • Если вы подключены к беспроводной сети 2,4 ГГц, то попробуйте использовать частоту 5 ГГц. Можно аналогично проверить каналы и выбрать свободный, если у вас много соседей.

    Если ничего из вышеперечленного не помогло, то проблема может быть и у провайдера. У меня были потери (17-30%) как раз на роутере. Я не мог понять, что с ним не так. Потом мой любимый Ростелеком отключил мне интернет из-за аварии на неделю, и после этого проблемы как не бывало, и лузов больше нет. Можно попробовать взять у друга роутер или подключить интернет напрямую в комп или ноутбук, и, если проблема сохранится, то значит нужно звонить провайдеру.

    Примерно месяца полтора-два назад заметил проблему: в играх/видео/музыке пропадают пакеты, в это время начинает с ума сходить пинг (кратковременно) и секунды через 3-5 всё опять работает. Проблема хаотичная, привязке ко времени нет (в 12.00 часов буднего дня, в 18.00 выходного дня - всё равно), но стабильно на 3-5 секунд (!!). В видео - полоска загрузки останавливается и через пару секунд снова начинает ползти, в музыке - кратковременно "зажёвывается" звук, радио - останавливается и либо включается само через несколько секунд, либо просто выключается, в мультиплауерных играх (заметно в Overwatch и Dota2 особенно) - человечки не откликаются на кнопки и движения мышки, по прошествии нескольких секунд - всё нормально. Проблема сохраняется как по Wi-Fi (несколько устройств тестировалось, интернет то вообще выкидывал, то долго отвечал), так и на ПК. Пробовал подключать кабель напрямую к ПК - проблема сохраняется. Пробовал перенастраивать роутер, защитника, брэндмаэур, драйвера, программы (грешил на Bonjour для Apple), антивирус (Avast) - ничего не помогло. Последний месяц монтажники провайдера Onlime (вызывал примерно 4-5 раза), операторы ТП через e-mail и операторы ТП по телефону (звонил примерно раз 5-8) пытались решить эту проблему - всё тщетно. То, что видят монтажники и те тесты, что они делали со своих ноутов - всё нормально. С моей стороны проблемы не видят. Со стороны ТП - так же проблем по логам нет. А проблема есть. И на сегодняшний день она сохраняется, хотя все пишут и отвечают что всё хорошо по логам и они не видят проблему. И дело в том, что она мелкая, хаотичная, надоедливая, но она Есть. Монтажники все говорят что связано это с улучшением тех. оборудования на районе до гигабитной (но что то я сомневаюсь, потому что обещали сделать до конца апреля, а вот май - и всё равно).

    Недели полторы назад (примерно) была создана и отправлена заявка в профильный отдел (через группу ВК), и через часа 4 пришло СМС что работы проделаны. Проблема сохраняется.
    На сегодняшний день так же пользуюсь роутером Ростелеком (белый ZTE), кабель идет через него в ПК. Стоит win 7.

    Буквально пару дней назад монтажники Onlime всё проверяли - и всё хорошо, кроме одного нюанса: пинг на 300 пакетов к гуглу - у меня несколько раз выскакивал ответ на 15мс с ПК, у монтажника через ноутбук такого не было, стандартно 4-5 (мой ПК через кабель с роутера, у монтажника был подключен так же кабелем с другого из выхода роутера).
    В целом, как я и говорил выше - идет долгий отклик (секунды 3-5 с поднятием пинга где то до ~20-25 и потерей пакетов), после чего все нормально.
    Прикладываю скриншоты команд tracert и pathping до яндекса и до Одного из многих, часто используемых мною, серверов игры (вдруг это поможет).

    Надеялся что за такое время проблема решится сама, но она не решается. И решить никто ее не может. Так же в группе ВК в переписке с оператором было сказано что проблема на Моей стороне, а именно на ПК - что проблема есть и по Wi-Fi почему то комментария не последовало.

    p.s: в своё время устанавливал Black Desert - поздно очнулся, нашел папку Thorn (пишут что плохая и вирусная) - удалил, реестр на неё зачистил.

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

    Что такое потеря пакетов?

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

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

    Что вызывает потерю пакетов в вашей сети

    Обнаружение потери пакета

      В Windows откройте окно командной строки и используйте команду ping для настройки вашего маршрутизатора. Например, если локальный IP-адрес вашего маршрутизатора 127.0.0.1, следующая команда будет проверять связь с маршрутизатором:

    В macOS или Linux откройте окно терминала и используйте следующую команду:

    В Windows вы можете использовать tcpdump через оболочку Bash в Windows 10 или запустить Wireshark.

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

    Определение причины потери пакета

    Чтобы определить основную причину потери пакетов, вы должны начать с самой простой проблемы, чтобы обнаружить и вернуться обратно.

    Сначала проверьте соединение Ethernet между устройствами. Проверьте наличие явных признаков физического повреждения и неправильного подключения. Эти кабели работают правильно? Решает ли переключение кабелей проблему? Проверьте маршрутизаторы и коммутаторы аналогичным образом.

    Как только вы определили причину потери пакета, есть два исправления, которые могут быть применены.

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

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

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

    Модем отправляет, но не принимает

    Для начала необходимо проверить следующее:

    Зайдите в Панель управления – Сеть и в ее свойствах проверьте прописаны ли у вас необходимые данные. Во многих случаях достаточно автоматических установок, однако иногда есть надобность в прописывании DNS или в случае со статическим IP-адресом – есть необходимость прописать его. Если вы знаете свой статический IP-адрес, то пропишите его. Если у вас адрес динамический, т.е. меняется после каждого переподключения, то прописывать ничего не нужно.

    Модем отправляет, но не принимает

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

    Проблемы могут возникать из-за отсутствия драйверов. Возможно драйвера не установлены, либо установлены криво. Проверьте это!

    Вы также можете взять LiveCD с операционной системой, загрузиться с нее и попробовать все еще раз. Вполне возможно, что ваши проблемы кроются в самой операционной системе!

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

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

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


    Итак, почему вообще возникают лаги? Почему в 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, возникнет увеличенная задержка или вовсе их потеря, каждая копия виртуального мира продолжит показывать движение объектов в соответствии с алгоритмом до тех пор, пока не получит следующее обновление. Кроме того, при несоответствиях между статусом сервера и предсказанным клиентом некоторые игры могут сделать переход к новому статусу менее резким, используя алгоритмы сглаживания.

    Время выполнения команды = Текущее время сервера — Задержка пакета — Интерполяция представления клиента


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

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

    Для получения дополнительной информации о лагах и о том, что вы можете с ними сделать, можно ознакомиться с каналом Battle(non)sense: там разбираются тесты сетевых проблем в разных играх и то, как разные технологии на них влияют. Прилагаем также и другие ссылки на видео и статьи о сетевом коде ниже:

    Читайте также: