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

Ты не помнишь, как всё начиналось

Идея передачи информации на расстояние будоражила умы человечества издревле. Известно, что система сигнальных костровищ присутствовала уже в позднем дриасе (12 900–11 700 лет до н.э) в Усть-Чёрнинском и Чудейском городищах, которые располагалсь в Юго-Восточном Забайкалье (ссылка на научную работу по археологии, pdf). Таким способом несколько поселений обменивались информацией о природных угрозах и нападениях иноплеменников. Эта была система с бистабильной логикой, в которой присутствуют два стабильных состояния — «костёр горит» и «костёр не горит». Система подразумевала два взаимоисключающих сигнала, однзначно трактуемых наблюдателем: не горит — всё хорошо, горит — нужно браться за оружие. В современной терминологии, таким способом передавался один бит информации — истина или ложь. Если рассматривать сигнальное костровище с точки зрения сервисной модели, то это был staleless-сервис, то есть сервис без сохранения контекста. Иными словами, если мы ещё несколько раз подряд разожжём костёр, то каждый раз это будет означать ровно то же самое, что и первый раз, дополнительной информации не добавится.

Простейший контроллер для единоразовой передачи 1 бита информации на дальнее расстояние, stateless-протокол, бистабильная логика

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

Контроллер для единоразовой передачи 2 бит информации на дальнее расстояние, stateless-протокол, бистабильная логика

К IV в. до н.э. в древней Греции уже была разработана система сигнальной связи, получившая название «водяной телеграф». Работал он следующим образом: в два глиняных сосуда одинаковой длины и диаметра вставляются два куска пробки, немного уже сосудов. На пробке укрепляется вертикальная стойка, разграниченная на 24 деления. Каждое из делений означает событие, частое во время войны, например, первое деление обозначает событие «вторжение всадников», второе — «вторжение тяжеловооружённой пехоты», третье — «вторжение лёгкой пехоты» и т. д. У дна каждого сосуда должно находиться сливное отверстие, одинакового размера и одинаково расположенное для обоих сосудов.

Эней использует гидравлический телеграф, чтобы послать сообщение (информации о барьефе нет). Stateless-протокол, мультистабильная логика

Будучи заполнены до краёв, сосуды готовы к телеграфированию. Один из них ставится на передающей станции, другой на принимающей не ставится. При наступлении ночи с передающей стороны подаётся сигнал поднятым факелом. Принимающая сторона тем же способом извещает о своей готовности. Тогда отправитель опускает факел и одновременно открывает слив, то же делает получатель. Вода вытекает, пока сообщение, которое нужно передать, не поравняется с краем сосуда. В этот момент передающий вновь поднимает факел. Адресат смотрит, до какого деления опустился поплавок у него, и, таким образом, узнает, какая информация получена по телеграфу. Говоря современным языком, передавалось одно машинное слово, принимающее одно из 24 значений. О битах здесь говорить некорректно, поскольку из всего многообразия значений из 24 ячеек (общее число значений, которые можно закодировать 24-мя битами, составляет 2^24=16,777,216‬), в силу технических особенностей использовались только значения, соответствующие целым логарифмам по основанию 2. Протокол передачи с точки зрения сервисной модели так и остался stateless: даже если античный воин сначала передаст первое деление, а потом второе — это будет означать «вторжение всадников» и «вторжение тяжеловооружённой пехоты» одновременно, но никак не сообщит, как именно второе событие было связано с первым. Логика уже была не бистабильной, а мультистабильной.

Прорыв: последовательность сигналов и контекст

В 1838 году Сэмюэль Морзе предложил систему кодирования, основанную на последовательности точек и тире, которую назвали азбукой Морзе. Она знаменовала собой бурное развитие телеграфа — модели обмена последовательностями сигналов. Именно модели, а не технологии, поскольку интерфейсы взаимодействия могли варьироваться. И здесь, с точки зрения развития технологий передачи данных, мы получили 3 фундаментальных новшества:

1) независимость от типа канала передачи данных. На успешность передачи влияло только качество канала связи. Тип канала связи и соответствующих интерфейсов мог быть любым: провода, радиоволны, свет (световой телеграф);

2) протокол впервые стал stateful. В нотации кодирования введены управляющие последовательности, такие, как End of work, Error/correction. Появился контекст. То есть то, что будет передано после этих последовательностей, будет иметь иное значение, чем то же самое, но переданное до этих последовательностей.

3) помехозащищённость. Последовательность Error/correction открывала контекст повторной передачи.

Здесь мы вплотную подошли к передаче данных между вычислительными машинами.

В 1949 году Ван Ань и Во Вайдун, сотрудники Гарвардского университета, придумали регистр на магнитных сердечниках, который позволял записывать информацию с помощью намагничивания ферритового кольца. Это открытие ознаменовало собой начало эпохи памяти на магнитных сердечниках. Поскольку кольца (биты данных) были отнюдь не объектами микромира, то первые массивы данных насчитывали всего сотни и тысячи колец. Несмотря на все недостатки (прежде всего энергозатратность), это решение предопределило развитие компьютерной техники на всё последующее время, поскольку выполнялось главное: это был конечный автомат с бистабильной логикой.

Ячейки памяти на магнитных сердечниках (сопоставление с размером флеш-карты формата microSD)

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

Подходим к байтам

Архитектуры и размеры машинных слов самых первых ЭВМ не были унифицированы, каждый образец работал с массивами данных уникальным образом, который диктовался предметной областью вычислений. Позже компания IBM приняла для своих машин стандарт байта, равного 8 битам, и стандарт машинного слова, кратный 8 битам. Байт — это последовательность бит, которой ЭВМ оперирует как единым целым. Логика осталась бистабильной, однако стало возможным представлять минимальную единицу информации как одно из 255 значений. То есть, когда говорится, что объём файла составляет 20 байт, это значит, что полезный объём информации закодирован последовательностью из 160 ячеек (бит), каждая из которых может быть намагничена (истина) или не намагничена (ложь). Когда мы скачиваем файл объёмом 32 ГБ, это значит, что мы у себя на компьютере в точности воспроизведём последовательность из 32*1024*1024*1024*8=274,877,906,944 (более 270 млрд) бит. Речь идёт о полезном объёме, без учёта особенностей сохранения данных.

Ок, а что с сетью?

Чтобы передать последовательность байт по сети, мы должны их превратить обратно в поток бит. Это сделано по двум причинам. Идеологическим — для того, чтобы транспортный уровень не был зависим от более высоких уровней модели OSI, на которых всё ещё данные измеряются в байтах. Техническим - синхронизация бистабильных состояний нескольких проводников, несущих полезную информацию, на порядки усложнила бы логику микроконтроллеров физического уровня. (Здесь можно развернуть целый рассказ о модуляции сигнала в витой паре, но такими знаниями я не располагаю, кто знает, напишите в комментах).

Модель OSI

Любая информация, передаваемая по сети интернет (в том числе, потоковое мультимедиа), проходит все 7 уровней модели OSI в нисходящей последовательности на источнике и все 7 уровней в восходящей последовательности на приёмнике. Сеть интернет использует стек протоколов TCP/IP (протокол TCP на транспортном уровне взаимодействует с протоколом IP сетевого уровня), с помощью которых обеспечивается обмен данными между компьютерами. Протоколы канального уровня, какие как PPP, Ethernet и IEEE 802, содержат алгоритмы кадрирования и помехозащищённого кодирования.

Вся совокупность современных сетевых технологий обеспечивает несколько фундаментальных (хотя и очевидных) принципов передачи информации:

1) детерминированность результата передачи. Любая из сколь угодно многих попыток передачи информации одной и той же информации с источника приведёт к одному и тому же результату на приёмнике;

2) неизменность при считывании. Любая из сколь угодно многих попыток передачи информации никоим образом не модифицирует данные на источнике;

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

Мы без ошибок можем скачать файл объёмом 32 ГБ, поскольку помехи эффективно устраняются упомянутыми алгоритмами помехозащищённого кодирования на канальном уровне. Все 270 млрд бит, хранящиеся в дата-центре Гугла, без единой ошибки воспроизведутся на нашем компьютере. Ровно то же самое будет происходить с данными от дата-центра любого стримингового сервиса: транспортный уровень ничего не «знает» о том, какого рода данные передаются — аудиопоток, бинарный файл, HTML, видео или что-то другое.

Передача по сети на практике

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

Маршрутизация до Гугла

Мы видим, что пакет TCP/IP на пути к нам проходит через ряд узлов: маршрутизаторы, коммутаторы, шлюзы и т.д. Вот так сеть это выглядит с точки зрения enterprise-архитектуры:

Цепь роутинга от дата-центра (кубики справа) к конечному пользователю

Давайте посмотрим, как это выглядит в реальной жизни. Примерно так выглядит содержимое дата-центра в Северной Америке, здесь хранятся данные.

А никто не задумывался, почему в дата-центрах с хайрезами не применяются аудиофильские патчкорды? Это же источник! Уж здесь точно должна быть максимальная аудиофилия. Но нет. Как видим, обычные шнурки
Что это?! По одному патчкорду вместе с моим DSOTM кто-то слушает Шуру Каретного и Модерн Токинг? Охренели совсем?!

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

Из дата-центра сигнал идёт как-то вот так, по одной из линий...

Иллюстрация из атласа «Мир аудиофила». М., 1989, издательство «Малыш»
Аудиофильность и гидрофобность

...и приходит в российский ЦОД, примерно такой

ЦОД

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

Стойка с оборудованием доступа (коммутационным оборудованием) у провайдера
Мой хайрез!!! Вместе с порнхабом и рефератом!!! И вокруг куча наводок!!! Аааа!!!

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

Приходим в комп пользователя

Итак, наши пакеты преодолели тысячи километров по оптоволокну, сотни патчкордов, десятки шлюзов и скопились в rx-буфере сетевого контроллера нашего компа или стримера. Далее они будут обрабатывать в соответствии с восходящим потоком по модели OSI и звук мы услышим тогда, когда преобразование выполнится до прикладного уровня. Здесь, упрощённо, произойдёт следующее:

1) программное обеспечение загрузит библиотеки, содержание функционал декодирования аудиоданных (происходит на уровне Application);

2) библиотеки декодирования обратятся к методам, поставляемым вместе с драйвером ЦАПа (обращение к уровню Kernel, ядро);

3) драйвер устройства через механизмы аппаратных абстракций (HAL) направит поток данных в соответствующие физические регистры ЦАПа (Devices).

4) ЦАП преобразует поток данных в аналоговый сигнал.

Эта архитектура справедлива и для Windows, и для стримеров на базе модифицированных сборок Linux.

Но я уже купил патчкорд стоимостью в твой сетап

Ах, да. Надо, наверное, дополнить архитектуру с учётом этой важнейшей особенности:

1 метр пути сигнала из 10 миллионов, но какой!

Что можно сделать, имея сетевой кабель стоимостью в мой сетап?

Я предлагаю следующее: купить вот такую звонилку:

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

все фото — из свободного доступа