Sync a New Level of Show

Roma Robot, 2022

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

Оглавление

EVENT SYNC PROTOCOLS

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

MIDI note / MIDI CC / MIDI PC

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

Для каждой тональности звука существовал свой генератор. Модель каждого синтезатора характеризовалась эффектом или звуком, который она могла модулировать. В те времена рабочее место музыканта состояло из множества различных синтезаторов и управлять всем этим было очень непросто. Потребности росли — и в начале 80-х годов активно развивающиеся технологии в мире электроники подсказали решение этой проблемы. Был сделан шаг в сторону цифрового программного управления. Компании, производившие синтезаторы, смогли удачно договориться о разработке и поддержке единого стандарта интерфейса управления синтезаторами, первая спецификация которого появилась в 1982 году. Смысл заключался в разделении звукообразующего модуля и модуля управления, которые соединялись между собой по цифровому каналу. Протокол, разработанный для этих целей, передавал состояния нажатия клавиши.

Позже его функционал расширили большими возможностями. Благодаря такой системе музыкант мог с одной клавиатуры управлять сразу несколькими синтезаторами. Появилась возможность записывать и воспроизводить сыгранную мелодию. Сложно переоценить влияние нового протокола на музыкальную и шоу-индустрию в целом.

Дамы и господа, позвольте мне представить вам интерфейс синхронизации MIDI Musical Instrument Digital Interface. Несмотря на свой приличный возраст, MIDI до сих пор широко используется в разных направлениях шоу-индустрии.

Язык MIDI состоит только из команд управления и параметров этих команд. Команды в языке MIDI называются сообщениями. Сообщения разделяются на два основных типа: одни управляют звукообразованием, то есть говорят, какую ноту и как громко играть, вторые выполняют служебные функции, то есть регулируют изменения настроек тона генератора и синхронизации.

Сообщения первого типа называются сообщениями канала (Channel Messages).

Сообщения второго типа называются системными (System Messages).

Сообщения канала, в свою очередь, делятся на голосовые (Channel Voice Messages) и сообщения режима канала (Channel Mode Messages).

Системные сообщения делятся на общесистемные (System Common Messages), сообщения реального времени (System Real Time Messages) и эксклюзивные сообщения (System Exclusive Messages).

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

При работе непосредственно с MIDI-протоколом мы неоднократно встретим такой параметр, как MIDI Channel — программный канал передачи сообщений. Всего может быть 16 каналов. Этот параметр применим только к сообщениям группы Channel, соответственно, каждое сообщение MIDI note, MIDI CC и MIDI PC несет информацию о том, к какому каналу оно принадлежит. Каналы нужны для разделения в одном потоке нот разных инструментов. Это позволит нам отправить одновременно две одинаковые MIDI-ноты, но для генерации разных музыкальных инструментов.

MIDI note

В сообщении MIDI note содержатся три байта, в которых закодирована информация о номере канала, ноты и ее состояния. Нота может быть активна (Note on) или неактивна (Note off). Каждая нота имеет свой определенный номер — от 0 до 127. Каждый номер соответствует определенной ноте в определенной октаве. Для синхронизации устройств эти ноты могут передавать разные события, с которыми нужно синхронизироваться. Только в отличие от музыкального устройства, принимающее оборудование не генерирует звук, а выполняет определенное действие.

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

MIDI CC / MIDI PC

Сообщения MIDI CC (Control Change) и MIDI PC (Program Change) очень похожи на сообщения MIDI note. Сообщения этого типа кодируются тремя байтами, где также содержится информация о канале, номере параметра и его состоянии. Используются они для изменения программы с набором инструментов воспроизведения, а также других настроек синтезатора.

Чаще всего при помощи сообщений MIDI CC и MIDI PC производят синхронизацию линейных параметров. К примеру, уровень фейдера или регулятора на MIDI-контроллере. Используя эти сообщения, вы можете передать состояния 128 параметров управления, где каждый канал имеет диапазон от 0 до 127.

MSC (MIDI Show Control)

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

К концу 1989 года Charlie Richmond организовал рабочую группу в составе MMA (MIDI Manufactures Association) и создал общий форум на электронной доске USITT (The United States Institute for Theatre Technology). Созданный в результате проект стандарта был утвержден MMA и JMSC (Japanese MIDI Standard Committee) и 25 июля 1991 года превратился в «Рекомендованную практику RP-002», или иначе — в MIDI Show Control версии 1.0.

Сообщения MIDI Show Control относятся к категории универсальных эксклюзивных сообщений реального времени (Universal Real Time System Exclusive).

В спецификации MSC используется терминология Controller и Controlled Device. Устройство, которое генерирует MSC сообщения, называется Controller, обычно это компьютер со специализированным софтом и MIDI картой. Принимающие устройства, световые пульты, медиа серверы и остальные исполняющие контроллеры — это Controlled Device.

Особенность MSC в том, что сообщения этого формата имеют определенные категории. Они делятся на основные (General Categories) и дополнительные подкатегории. Также есть особая категория All-types, сообщения этого типа транслируются на все типы контроллеров. К общим категориям относятся свет, звук, машинерия, видео, проекция, спецэффекты и пиротехника.

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

Внутри одной категории ID всех устройств должны быть разные. Уникальный ID каждого устройства может быть в диапазоне 1–111.

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

Также в идеологии MSC есть такое понятие, как Group ID и Broadcast ID.

Каждое устройство может иметь уникальное ID, но при этом быть подписанным на групповые сообщения. Для этого в MSC зарезервированы специальные групповые ID c 112 до 126.

Всего, может быть, 15 независимых групп. Чтобы конкретную команду получили клиенты, подписанные на группу, серверу нужно просто отправить MSC сообщение на один из групповых ID.

Также есть один зарезервированный ID, равный 127 для широковещательных команд. MSC команду, отправленную на этот ID, получат все клиенты.

Дополнительное преимущество MSC перед MIDI note в том, что сообщения этого протокола содержат конкретные команды для действия, а не просто код сообщения, к которому нужно привязывать действие на конечном контроллере. Есть основная группа MSC сообщений — General Commands, которые применимы для всех типов устройств. Помимо General Commands, есть дополнительная группа Sound Commands специально для звуковых систем синхронизации. Для общей синхронизации нам интересны только команды типа General Commands.

Итак, с командами разобрались, куда отправлять команды, тоже

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

<Q_number> <Q_list> <Q_path>

Этот код состоит из номера сцены, к которой применять команду (CueNumber), в каком списке находится эта сцена (CueList) и путь туда, где находится список сцен (CuePath). Последнее значение осталось еще с тех времен, когда световые пульты сохраняли свои шоу на флоппи дискеты и пульт мог воспроизводить световые сцены как с внутренней памяти, так и с внешнего носителя. QuePath как раз и указывал, где находится финальная цель сообщения.

Не все сообщения из всех команд MSC несут в себе объект, к которому нужно применить команду, в основном это глобальные команды, как, например, ALL OFF или RESET.

Резюмируя все особенности MSC, можно сказать следующее:

• В MSC сообщении содержится информация о том, к какому типу устройства и к какому по номеру устройству предназначается сообщение: Command Format, Device ID.

• MSC сообщение имеет команду, которую нужно выполнить на принимающем устройстве — Command.

• MSC сообщении есть информация, к какому объекту в принимающем устройстве применить команду — Q Number, Q List, Q Path.

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

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

В новой идеологии протокола клиент перед тем, как получить данные с сервера, должен отправить ответ серверу о возможности выполнения действия, и после получения команды он также должен сообщить серверу, удалось ли выполнить команду или нет. Такая система подтверждения команд рассчитана на то, чтобы повысить безопасность управления сложными системами. Но кроме явных преимуществ обратной связи с сервером был один недостаток, заключался он в скорости синхронизации. Сервер не мог отправить новую команду до тех пор, пока не был получен ответ о выполнении предыдущей команды. К сожалению, усложненная версия MSC v1.1 так и не получила широкого применения в шоу-индустрии. А вот MSC v1.0 был долгое время очень популярен, пока на его смену не пришли новые протоколы, основанные на современных технологиях передачи данных.

MCC (MIDI Machine Control)

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

Команды MMC находятся в группе SysEx сообщений. MMC сообщения так же, как и MIDI Show Control, несут в себе информацию о номере устройства Device ID и команду. Все команды, которые можно передать в MMC сообщении, находятся ниже в таблице.

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

OSC (Open Sound Control)

Время идет и технологии не стоят на месте. Протоколу MIDI уже почти сорок лет! И конечно же, ему на замену пришла более современная альтернатива Open Sound Control. Как понятно по названию, и этот интерфейс пришел из мира музыки. Но как и следовало ожидать, другие направления шоу-индустрии быстро его освоили. Сейчас этот протокол настолько популярен в разных направлениях шоу технологий, что позже сами создатели дали ему второе название: Open System Control. Что же в нем особенного? Давайте разберемся.

Этот протокол был разработан в компании CNMAT (Center for New Music and Audio Technologies) программистами Adrian Freed и Matt Wright еще в 1997 году. У них появилась идея создать новый протокол на базе широко используемого интерфейса Ethernet. Главное преимущество его в том, что для работы с этим протоколом не нужно никакого специального оборудования и коммутации, как в случае с другими интерфейсами и протоколами синхронизации. Также, Ethernet — это отдельное направление, которое развивается и поддерживается разными компаниями и институтами. Сейчас технологии позволяют передавать сигнал по Ethernet, по воздуху и оптическому каналу на многие километры. А скорость передачи по сравнению с MIDI в тысячи раз быстрее, при этом соединение надежнее. Все эти преимущества автоматически унаследует протокол OSC. Но кроме ряда преимуществ есть и недостатки. Он стал сложнее, а как следствие, специалисту необходимо иметь больше знаний об этом протоколе для работы с ним. Как раз цель этой главы — дать вам знания для комфортной и уверенной работы с протоколом синхронизации OSC.

Концепт построения сетей

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

Первое, с чем необходимо познакомиться, это с группой протоколов TCP/IP (Transmission Control Protocol/Internet Protocol). Концепт работы со всеми протоколами описан уровнями (слоями), через которые должен пройти каждый пакет данных при отправке или получении.

TCP/IP Уровни (Layers)

Уровень 1. Физический уровень

Уровень 1 является физическим уровнем. Это оборудование интерфейсов, включая электронику и провода.

Уровень 2. Дата линк уровень

Уровень 2 тесно связан с оборудованием. Этот уровень занимается тем, что собирает данные в пакеты для отправки через Физический уровень. Также этот уровень отвечает за корректную передачу и прием данных и исправление ошибок. На этом уровне появляется такое понятие, как MAC адрес (Media Access Address2).

Уровень 3. Сетевой (Internet) уровень

Это Сетевой уровень, отвечающий за логическое направление данных через сеть.

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

Уровень 4. Транспортный уровень

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

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

Уровень 5. Уровень приложения

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

Итак, зачем же нам знать все эти уровни и их функционал? Дело в том, что если мы хотим передать что-то через сеть, то прежде нам необходимо выполнить определенные условия, которые регламентирует группа протоколов TCP/IP.

Одно из таких условий — это обязательное использование для каждого клиента сети IP адреса (Internet Protocol Address). Напрашивается резонный вопрос, зачем же использовать дополнительный параметр адреса, если каждое сетевое устройство уже имеет уникальный адрес MAC? Не будем углубляться во все особенности, скажу лишь только, что благодаря IP адресам в нашей сети появляется возможность ее организации, что очень важно, когда мы создаем сложную сеть с определенными правилами. К тому же в отличие от MAC адреса, одно устройство может иметь несколько адресов IP. Какие бывают IP адреса и как их настроить, мы разберем позже.

Кстати, существуют такие типы протоколов, которые используют для подключения только MAC адрес, к примеру, транспортный протокол NetBEUI. Это довольно быстрый протокол, но его главным недостатком является то, что он полностью не маршрутизируемый.

Следующее условие. Для передачи данных мы должны использовать UDP или TCP протокол. По сути, и первый, и второй тип протокола занимается тем, что обеспечивает корректную передачу данных. Но в чем же их отличие?

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

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

Но как бы ни был надежен TCP протокол, UDP намного шире используется в шоу-индустрии. Самый яркий пример — это ArtNet протокол, который базируется на UDP. Световой консоли нет необходимости беспокоиться о том, получил ли необходимый пакет данных один из десятка артгейтов. Консоли более важно отправлять пакеты данных в реальном времени для всех участников. И если по какой-то причине один пакет был доставлен некорректно, то это будет менее заметно, чем если все артгейты будут ждать, пока один из клиентов получит корректный пакет. И последнее условие — это использование TCP или UDP портов для передачи или приема данных. Так как потоков данных для одного клиента может быть большое количество, то для того, чтобы эти потоки не перемешивались и были независимы, каждый поток использует свой входящий или исходящий порт, через которые идет обмен данными. Номер порта в UDP и TCP идентифицируется одним числом. Оно может быть в диапазоне от 1 до 65535. Приложение, которое хочет получить или отправить данные, обращается к необходимому TCP или UDP порту. Некоторые порты зарезервированы системой для служебного пользования, и программы пользователя не могут использовать эти порты. К примеру, протокол ArtNet использует порт 6454.

Теперь давайте немного пофантазируем и представим работу курьерской службы и вокзала. Это поможет нам более наглядно понять принцип работы TCP и UDP.

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

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

Теперь, когда данные получены программой, наступает следующий этап. Расшифровка данных. Когда заказчик открывает посылку, он ожидает увидеть там, скажем, письмо, которое состоит из букв и знаков препинания, с помощью которых закодировано сообщение. Чтобы его прочитать, заказчик должен знать язык, на котором это письмо написано. Языки кодирования регламентируют протоколы высокого уровня, как, например, ArtNet, sACN, OSC, RTP-MIDI. Наш заказчик — англичанин, и если письмо написано на английском языке, то он сможет прочитать сообщение, написанное в письме. То же самое и с программным обеспечением: если программа понимает язык ArtNet, то, получив пакет данных, закодированных протоколом ArtNet, она сможет прочитать и извлечь данные о DMX уровнях.

Теперь давайте познакомимся с методами передачи данных, которые основываются на IP адресах.

Существует три распространенных метода, которые имеют место быть в шоу-индустрии: Unicast, Multicast и Broadcast.

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

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

Широковещательный метод передачи данных, где один пакет данных передается всем участникам сети (или подсети), в независимости от их адреса. По этому принципу очень часто работает протокол ArtNet. Для этого метода в каждом уровне диапазона сетей зарезервирован адрес 255.

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

Итак, если отправить пакет данных на адрес 10.0.0.255, его получат все устройства, чей адрес начинается на 10.0.0.x.

Если отправить пакет данных на адрес 10.0.255.255, его получат все устройства, чей адрес начинается на 10.0.x.x.

Если отправить пакет данных на адрес 10.255.255.255, его получат все устройства, чей адрес начинается на 10.x.x.x.

И последний, самый широковещательный адрес — это 255.255.255.255, пакет данных, отправленный на этот адрес, получат все устройства в сети.

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

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

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

Для этой технологии передачи данных зарезервирован диапазон адресов 224.0.0.0 — 239.255.255.255.

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

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

Сетевое оборудование

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

Итак, чтобы каждый компьютер мог стать участником сети, он должен иметь сетевую карту. Зачастую все компьютеры уже имеют встроенные сетевые карты, за исключением некоторых компактных ноутбуков, где сетевой разъем убирают для экономии места. К примеру, Mac Book новых моделей толщиной меньше, чем сам разъем Ethernet. Для таких компьютеров есть специальные переходники с Thunderbolt и USB на Ethernet.

Большинство сетевого оборудования использует физический интерфейс стандарта RJ-45. Кстати, существует путаница с названием сетевых разъемов и коннекторов. RJ-45 — это имя стандарта, который описывает конструкцию обеих частей разъема (вилки и розетки) и схемы их коммутации. В то время как сам сетевой разъем имеет имя 8P8C (8 Position 8 Contact).

Сетевые карты бывают разные. Основная характеристика, которая нас должна интересовать, — это скорость передачи и приема данных. Она измеряется в максимальном количестве данных в битах, передаваемых за одну секунду. На данный момент существуют такие скорости, как 10Mbps (Megabit per second), 100Mbps, 1Gbps (Gigabit per second), 2,5Gbps, 5Gbps, 10Gbps, 40Gbps, 100Gbps и 160Gbps. Самые распространенные и часто используемые скорости в оборудовании и сетевых картах — это 100Mbps и 1Gbps. Скорости выше одного гигабита в секунду, это уже более профессиональные стандарты для передачи огромных объемов данных. Для этих скоростей нужны особые сетевые карты и сетевые кабели подходящего стандарта.

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

Схема подключения клиентов

Первый тип — Ethernet Hub. Хаб представляет из себя простейшее сетевой устройство, которое дублирует все свои порты между собой. Это своего рода сетевой сплиттер. Получив пакет данных с одного порта, хаб дублирует этот пакет на все остальные. Вот и все. Но это плохо, потому что, даже если пакеты данных предназначаются только для одного клиента, то хаб отправит эти пакеты всем клиентам. Это загружает порты и самое главное сеть! Хорошая новость, что простые хабы практически уже не встречаются, так как они попросту, морально устарели.

Следующий тип коммутаторов — это Ethernet Switch. Свитч внешне никак не отличим от хаба, но это уже более умное устройство. Оно позволяет грамотно организовать нашу сеть. При включении свитч опрашивает все свои порты и знает, на каком порте какое устройство и с каким адресом находиться. Что это нам дает? Когда на определенный порт свитча приходит пакет, который предназначается для конкретного адреса, свитч отправляет этот пакет на конкретный порт, где находится адресат. При такой схеме сеть работает намного рациональнее и быстрее.

Но также не могу не затронуть еще одну очень важную особенность свитчей. Существует два типа свитчей: Managed и Unmanaged. Unmanaged более распространены на рынке. Это значит, что такие свитчи не настраиваемы, в них уже предустановлены основные настройки, которые позволяют работать сразу с сетью. Второй тип — Managed, чтобы запустить в работу такой свитч, сначала его необходимо настроить. Такие свитчи работают на более высоком уровне. Они понимают, с какими протоколами работают, могут фильтровать данные или блокировать. Такие свитчи имеют довольно широкий функционал для конкретных задач. Но для работы с такими свитчами нужно иметь более высокий уровень знаний построения сетей и уметь программировать оборудование конкретного производителя. Если у вас таких знаний нет, то я советую использовать неуправляемые свитчи, так как для того чтобы запустить его в работу, вам нужно только подключить его к питанию!

И последний тип коммутаторов — Router. Роутер по своему функционалу похож на настраиваемый свитч, его отличие в том, что он помогает настроить правила общения между двумя и более физическими сетями. Самое распространенное использование роутеров — организация сети между глобальной сетью интернет (WAN3) и локальной сетью (LAN4). Роутер может подключиться к сети интернет по определенным правилам, но при этом создать независимую сеть для локальных пользователей, и также передавать пакеты данных между этими сетями. Также зачастую роутеры имеют службу DHCP (Dynamic Host Configuration Protocol), которая позволяет автоматически раздавать IP адреса клиентам без участия пользователя. О ней мы поговорим чуть позже. Также большинство бытовых роутеров имеют встроенную беспроводную точку доступа Wi-Fi.

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

Сетевые настройки

Итак, физически мы подключили четыре компьютера в одну сеть. Теперь второй шаг, нужно настроить сетевую карту на каждом компьютере. Современные сетевые карты настолько автономны, что они сами «дружатся» с оборудованием, которое подключено на другом конце кабеля, будь то другой компьютер или маршрутизатор. Но тем не менее есть настройки, которые необходимо сделать пользователю. А именно указать каждой сетевой карте хотя бы один уникальный IP адрес в локальной сети. Как мы помним, это обязательное условие, которое регламентирует группа протоколов TCP/IP.

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

Вернемся к IP адресу сетевой карты. На данный момент существуют две версии IP адресов, IPv6 и IPv4, разница между ними в количестве байт, выделяемых для идентификации адреса или, говоря простым языком, они различаются длиной адреса. Пример IPv4 адреса: 192.168.1.100. Пример IPv6 адреса: FE:BA:76:32:FE:BA:76:32. Вы можете спросить, для чего же придумали более сложную версию IP адресов? Дело в том, что когда на свет появилась глобальная сеть интернет, никто даже не мог себе представить, что объема адресов IPv4 формата может не хватить для всех потребностей глобальной сети, ведь в этом формате мы можем идентифицировать 4,22 миллиарда уникальных адресов.

Но цифровой прогресс рос с огромной скоростью, и количество устройств в сети интернет с каждым годом росло в геометрической прогрессии! Адресов стало не хватать, и тогда ввели новую версию формата IPv6, благодаря которому можно задать 34*1037 адресов! Но так как мы зачастую настраиваем нашу личную локальную сеть, вероятность того, что мы исчерпаем лимит адресов IPv4 стремится практически к нулю, поэтому вполне достаточно использование более простой версии IP адреса.

Довольно теории, давайте уже перейдем к практике, а именно к непосредственной настройке адресов. На разных консолях, устройствах и контролерах интерфейс настройки IP адреса выглядит по-разному в зависимости от каждого производителя. Я предлагаю рассмотреть самые распространенные опции, которые предоставляют операционные системы Windows и MAC OS.

Окно настройки сетевой карты системы MAC OS

Окно настройки сетевой карты системы Windows

Ниже мы с вами затронем настройки таких параметров сетевой карты, как IP адрес, маска подсети (Subnet mask), Router (Defaulte gateway) и DNS Server.

Начнем с IP адреса. Возникает вопрос, какой диапазон адресов необходимо выбрать для наших устройств в сети? На самом деле, он может быть каким угодно, но все же стоит придерживаться правил, которые устанавливает всемирная организация IANA (Internet Assigned Numbers Authority). Функционал этой организации очень широк, но одна из ее задач — следить за тем, чтобы не было хаоса с адресами в сети интернет. Поэтому они четко регламентировали диапазоны адресов для локальных сетей. Ниже представлены эти диапазоны.

10.0.0.0 — 10.255.255.255

172.16.0.0 — 172.31.255.255

192.168.0.0 — 192.168.255.255

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

Но также немаловажная настройка сетевой карты — маска подсети! Я встречаюсь довольно часто с ситуацией, когда многие специалисты не знают, для чего вообще это нужно! Давайте разберемся. Итак, маска подсети позволяет нам разделить в пределах одного адресного диапазона сеть на несколько независимых подсетей. Разберем на примере.

Возьмем адресное пространство 10.x.x.x. Если мы хотим максимально закрыть нашу сеть, мы устанавливаем маску подсети 255.255.255.0. В этом случае, если мы хотим, чтобы наши компьютеры были в одной подсети и могли друг друга видеть, то их IP адреса должны иметь одинаковые первые три цифры адреса. К примеру, 10.0.0.x. Диапазон адресов нашей подсети будет составлять от 10.0.0.1 до 10.0.0.255. Но если в этом случае один из компьютеров будет иметь IP адрес 10.0.1.87, то он будет находиться в другой подсети (10.0.1.1—10.0.1.255), и для первой подсети он будет не виден.

Как же сделать четвертый компьютер видимым для всех остальных компьютеров? Есть два способа. Первый способ — ввести четвертый компьютер в адресное пространство подсети

10.0.0.x. Для этого нужно изменить IP адреса четвертого компьютера, к примеру, на 10.0.0.87. Обратите внимание, мы просто изменили третью цифру адреса с единицы на ноль.

Или второй способ — расширить нашу подсеть так, чтобы старый адрес четвертого компьютера попадал в нашу подсеть. Для этого достаточно на всех компьютерах расширить маску подсети, поменяв ее с 255.255.255.0 на 255.0.0.0. Теперь диапазон IP адресов нашей подсети составляет от 10.0.0.1 до 10.255.255.255. В этом случае, как мы можем видеть, IP адрес четвертого компьютера 10.0.1.87 попадает в диапазон адресов нашей подсети.

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

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

Зачастую рабочая локальная сеть изолирована от глобальной сети (интернет). Но в случаях, когда нашей сети необходима возможность доступа к глобальной сети, мы вынуждены познакомиться с еще двумя такими параметрами, как Router (Gateway) и DNS Server.

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

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

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

DNS — Domain Name System — «система доменных имен», это некая база, в которой хранятся ассоциации всех имен и IP адресов сайтов. Когда мы вводим в адресной строке имя интернет сайта, то DNS позволяет получить IP адрес сайта, чтобы его открыть. В настройках сетевой карты можно указать либо IP адрес одного из глобальных DNS серверов, либо адрес роутера, который будет заниматься получением адресов DNS сервера. Указание ошибочных или несуществующих адресов DNS никак не скажется на работоспособности локальной сети, но при этом не позволит получать доступ к интернет сайтам в глобальной сети.

Итак, для того чтобы клиент локальной сети имел доступ к глобальной сети интернет, в настройках сетевой карты должны быть указаны корректные адреса Router и DNS Server. В случае, когда активирована служба DHCP, эти адреса устанавливаются автоматически.

А теперь давайте познакомимся с волшебной службой DHCP (Dynamic Host Configuration Protocol). Это специальная служба, которая может автоматически всем компьютерам сети задать IP адреса и другие настройки сетевой карты так, чтобы все компьютеры были участниками одной подсети. Чтобы волшебство DHCP произошло, нужно соблюсти два условия.

Первое условие: на одном из участников сети должен быть создан и запущен DHCP сервер. Этот сервер можно поднять на Windows и на MAC OS, но очень часто такая служба присутствует на роутере. В этой службе указываются такие параметры как маска подсети и диапазон адресов, которые будут выдаваться новым клиентам сети.

Второе условие: необходимо, чтобы на сетевой карте вашего компьютера была активирована опция автоматического получения настроек сетевой карты от DHCP сервера. Как мы видим в MAC OS системе, эта функция называется Using DHCP. А в Windows — Obtain an IP address automatically и Obtain DNS server address automatically.

Включение функции получения настроек сетевой карты от DHCP сервера на MAC OS

Включение функции получение настроек сетевой карты от DHCP сервера на Windows

Дополнительная информация сетевой карты, где можно увидеть полученные настройки и IP DHCP сервера

Но зачастую, когда мы работаем с синхронизацией, где нам приходится указывать конкретные IP адреса клиентов, которые должны получать наши данные, как, например, в протоколе OSC, автоматическая конфигурация сети — не самый лучший выбор, так как наши устройства не привязываются жестко к IP адресам. У DHCP есть такой параметр, как время аренды IP адреса клиента, по истечению которого DHCP сервер выдает клиенту новый IP адрес, и он может отличаться от старого. Если такое происходит, то наша синхронизация по сети рушится, так как у клиента, которому мы хотим отправить сообщения, теперь новый IP адрес. При статических IP адресах на сетевых картах адрес перманентен, и только пользователь может его изменить. Такая жесткая привязка настроек сетевой карты намного надежнее, что необходимо при настройке синхронизации по сети.

Упомяну также о беспроводной сети Wi-Fi. Часто приходится использовать в синхронизации смартфоны и планшеты, к примеру, для управления сервером синхронизации, которые также должны быть участниками общей сети. В этом случае нам достаточно ввести в нашу сеть беспроводную точку доступа (Wi-Fi Access Point) или Wi-Fi роутер, в котором уже встроена точка доступа. Все настройки Wi-Fi сетевых карт абсолютно идентичны, единственное, что перед тем, как подключиться к беспроводной сети, нам необходимо авторизоваться в ней, введя логин и пароль Wi-Fi, которые заданы в беспроводной точке доступа.

Проверка сетевого подключения

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

WINDOWS

Для этого в Windows системе необходимо открыть приложение командной строки. Чтобы это сделать, нажмите сочетание клавиш Win+R, в окне «выполнить» введите cmd, далее нажимаем кнопку OK. Перед вами откроется окно командной строки. Чтобы проверить подключение между вашим компьютером и другим клиентом, введите команду ping 192.168.1.202 и нажмите Enter. Соответственно, вам нужно вести тот IP адрес, связь с которым вы хотите проверить. Если все успешно, то в отчете пинга адреса вы увидите Received=4; Lost=0; В противном случае командная строка выдаст вам отчет, где либо частично, либо все пакеты были потеряны. Это означает, что клиент с этим IP адресом недоступен или имеет какие-то неисправности с сетью.

MAC

Чтобы сделать такую же проверку в операционной системе MAC OS, необходимо открыть приложение терминала. Для этого зайдите в папку с вашими установленными приложениями и откройте приложение Terminal. Для проверки соединения с клиентом введите команду ping — c4 192.168.1.201. По итогу вы также получите отчет о пинге адреса. Если все в порядке, то вы не потеряете ни одного пакета, и терминал выдаст сообщение 0.0% packet loss. Это означает, что соединение работает корректно.

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

Как работает OSC

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

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

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

Хорошо, OSC сообщение мы доставили в нужный порт, и программа клиента прочитала это сообщение. Но как же программе понять, к чему применить это сообщение? Для этого OSC сообщение содержит адрес назначения внутри программы клиента. Это очень похоже на параметр назначения MSC сообщения, к примеру, как Cuelist или Cue. Только, как я уже сказал выше, OSC не имеет жесткой привязки к синтаксису адреса как в MSC, но тем не менее мы должны соблюдать правила описания адреса, которое использует OSC, а именно URL (Uniform Resource Locator). Эту схему описания адреса пути вы используете каждый раз, когда пользуетесь интернет браузером, чтобы попасть на конкретное место в интернет сайте.

Эти пути назначения сообщения могут быть разнообразны в зависимости от того, какой функционал заложил конкретный производитель. К примеру, если вы хотите отправить OSC сообщение на световую консоль ETC Eos, то путь вашего сообщения должен начинаться с /eos, далее нужно указать группу контролируемых параметров пульта, к примеру, /fader, дальше нужно указать номер фейдера /1, и по итогу мы получим полный путь к конкретному фейдеру, который будет выглядеть как: /eos/ fader/1/. Также мы можем указать путь к группам, к спискам сцен и другому содержимому пульта.

Идем дальше. Теперь по аналогии с MSC вы можете предположить, что дальше в сообщении OSC передается команда! Верно, но тут есть своя особенность: в OSC сообщении передается не команда, а аргумент. В чем же отличие команды от аргумента? Дело в том, что аргумент в OSC сообщении — это некий контейнер, который передает данные определенного типа. В последней версии OSC 1.1 вы можете использовать следующие типы данных:

Int32

Integer 32 bit, этот тип данных может хранить в себе натуральное число в диапазоне от — 2 147 483 648 до 2 147 483 647. Этот тип используют, когда нужно передать целочисленный номер, как, например, для идентификации номера страницы или фейдера, так как в пульте не существует фейдеров и страниц с номером, к примеру, два с половиной или три целых четырнадцать сотых.

Float32

Float 32 bit, этот тип данных может хранить в себе действительное число c плавающей запятой в диапазоне от — 3.4*1038 до +3.4*1038. Этот способ выражения действительного числа отличается от простого целочисленного типа. Но зато он позволяет закодировать более точные данные. Часто этим типом данных кодируют уровни фейдеров, вы можете определить диапазон фейдера от нуля до единицы, а вот точность позиционирования фейдера в этом диапазоне может быть огромной, но зачастую производители ограничиваются двумя знаками после запятой.

String

Этот тип данных передает строку, закодированную в формате ASCII. С помощью этого типа мы можем передать имя объекта или целое сообщение. Очень часто этот тип используется на системах дистанционного управления по OSC. К примеру, пульт может передать по OSC информацию об имени Cuelist, который назначен на конкретный фейдер.

Blob

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

Bool

Boolean — это логический тип данных, который может передать либо ложь, либо истину. Самое распространенное его использование — описание состояния переключателя, который может быть либо включенным (истина), либо выключенным (ложь). На самом деле, в типологии OSC этот тип данных разделен на две части, каждая из которых несет в себе конкретное состояние. Я объединил их воедино, дабы облегчить понимание этих типов.

Impulse

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

Null

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

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

Как видно на схеме, чтобы передать состояние кнопки Flash фейдера номер один на световую консоль Eos, мы должны указать сетевой адрес и порт пульта 192.168.1.101:5004. Далее нужно указать адрес необходимой кнопки, состояние которой мы хотим передать, /eos/fader/1/flash и по итогу передать аргумент типа Boolean, если кнопка должна быть нажата, то аргумент равен True, если кнопка отпущена, то аргумент равен False.

Итак, резюмируем особенности OSC протокола.

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

• OSC использует протокол передачи данных UDP и TCP. Эти протоколы обязывают нас указывать IP адрес и порт клиента, что дает нам множество преимуществ. К примеру, мы можем на одном сетевом клиенте синхронизировать несколько приложений одновременно, используя один и тот же IP адрес, но при этом разные порты. Это также позволяет нам настраивать сложные маршруты, делить OSC сигнал или получать на одного клиента сообщения с разных источников без использование дополнительного оборудования, так как этот функционал уже заложен в сетевых протоколах группы TCP/IP.

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

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

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

Примечания

2

Если коротко, то каждое сетевое оборудование имеет уникальный MAC адрес, предустановленный на заводе. MAC адрес для каждого устройства является уникальным. При помощи MAC адреса каждое устройство может идентифицировать себя в общей сети для передачи или приема данных. Пример MAC адреса — 98:5A:EB:C9:00:A8.

3

WAN — Wide Area Network (Глобальная компьютерная сеть).

4

LAN — Local Area Network (Локальная компьютерная сеть).

Смотрите также

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