что значит играть по сети
Настраиваем локальную сеть дома: оборудование, доступ к общим папкам и принтерам
Содержание
Содержание
Локальная сеть (Local Area Network, сокращенно LAN) — несколько компьютеров и гаджетов (принтеры, смартфоны, умные телевизоры), объединенных в одну сеть посредством специальных инструментов. Локальные сети часто используются в офисах, компьютерных классах, небольших организациях или отделениях крупных компаний. Локальная сеть дает большой простор для деятельности, например, создание умного дома с подключением саундбаров, телефонов, кондиционеров, умных колонок. Можно перебрасывать с телефона фотографии на компьютер без подключения по кабелю, настроить распознавание команд умной колонкой. Преимуществом является то, что локальная сеть — это закрытая система, к которой посторонний не может просто так подключиться.
Для чего нужна локальная сеть
Локальная сеть дает множество удобных функций для использования нескольких компьютеров одновременно:
Что нужно для создания локальной сети
Для создания собственной LAN-сети минимальной конфигурации достаточно иметь пару компьютеров, Wi-Fi роутер и несколько кабелей:
Нужное оборудование у нас есть, что дальше?
Сначала необходимо определиться, каким образом будут соединяться между собой компьютеры. Если используется проводной способ подключения, то подключаем все кабели к роутеру или коммутатору и соединяем их в сеть. Существует несколько способов создания LAN-сетей.
Если используется Wi-Fi, то сначала необходимо убедиться, поддерживают ли устройства данный вид связи. Для компьютера может пригодиться отдельный Wi-Fi-адаптер, который придется отдельно докупать. В ноутбуках же он предустановлен с завода. Подключаем устройства к одному Wi-Fi-маршрутизатору.
Настройка обнаружения
Просто подключить оборудование друг к другу недостаточно, поэтому идем дальше:
Теперь наступает важный этап работы: настроить сетевое обнаружение и общий доступ к файлам
Важно убедиться, чтобы у всех компьютеров были правильные IP-адреса. Обычно система автоматически настраивает данный параметр, но если при работе LAN появятся сбои, то нужно будет указать адреса вручную. Проверить IP можно с помощью «настроек параметров адаптера». Заходим в «Центр управления сетями и общим доступом» и оттуда нажимаем «Изменение параметров адаптера».
Нажимаем ПКМ по подключению и открываем свойства. Дальше открываем свойства IP версии 4 TCP / IPv4 (может иметь название «протокол Интернета версии 4»). IP-адрес — то, что нам нужно. Смотрим, чтобы у первого компьютера был адрес, отличный от второго. Например, для первого будет 192.168.0.100, 192.168.0.101 у второго, 192.168.0.102 у третьего и т.д. Для каждого последующего подключенного компьютера меняем последнюю цифру адреса. Стоит учесть, что у разных роутеров могут быть разные, отличные от указанных IP-адреса. На этом этапе локальная сеть уже готова и функционирует.
Заходим в раздел «Сеть» проводника. Если все подключено правильно, то мы увидим подключенные к сети устройства. Если же нет, то Windows предложит нам настроить сетевое обнаружение. Нажмите на уведомление и выберите пункт «Включить сетевое обнаружение и доступ к файлам». Стоит учесть, что брадмауэр может помешать работе LAN, и при проблемах с работой сети надо проверить параметры брадмауэра. Теперь надо только включить нужные папки и файлы для общего доступа.
Как открыть доступ к папкам?
Нажимаем ПКМ по нужной папке и заходим во вкладку «Доступ». Нажимаем «Общий доступ» и настраиваем разрешения. Для домашней локальной сети легче всего выбрать вариант «Все». Выбираем уровень доступа для остальных участников «чтение или чтение + запись».
Теперь из свойств папки заходим во вкладку безопасности. Нажимаем «Изменить» и «Добавить». Выбираем «Все» и активируем изменения. В списке разрешений для папки должна находиться группа «Все». Если нужно открыть доступ не к отдельной папке, а всему локальному диску, то нужно зайти в свойства диска, нажать «Расширенная настройка» и поставить галочку в поле «Открыть общий доступ». Командой «\localhost» можно посмотреть, какие папки данного компьютера имеют общий доступ для локальной сети. Чтобы просмотреть файлы из общих папок нужно в проводнике найти раздел «Сеть» и открыть папку нужного компьютера.
Как подключить принтер в локальную сеть
В «Устройствах и принтерах» нужно выбрать принтер и нажав ПКМ перейти в свойства принтера. Во вкладке «Доступ» нажать на галочку «Общий доступ». Принтер должен отображаться иконкой, показывающей, что устройство успешно подключено к LAN.
Если нужно закрыть доступ к папке, то в свойствах надо найти пункт «Сделать недоступными». Если же нужно отключить весь компьютер от LAN, то легче всего изменить рабочую группу ПК.
Администрирование и создание локальных сетей с помощью программ
Бывают ситуации, когда необходимо сделать локальную сеть, но это физически невозможно. На помощь приходит программное обеспечение, позволяющее создавать виртуальные локальные сети. Существуют разные программы для создания администрирования локальных сетей. Расскажем о паре из них:
RAdmin
Очень удобное приложение, позволяющее работать с локальной сетью или VPN в пару кликов. Основные функции программы это: удаленное управление компьютером с просмотром удаленного рабочего стола, передача файлов. Также программа может помочь геймерам, играющим по локальной сети.
Hamachi
Пожалуй, самая популярная программа в данной категории. Может создавать виртуальные локальные сети с собственным сервером. Позволяет переписываться, передавать файлы и играть в игры по сети. Также имеет клиент для Android.
О сетевой модели в играх для начинающих
Последние две недели я работал над сетевым движком для своей игры. До этого я вообще ничего не знал о сетевых технологиях в играх, поэтому прочитал множество статей и провёл множество экспериментов, чтобы уяснить все концепции и иметь возможность написать собственный сетевой движок.
В этом руководстве я хотел бы поделиться с вами различными концепциями, которые вам нужно изучить перед написанием собственного игрового движка, а также самыми лучшими ресурсами и статьями для их изучения.
В целом существует два основных типа сетевых архитектур: peer-to-peer и клиент-серверная. В архитектуре peer-to-peer (p2p) данные передаются между любыми парами подключенных игроков, а в клиент-серверной архитектуре данные передаются только между игроками и сервером.
Хотя архитектура peer-to-peer по-прежнему используется в некоторых играх, стандартом является клиент-серверная: она проще в реализации, требует канал меньшей ширины и облегчает защиту от читерства. Поэтому в этом руководстве мы сосредоточимся на клиент-серверной архитектуре.
В частности, нас больше всего интересуют авторитарные серверы: в таких системах сервер всегда прав. Например, если игрок думает, что находится в координатах (10, 5), а сервер говорит ему, что он в (5, 3), то клиент должен заменить свою позицию той, которую передаёт сервер, а не наоборот. Использование авторитарных серверов упрощает распознавание читеров.
В игровых сетевых системах есть три основных компонента:
Транспортный протокол
Первый шаг заключается в выборе протокола для транспортировки данных между сервером и клиентами. Для этого существует два Интернет-протокола: TCP и UDP. Но вы можете создать и собственный транспортный протокол на основе одного из них или применить библиотеку, в которой они используются.
Сравнение TCP и UDP
И TCP, и UDP основаны на IP. IP позволяет передавать пакет от источника получателю, но не даёт гарантий, что отправленный пакет рано или поздно попадёт к получателю, что он доберётся до него хотя бы раз и что последовательность пакетов придёт в правильном порядке. Более того, пакет может содержать только ограниченный размер данных, задаваемый величиной MTU.
UDP является всего лишь тонким слоем поверх IP. Следовательно, он имеет те же ограничения. В отличие от него, TCP обладает множеством особенностей. Он обеспечивает надёжное упорядоченное соединение между двумя узлами с проверкой на ошибки. Следовательно, TCP очень удобен и используется во множестве других протоколов, например, в HTTP, FTP и SMTP. Но все эти функции имеют свою цену: задержку.
Чтобы понять, почему эти функции могут вызывать задержку, надо разобраться, как работает TCP. Когда узел-отправитель передаёт пакет узлу-получателю, он ожидает получить подтверждение (ACK). Если спустя определённое время он не получает его (потому что пакет или подтверждение было утеряно, или по каким-то другим причинам), то отправляет пакет повторно. Более того, TCP гарантирует получение пакетов в правильном порядке, поэтому пока утерянный пакет не получен, все остальные пакеты не могут быть обработаны, даже если они уже получены узлом-получателем.
Но как вы наверно понимаете, задержка в многопользовательских играх очень важна, особенно в таких активных жанрах, как FPS. Именно поэтому многие игры используют UDP с собственным протоколом.
Собственный протокол на основе UDP может быть эффективнее TCP по различным причинам. Например, он может помечать некоторые пакеты как надёжные, а другие — как ненадёжные. Поэтому его не волнует, добрался ли ненадёжный пакет до получателя. Или он может обрабатывать несколько потоков данных, чтобы потерянный в одном потоке пакет не замедлял остальные потоки. Например, может существовать поток для ввода игрока и ещё один поток для сообщений чата. Если сообщение чата, которое не является срочными данными, потеряно, то оно не замедлит срабатывание ввода, который является неотложным. Или же собственный протокол может реализовать надёжность иначе, чем в TCP, чтобы быть более эффективным в условиях видеоигр.
Итак, если TCP такой отстойный, то мы будем создавать свой транспортный протокол на основе UDP?
Всё немного сложнее. Даже хотя TCP почти субоптимален для игровых сетевых систем, он может вполне хорошо работать конкретно в вашей игре и сэкономить ваше драгоценное время. Например, задержка может и не быть проблемой для пошаговой игры или игры, в которую можно играть только в сетях LAN, где задержки и утеря пакетов намного меньше, чем в Интернете.
Во многих успешных играх, в том числе World of Warcraft, Minecraft и Terraria, используется TCP. Однако в большинстве FPS применяются собственные протоколы на основе UDP, поэтому ниже мы поговорим о них подробнее.
Если вы решите использовать TCP, то убедитесь, что отключен алгоритм Нейгла, потому что он буферизует пакеты перед отправкой, а значит, увеличивает задержку.
Чтобы подробнее узнать о различиях между UDP и TCP в контексте многопользовательских игр, можно прочитать статью Гленна Фидлера UDP vs. TCP.
Собственный протокол
Итак, вы хотите создать собственный транспортный протокол, но не знаете, с чего начать? Вам повезло, ведь Гленн Фидлер написал об этом две потрясающие статьи. В них вы найдёте множество умных мыслей.
Первая статья, Networking for Game Programmers 2008 года, проще, чем вторая, Building A Game Network Protocol 2016 года. Рекомендую вам начать с более старой.
Учтите, что Гленн Фидлер — большой сторонник использования собственного протокола на основе UDP. И после прочтения его статей вы наверняка переймёте у него мнение о том, что TCP имеет в видеоиграх серьёзные недостатки, и захотите реализовать собственный протокол.
Но если вы новичок в работе с сетями, то сделайте себе одолжение и используйте TCP или библиотеку. Для успешной реализации собственного транспортного протокола нужно предварительно многому научиться.
Сетевые библиотеки
Если вам нужно что-то более эффективное, чем TCP, но вы не хотите заморачиваться реализацией собственного протокола и вдаваться во множество подробностей, то можете воспользоваться сетевой библиотекой. Их очень много:
Транспортный протокол: заключение
Подведём итог: существует два основных транспортных протокола: TCP и UDP. TCP обладает множеством полезных особенностей: надёжность, сохранение порядка пакетов, обнаружение ошибок. У UDP всего этого нет, зато TCP по своей природе обладает повышенными задержками, недопустимыми для некоторых игр. То есть для обеспечения низких задержек можно создать собственный протокол на основе UDP или использовать библиотеку, реализующую транспортный протокол на UDP и адаптированную для многопользовательских видеоигр.
Выбор между TCP, UDP и библиотекой зависит от нескольких факторов. Во-первых, от потребностей игры: нужны ли ей низкие задержки? Во-вторых, от требований протокола приложения: нужен ли ему надёжный протокол? Как мы увидим из следующей части, можно создать протокол приложения, для которого вполне подойдёт ненадёжный протокол. Наконец, нужно ещё учитывать опытность разработчика сетевого движка.
У меня есть два совета:
Протокол приложения
Теперь, когда мы можем обмениваться данными между клиентами и сервером, нужно решить, какие именно данные передавать и в каком формате.
Классическая схема заключается в том, что клиенты отправляют серверу ввод или действия, а сервер отправляет клиентам текущее игровое состояние.
Сериализация
Первым шагом будет преобразование данных, которые мы хотим отправить (ввод или игровое состояние), в подходящий для передачи формат. Этот процесс называется сериализацией.
В голову сразу приходит мысль использовать человекочитаемый формат, например JSON или XML. Но это будет совершенно неэффективно и впустую займёт большую часть канала.
Вместо этого рекомендуется использовать двоичный формат, который намного более компактен. То есть пакеты будут содержать только несколько байтов. Здесь нужно учитывать проблему порядка байтов, который на разных компьютерах может отличаться.
Для сериализации данных можно использовать библиотеку, например:
Альтернативным решением может быть самостоятельная реализация, она не особо сложна, особенно если в коде вы используете ориентированный на данные подход. Кроме того, она позволит вам выполнять оптимизации, которые не всегда возможны при использовании библиотеки.
Сжатие
Количество данных, передаваемых между клиентами и сервером, ограничено пропускной способностью канала. Сжатие данных позволит передавать в каждом снэпшоте больше данных, увеличить частоту обновления или просто снизить требования к каналу.
Битовая упаковка
Первая техника — это битовая упаковка. Она заключается в использовании ровно того количества битов, которое необходимо для описания нужной величины. Например, если у вас есть перечисление, которое может иметь 16 различных значений, то вместо целого байта (8 бит) можно использовать всего 4 бита.
Гленн Фидлер объясняет, как реализовать это, во второй части статьи Reading and Writing Packets.
Битовая упаковка особенно хорошо работает с дискретизацией, которая будет темой следующего раздела.
Дискретизация
Дискретизация — это техника сжатия с потерями, которая заключается в использовании для кодирования величины только подмножества возможных значений. Проще всего реализовать дискретизацию округлением чисел с плавающей запятой.
Гленн Фидлер (опять!) показывает, как применять дискретизацию на практике, в своей статье Snapshot Compression.
Алгоритмы сжатия
Следующей техникой будут алгоритмы сжатия без потерь.
Вот, на мой взгляд, три самых интересных алгоритма, которые нужно знать:
Дельта-сжатие
Последняя методика сжатия — это дельта-сжатие. Она заключается в том, что передаются только различия между текущим игровым состоянием и последним состоянием, полученным клиентом.
Впервые она была применена в сетевом движке Quake3. Вот две статьи, объясняющих способ её использования:
Шифрование
Кроме того вам может понадобиться шифровать передачу информации между клиентами и сервером. На это есть несколько причин:
Протокол приложения: заключение
На этом мы закончим с протоколом приложения. Я считаю, что сжатие совершенно необязательно и решение о его использовании зависит только от игры и требуемой пропускной способности канала. Шифрование, на мой взгляд, обязательно, но в первом прототипе можно обойтись без него.
Логика приложения
Теперь мы способны обновлять состояние в клиенте, но можем столкнуться с проблемами задержек. Игроку, выполнив ввод, нужно ждать обновления состояния игры от сервера, чтобы увидеть, какое воздействие он оказал на мир.
Более того, между двумя обновлениями состояния мир совершенно статичен. Если частота обновления состояний низка, то движения будут очень дёрганными.
Существует несколько техник, позволяющих снизить влияние этой проблемы, и в следующем разделе я о них расскажу.
Техники сглаживания задержек
Все описанные в этом разделе техники подробно рассмотрены в серии Fast-Paced Multiplayer Габриэля Гамбетты. Я настойчиво рекомендую прочитать эту великолепную серию статей. В ней также есть интерактивное демо, позволяющее увидеть, как эти техники работают на практике.
Первая техника заключается в том, чтобы применять результат ввода напрямую, не ожидая ответа от сервера. Это называется прогнозированием на стороне клиента. Однако когда клиент получает обновление от сервера, он должен убедиться, что его прогноз был верным. Если это не так, то ему нужно просто изменить своё состояние согласно полученному от сервера, потому что сервер авторитарен. Эта техника впервые была использована в Quake. Подробнее о ней можно прочитать в статье Quake Engine code review Фабьена Санглара [перевод на Хабре].
Второй набор техник используется для сглаживания движения других сущностей между двумя обновлениями состояния. Существует два способа решения этой задачи: интерполяция и экстраполяция. В случае интерполяции берутся два последних состояния и показывается переход из одного в другое. Её недостаток в том, что она вызывает небольшую долю задержки, потому что клиент всегда видит то, что происходило в прошлом. Экстраполяция заключается в прогнозировании того, где сейчас должны находиться сущности на основании последнего состояния, полученного клиентом. Её недостаток в том, что если сущность полностью меняет направление движения, то возникнет большая погрешность между прогнозом и реальной позицией.
Последняя, самая продвинутая техника, полезная только в FPS — это компенсация лага. При использовании компенсации лага сервер учитывает задержки клиента, когда он стреляет в цель. Например, если игрок выполнил хедшот на своём экране, но в реальности его цель из-за задержки находилась в другом месте, то было бы нечестно отказывать игроку в праве на убийство из-за задержки. Поэтому сервер выполняет перемотку времени назад, на тот момент, когда игрок выстрелил, чтобы симулировать, что видел игрок на своём экране, и проверить коллизию между его выстрелом и целью.
Гленн Фидлер (как всегда!) написал в 2004 году статью Network Physics (2004), в которой заложил фундамент синхронизации симуляции физики между сервером и клиентом. В 2014 году он написал новую серию статей Networking Physics, в которой описал другие техники для синхронизации симуляции физики.
Предотвращение читерства
Существует две основные техники предотвращения читерства.
Первая: усложнение отправки читерами вредоносных пакетов. Как сказано выше, хорошим способом её реализации является шифрование.
Вторая: авторитарный сервер должен получать только команды/ввод/действия. Клиент не должен иметь возможности изменять состояние на сервере, кроме как отправкой ввода. Тогда сервер каждый раз при получении ввода должен перед его применением проверять его на допустимость.
Логика приложения: заключение
Рекомендую вам реализовать способ симуляции больших задержек и низких частот обновления, чтобы иметь возможность протестировать поведение своей игры в плохих условиях, даже когда клиент и сервер запущены на одном компьютере. Это сильно упростит реализацию методик сглаживания задержек.
Другие полезные ресурсы
Если вы хотите изучить другие ресурсы, посвящённые сетевым моделям, то их можно найти здесь:
Многопользовательская игра
Многопо́льзовательская игра́ — тип компьютерных игр, при котором одновременно играет несколько человек.
Содержание
История
Первой многопользовательской игрой считается Tennis for Two (1958 год). Игра была сделана для аналоговой ЭВМ и выводила игровое поле на осциллографе. Игра Maze War стала и первой реализацией deathmatch’а, и первой сетевой игрой.
Уже первые приставки (Pong, Magnavox Odyssey) имели два контроллера, что позволяло играть вдвоём.
Наиболее значимыми сетевыми играми для IBM-совместимых компьютеров были:
Классификация
По технической реализации
Некоторые игры (в основном для игровых приставок) поддерживают сетевую игру, в которой на каждой машине могут играть несколько игроков в режиме splitscreen.
По правилам
По организации связи
По принципу организации связи между компьютерами сетевые игры делятся на:
LAN party
За рубежом проводятся так называемые LAN party. Снимают зал, в нём проводится локальная сеть, и участники приносят туда свои компьютеры. В первую очередь LAN party является ареной для соревнований и местом общения любителей игр.
Другие причины организации LAN party:
Зачастую любители моддинга и разгона компьютеров показывают свои достижения на LAN party.
Типы многопользовательской игры в 3D-шутерах
Типы многопользовательской игры в стратегиях в реальном времени
Массовые онлайн-игры
Сетевая компьютерная игра, в которой одновременно играют большое количество игроков (в основном, не менее нескольких десятков).
Мошенничество в сетевых играх
Мошенничество, или «читерство» (англ. cheat — мошенничество) — серьёзная проблема сетевых компьютерных игр.
Само определение понятия «мошенничество» туманно. Классическое определение мошенничества как «получение нечестного преимущества» не годится, так как остаётся непонятным смысл слова «нечестный». Мошенничеством определённо является применение «наводчиков» (англ. aimbot ), которые стреляют быстро и без промаха. Перенастройка управления мошенничеством, разумеется, не является. Но всё, что находится между ними, является спорным. Даже настройка драйверов может оказаться вне закона (например, убирание тумана ускоряет игру, но увеличивает видимость, поэтому в некоторых играх это расценивается как мошенничество). Поэтому большинство лиг определяют, какие изменения игры разрешены, и все остальное считается мошенничеством.
Некоторые мошеннические программы настолько хорошо замаскированы, что даже человек, приставленный к монитору мошенника, может не заметить подвоха. Например, программа-наводчик может активизироваться при одновременном нажатии кнопок «Влево» и «Вправо».