В детстве все мы играли в «испорченный телефон». Вы шепотом говорите соседу слово «кошка», он передаёт его дальше, и к концу скамейки, пройдя через десять человек, это слово превращается в «картошку». В детстве это весело.
Но представьте, что вы переводите с банковского счёта тысячу рублей. Из-за крошечной помехи на линии передачи данных один нолик где-то теряется, другой превращается в единицу, и в банк приходит команда: «Перевести девять тысяч рублей». И вот это уже совсем не смешно.
Наш мир невероятно шумный. Электрические наводки в проводах от проезжающего трамвая. Грозы, бьющие по радиоэфиру. Микроволновка соседа, которая глушит ваш
Wi-Fi. Космическая радиация, прошивающая спутники. Вся эта физическая реальность постоянно атакует наши данные. Ежесекундно миллионы бит — нулей и единиц — переворачиваются в пути, стираются или теряются навсегда.
Меня зовут Иннокентий Солнцев, это подкаст
«До нас дошло». И сегодня мы поговорим о величайшем фокусе в истории связи. О том, как инженеры научили технику передавать идеальную картинку по каналу, который гарантированно её искажает. Мы узнаем, почему компакт-диск играет даже сильно поцарапанным, как ваш телефон читает грязный QR-код на столике в кафе, и при чём тут аппарат «Вояджер», летящий за пределами Солнечной системы.
Сегодня мы поговорим о том, как человечество победило «испорченный телефон».
–джингл–
Как люди боролись с шумом до появления компьютеров? Если мы плохо слышим собеседника по телефону из-за треска на линии, мы делаем две вещи: мы начинаем говорить медленнее и мы повторяем слова. «Встречаемся в шесть. Повторяю: в шесть. Восемнадцать ноль-ноль».
Это называется внесением избыточности. Мы тратим лишнее время и произносим лишние слова, просто чтобы гарантировать доставку смысла.
Авиация, флот и даже диспетчеры такси довели этот принцип до абсолюта. Радиоэфир — это сплошная помеха. Сквозь треск двигателей и статику буквы «Б» и «П», «М» и «Н» звучат абсолютно одинаково. Ошибка в одной букве при передаче координат или номера машины может стоить дорого.
Поэтому был придуман фонетический алфавит. Вспомните, как вы диктуете сложную фамилию по телефону: «Эс как доллар, И с точкой...». А профессионалы связи используют имена: А — Анна, Б — Борис, В — Василий, Ц — Цапля.
С точки зрения теории информации это чудовищно неэффективно. Вместо короткого звука «Б» вы произносите целое слово из пяти букв, тратя драгоценное эфирное время. Зато «Бориса» невозможно перепутать с «Петром», даже если половину звуков съест радиопомеха. Вы внесли гигантскую избыточность ради стопроцентной надёжности.
Когда появились первые компьютеры и сети передачи данных, инженеры столкнулись с той же проблемой. По проводам бегут нули и единицы. Из-за скачка напряжения ноль может легко превратиться в единицу. Как компьютеру на том конце понять, что его обманули?
Самый тупой и «человеческий» способ — это просто повторять каждый бит несколько раз. Допустим, мы договорились повторять всё трижды.
Вместо единицы 1 компьютер отправляет 111. Вместо нуля — 000.
Компьютер-получатель ловит пакет: 101. Он видит: ага, единиц две, а ноль один. Значит, ноль — это ошибка, случайная помеха. Большинство побеждает, и компьютер исправляет пакет обратно на 1.
Это работает! Система способна сама найти и исправить ошибку. Но какой ценой? Скорость нашей связи упала ровно в три раза. Мы забиваем драгоценный кабель лишними повторениями. Это всё равно что отправлять три одинаковых письма разными курьерами, надеясь, что хотя бы два дойдут без опечаток.
Инженерам нужно было что-то гораздо более изящное. Нужна была математика.
–джингл–
Конечно, избыточность дает нам пользу - она позволяет не только узнавать о возникновении ошибки, но и исправлять ее на лету. Но просто отправлять каждый бит по три раза — это чудовищно дорого. В середине двадцатого века память измерялась килобайтами, и тратить 66% её объёма на страховку от ошибок было немыслимо.
И математики предложили несколько вариантов решения проблемы.
Первое элегантное решение — это бит чётности.
Представьте, что компьютер отправляет блок из 7 нулей и единиц (например, букву «A»). Прежде чем отправить, он считает: «Так, в этом пакете у меня ровно три единички. Три — число нечётное». И он добавляет в конец пакета восьмой, «проверочный» бит - еще одну единицу, раз получилось число нечетное, или ноль, если бы получилось четное. Теперь в пакете из 8 бит всегда должно быть чётное количество единиц.
Компьютер на другом конце ловит пакет, считает единицы. Если их по-прежнему чётное количество (четыре) — всё отлично. Но если по пути из-за скачка напряжения один нолик превратился в единицу, или наоборот, единица в ноль, то получатель сосчитает и возмутится: «Эй, у меня пять единиц! Нечётное число! В пути произошла ошибка!». И он просто отбросит этот битый пакет.
Фундаментальный недостаток бита четности - невозможность определить, где именно она произошла. Какой из восьми битов перевернулся? Первый? Пятый? Восьмой? Компьютер не знал. Ему приходилось останавливать работу, зажигать красную лампочку и просить оператора: «Я получил мусор, загрузите эти данные заново».
А теперь представьте конец 1940-х. Лаборатория
Bell Labs. Математик Ричард Хэмминг работает на гигантском, громко лязгающем компьютере Bell Model V.
Никаких жестких дисков или флешек тогда не было. Программы и формулы загружались в машину с помощью перфокарт.
Если вы не застали эту эпоху, представьте себе плотный картонный прямоугольник размером с большой лотерейный билет, усыпанный рядами пробитых отверстий. Логика хранения данных была максимально физической: есть дырочка в картоне — это единица. Нет дырочки — это ноль. Компьютер втягивал эти картонки одну за другой и «читал» их с помощью металлических щеточек или лучей света.
На выходные Хэмминг оставляет машине огромную стопку таких перфокарт для сложных расчётов и со спокойной душой уходит домой.
Но где-то в субботу вечером машина натыкается на случайную ошибку чтения. Может, при вырубке карточки кусочек картона оторвался не до конца и повис на волоске. А может, в считывающий механизм просто попала пылинка. Из-за этой пылинки вместо единицы компьютер прочитал ноль. Бит чётности не сошелся.
Компьютер зажигает красную лампочку, не может исправить ошибку сам и... просто останавливает работу. Он тупо ждет человека, который подойдет, вытащит бракованную картонку, продует её и вставит заново. Но лаборатория пуста. До самого утра понедельника огромная вычислительная машина просто стоит без дела. Два дня дорогостоящего времени улетают в трубу из-за одной пылинки.
Хэмминг пришел в бешенство. Как гласит легенда, он кричал: «Чёрт возьми, если машина *знает*, что произошла ошибка, почему она не может сама вычислить, *где* она, и исправить её?!»
Эта ярость привела к одному из величайших прорывов в информатике. Хэмминг придумал алгоритм, который подарил компьютерам способность к самоисцелению.
Он понял: одного проверочного бита мало. Нужно несколько. И он вплёл их прямо внутрь данных, как сложный кроссворд.
Вместо того, чтобы считать чётность всего пакета целиком, код Хэмминга проверяет данные по хитрому шаблону: первый бит проверяет чётность 1-й, 3-й, 5-й и 7-й позиций. Второй бит проверяет 2-ю, 3-ю, 6-ю и 7-ю. И так далее.
Если в пути один бит переворачивается, ломается не одна проверка, а сразу несколько. И по комбинации этих «сломанных» проверок система безошибочно указывает пальцем на предателя. «Ага, сломалась первая и третья проверка — значит, ошибку выдал пятый бит!»
Машина находит битый ноль, молча меняет его на единицу и продолжает работу. Никаких остановок. Никаких красных лампочек. Магия самовосстановления.
Это был прорыв. Память с коррекцией ошибок (ECC RAM) в современных серверах, которые держат ваши банковские счета, до сих пор работает по принципам, заложенным разъярённым Ричардом Хэммингом в 1950 году, защищая базы данных от случайных сбоев.
Но код Хэмминга спасал только от одиночных ошибок. А что делать, если из-за сильной помехи или царапины на диске пропадает сразу огромный кусок данных?
–джингл–
Код Хэмминга был крут для одиночных ошибок. Один бит перевернулся — мы его нашли и починили. Это идеальная защита от случайного скачка напряжения в оперативной памяти чистого, кондиционируемого дата-центра.
Но реальный мир устроен гораздо грубее. В нём бывают помехи, которые «выкашивают» данные целыми блоками. Грозовой разряд в радиоэфире, глубокая царапина на компакт-диске, грязь на штрихкоде. Когда пропадает не один бит, а тысяча подряд, код Хэмминга бессилен. Он просто поднимет лапки кверху: «Здесь слишком много ошибок, я сдаюсь».
И здесь на сцену выходят математики Ирвинг Рид и Густав Соломон. В 1960 году они придумали алгоритм, который до сих пор кажется чистой черной магией.
Чтобы понять, как он работает, представьте себе график. Обычный график со шкалой X и Y. Вам нужно передать другу сообщение. Вы кодируете его в виде двух точек на этом графике.
Через две точки можно провести только одну уникальную прямую линию. У этой линии есть формула.
Вместо того чтобы просто отправлять другу эти две точки и надеяться, что они дойдут, вы делаете хитрость. Вы берете эту самую линию и ставите на ней еще три дополнительные точки. И отправляете другу все пять.
Это избыточность. Но не тупое повторение одного и того же, как мы делали раньше. Вы передаете свойства линии.
Теперь представьте, что пакет летит по интернету, и из-за помехи две точки стираются навсегда. Ваш друг получает только три.
Но ему и не нужны все пять! Ему достаточно любых двух точек, чтобы заново начертить ту самую уникальную прямую линию. А начертив её, он мгновенно вычислит, где именно находились те две точки, которые стерла помеха.
Рид и Соломон использовали этот геометрический принцип, только в тысячекратном масштабе и с помощью невероятно сложной алгебры (так называемых конечных полей Галуа). Их алгоритм берет блок данных, строит по нему сложнейший математический «полином», вычисляет дополнительные проверочные байты и прикрепляет их к сообщению.
Если по дороге кусок сообщения стирается — алгоритм Рида-Соломона берет то, что осталось, решает гигантскую систему уравнений и с абсолютной точностью дорисовывает пропавший кусок.
Вы сталкиваетесь с этой магией каждый день.
Вспомните QR-коды. Вы можете оторвать до 30% наклейки с QR-кодом на столике в кафе, заляпать его кетчупом, поцарапать ключами — и камера вашего смартфона всё равно мгновенно его прочитает и откроет меню. Это не потому, что камера или нейросети такие умные. Это потому, что внутри этих черно-белых квадратиков заложен избыточный код Рида-Соломона. Ваш телефон читает грязные остатки кода, решает уравнения и математически «чинит» порванную наклейку прямо в оперативной памяти.
Или возьмем ваш смартфон. Внутри него — чип флеш-памяти. SSD-накопители и память телефонов невероятно плотные, транзисторы там размером в несколько атомов. Из-за такой плотности биты информации в соседних ячейках постоянно «пробивают» друг друга статическим электричеством. Флеш-память — это изначально очень шумная и ненадежная среда, она сыплет ошибками каждую секунду. Без кодов коррекции ваш телефон превратился бы в «кирпич» через пару дней работы, потому что операционная система просто бы разрушилась. Контроллер памяти непрерывно, миллионы раз в секунду, прогоняет алгоритмы коррекции (Рида-Соломона или более современные LDPC-коды), исправляя битые нули и единицы на лету, прежде чем отдать их процессору.
И наконец, стриминг. Вы едете в трясущемся поезде метро или в автомобиле по трассе и смотрите YouTube в высоком разрешении. Сотовая связь (LTE, 5G) — это ужасный канал передачи данных. Сигнал отражается от зданий, глушится бетоном, интерферирует с другими телефонами. Каждую секунду ваш телефон теряет целые куски видеопотока. Но картинка не рассыпается на пиксели и не зависает. Потому что вместе с видео к вам летят спасительные математические полиномы. Процессор вашего телефона берет «рваный» поток данных из эфира и с абсолютной точностью восстанавливает пропавшие кадры по уравнениям. Вы смотрите идеальное кино, пока ваш радиомодуль борется с хаосом помех.
Но главное испытание для алгоритма Рида-Соломона было не в кармане и не в метро. Его ждал космос.
–джингл–
Самое суровое испытание для любой системы связи — это расстояние. Чем дальше вы от источника, тем слабее сигнал и тем громче шум вокруг.
В 1977 году человечество запустило в космос два аппарата: «Вояджер-1» и «Вояджер-2». Их задачей было пролететь мимо газовых гигантов — Юпитера, Сатурна, Урана, Нептуна — сфотографировать их вблизи и отправить снимки домой.
Сегодня, спустя почти полвека, оба «Вояджера» всё ещё живы. Они покинули Солнечную систему и находятся в межзвёздном пространстве, на расстоянии более 24 миллиардов километров от Земли. Это так далеко, что радиосигнал, летящий со скоростью света, добирается до нас 22 часа. В одну сторону. Вы отправляете команду зонду в понедельник утром, а ответ получаете только во вторник к вечеру. И никаких повторов, если пакет данных потерялся.
Но проблема не только во времени. Проблема в мощности.
Передатчик «Вояджера» имеет мощность около 20 Ватт. Это мощность лампочки в вашем холодильнике.
Представьте: лампочка светит за 24 миллиарда километров от вас. Свет от неё рассеивается в пустоте. На своём пути сигнал проходит сквозь радиационные пояса планет, сквозь солнечный ветер, сквозь фоновый радиошум самой Вселенной. И всё это время космическая радиация бомбардирует антенну, буквально выбивая биты информации из потока, переворачивая нули в единицы и стирая целые куски данных.
К моменту, когда этот сигнал достигает гигантских 70-метровых антенн Сети дальней космической связи NASA на Земле, его мощность составляет ничтожные доли аттоватта. Это сигнал в 20 миллиардов раз слабее, чем излучение батарейки электронных наручных часов. Он тонет в шуме земной атмосферы и аппаратуры самих приёмников.
Как при таких условиях мы получали кристально чёткие, детальные фотографии колец Сатурна и облаков Юпитера?
Секрет был не в мощности антенны. Секрет был в математике.
Инженеры NASA понимали, что сигнал придёт на Землю изрешечённым ошибками. Поэтому перед тем, как отправить фотографию, бортовой компьютер «Вояджера» (кстати, его оперативная память меньше 70 килобайт — это размер крошечной картинки на современном сайте) упаковывал данные в «броню» из кодов коррекции ошибок. Сначала они использовали коды Голея, а затем, когда зонды улетели ещё дальше к Урану и Нептуну, инженеры удалённо перепрошили аппараты, заставив их использовать более мощные алгоритмы Рида-Соломона.
Да, зонду приходилось тратить драгоценную энергию и время на вычисление математических полиномов и добавление проверочных байтов. Да, объём передаваемых данных неизбежно возрастал.
Но результат стоил того. Сигнал приходил на Землю грязным, битым, полным дыр и космического мусора. Но суперкомпьютеры NASA ловили этот «рваный» поток, пропускали его через уравнения Рида-Соломона и восстанавливали каждый потерянный пиксель со 100% точностью.
Математика из 1960-х годов позволила человечеству впервые в истории заглянуть за край нашей планетной системы, собрав идеальную картинку из радиочастотного хаоса.
–джингл–
Мы привыкли восхищаться скоростью интернета, мощностью процессоров в наших смартфонах и четкостью видеозвонков. Нам кажется, что технологии просто стали работать «лучше и быстрее».
Но правда в том, что наш мир — от гудящего серверами дата-центра до вашего домашнего роутера, от грязного столика с QR-кодом до ледяной пустоты за пределами Солнечной системы — это невероятно враждебная и шумная среда. Электричество нестабильно. Радиоволны сталкиваются. Космические лучи прошивают микросхемы. Если бы мы просто отправляли нули и единицы «как есть», наш цифровой мир рассыпался бы в труху за долю секунды. Банковские счета обнулялись бы от проехавшего мимо трамвая, а видео на YouTube превратилось бы в неразборчивую пиксельную кашу.
Возвращаяемся к игре в «испорченный телефон» из детства, где слово «кошка», проходя через десяток человек, неизбежно превращается в «картошку». Физика нашей вселенной устроена точно так же: она постоянно шепчет глупости в ухо вашему смартфону, роутеру и банковскому серверу. Она пытается всё запутать и сломать.
И единственная причина, по которой «кошка» на сервере в Америке остается «кошкой» на вашем экране в России — это невидимый математический фундамент. Алгоритмы Ричарда Хэмминга, Ирвинга Рида и Густава Соломона слушают эту искаженную «картошку», решают миллионы уравнений в секунду и железно заявляют: «Нет, изначально здесь была кошка. Я исправляю».
Каждый раз, когда вы бесконтактно оплачиваете кофе или смотрите сериал в трясущемся вагоне метро, где-то глубоко в кремниевых чипах происходит маленькое чудо самоисцеления. И это, пожалуй, одна из самых красивых вещей, которые придумало человечество.Этот выпуск для вас подготовили Иннокентий Солнцев и звукорежиссер Алексей Попов.
0 коментариев