Вы когда-нибудь задумывались, что именно происходит, когда вы отправляете сообщение другу на другом континенте — и ответ приходит за долю секунды, будто человек сидит рядом? За кулисами разворачивается цепочка невидимых преобразований: ваш голос, видео или текст превращаются в радиоволны, летящие до Wi-Fi-роутера, затем в электрические импульсы в медном кабеле (или вспышки света в оптоволокне), потом в мерцание света внутри стеклянной нити тоньше волоса, лежащей на дне океана — и вся последовательность проигрывается в обратном порядке на другом конце.
Поразительно, что мы можем общаться мгновенно с кем угодно в мире, просто создавая контролируемые, упорядоченные возмущения электричества, света и радиоволн. И при этом ни один человек, ни одна компания не управляют интернетом. Сообщение проходит через оборудование десятков независимых компаний в разных странах. Никто из них не координировался с остальными специально для передачи вашего сообщения, и никто не знает полный путь, который прошли ваши данные — каждый просто передаёт их следующему, ближайшему маршруту. Нет центрального компьютера, дирижирующего трафиком. И всё это работает миллиарды раз каждую секунду настолько надёжно, что мы замечаем только тогда, когда звонок заикается или видео буферизуется.
Мы передавали биты ещё до появления компьютеров
Вот что меня всегда поражало: сети старше вычислительной техники. Слово «сеть» изначально означало именно то, что звучит — сетчатую ткань из нитей, пересекающихся через регулярные промежутки. В начале XIX века инженеры заимствовали этот термин для описания связанных транспортных маршрутов — каналов и железных дорог. Когда появился электрический телеграф в 1840-х годах, слово естественно перетекло на системы проводов и станций.
Но базовый физический принцип сетевого соединения остаётся тем же, что у простейшего механического контакта. Натяните верёвку между двумя жестяными банками, говорите в одну — верёвка несёт вибрацию вашего голоса в другую как механическое движение, без усилителя или ретранслятора, просто волна, теряющая энергию на трение и провисание с каждым метром. Это уже весь принцип, лежащий в основе каждого канала связи, построенного с тех пор: изменяете физическую величину на одном конце и измеряете её на другом.
⚡ Что верёвка не может — так это нести сигнал на любое реальное расстояние без затухания. Настоящий прорыв телеграфа заключался не просто в замене верёвки на электрический провод, а в преодолении физического предела расстояния.
В 1844 году Сэмюэл Морзе отправил сообщение «What hath God wrought» из Вашингтона в Балтимор по медному проводу, используя азбуку Морзе — систему коротких и длинных электрических импульсов. Заметьте, чем телеграф на самом деле был: цифровой сетью. Он не передавал звук голоса; он передавал дискретные символы из фиксированного алфавита. У этого выбора было преимущество, которое викторианцы хорошо понимали: электромеханическое реле вдоль линии не должно было передавать саму волну — оно лишь должно было определить, есть ли импульс, и затем создать новую, чистую копию этого импульса для отправки по следующему сегменту провода. Дискретные символы плюс регенерация означали, что сообщение могло пересечь континент без деградации — то, чего ни один аналоговый сигнал не мог сделать.
Коммутация каналов против коммутации пакетов
Телефон, с 1876 года, работал на совершенно ином принципе — коммутации каналов. Когда вы звонили, система собирала выделенный электрический путь между вашим телефоном и телефоном собеседника. На время разговора эта цепочка меди принадлежала исключительно вашему разговору, от начала до конца.
Для речи это разумный дизайн — телефонный разговор это непрерывный сигнал, текущий почти всё время, поэтому зарезервированная линия реально используется. Но компьютерный трафик — взрывной. Терминал отправляет нажатие клавиши или запрос за миллисекунды, затем линия молчит, пока человек читает или процессор считает. Измеренная за сессию, цепь, зарезервированная для компьютерного разговора, простаивает подавляющее большинство времени, но блокирует ёмкость для всех остальных. Хуже того, путь фиксирован при установке звонка, поэтому один сломанный канал или коммутатор где-то вдоль него убивает соединение.
К началу 1960-х три фактора давили на дизайн коммутации каналов:
🌐 Исследовательские компьютеры размножались и нуждались в эффективном совместном использовании дорогих линий дальней связи.
⌨️ Интерактивные вычисления сделали взрывность трафика экстремальной.
🛡️ Военное ведомство США в разгар холодной войны хотело командную сеть, которая могла бы функционировать после потери больших частей себя — чего сеть фиксированных путей через центральные коммутаторы никогда не могла бы сделать.
Альтернативу независимо разработали два человека, не знавших о работе друг друга: Пол Баран в RAND Corporation, проектировавший для живучести, и Дональд Дэвис в британской Национальной физической лаборатории, проектировавший для разделения линий. Дэвис дал идее имя — пакет.
Вместо резервирования пути и потоковой передачи данных вниз по нему, каждое сообщение делится на небольшие самодостаточные единицы. Каждый пакет несёт заголовок — несколько байт управляющей информации, включая адреса отправителя и получателя, — за которым следует полезная нагрузка, сам фрагмент данных. Каждый коммутационный пункт вдоль пути, маршрутизатор, принимает пакет целиком, читает адрес назначения в заголовке, сверяется со своей таблицей, какой исходящий канал ведёт ближе к назначению, и пересылает пакет по нему.
Это store-and-forward коммутация — телеграфная ретрансляционная станция, rebuilt в электронике, с бумажной лентой, заменённой памятью, и оператором, заменённым таблицей поиска.
📦 Пакеты от тысяч несвязанных разговоров чередуются на одних и тех же проводах, поэтому ни одна линия не простаивает, пока у кого-то есть данные для отправки. И поскольку каждый пакет маршрутизируется независимо, сеть обходит повреждения. Если маршрутизатор умирает посреди разговора, последующие пакеты просто идут через его соседей. Баран назвал это распределённой сетью — сетью без точки, потеря которой может разрезать её надвое.
IP — тонкий протокол, который соединил всё
К 1970-м годам появились разные пакетные сети на совершенно разных физических средах: спутниковые каналы, пакетное радио для автомобилей, локальные кабели внутри зданий. Каждая имела свой формат пакетов, свой максимальный размер, свою схему адресации. Машина в одной сети не могла достучаться до машины в другой.
В 1973 году Винт Серф и Боб Кан разработали архитектуру, которая соединила их все без унификации. Вместо одной сети они предложили inter-network — сеть сетей, что буквально и означает «the Internet». Маршрутизаторы, названные шлюзами, сидели бы на границах между сетями.
IP (Internet Protocol) — это единственное, с чем все должны согласиться, и он намеренно крошечный. Он определяет универсальный адрес — IP-адрес — идентифицирующий каждую машину в любой участвующей сети, и универсальный формат пакета, который каждая сеть соглашается нести. Но критически важно: IP почти ничего не обещает. Он не имеет состояния — ни один маршрутизатор не помнит ничего о вашем разговоре от одного пакета к следующему. Он ненадёжен — пересылает каждый пакет как может, и если пакет потерян, IP не замечает и не заботится.
🔧 Поскольку планка установлена так низко, любая сеть может её преодолеть: медь, оптоволокно, радио, спутник — всё, что перемещает байты, может нести IP. Эта архитектура создаёт форму песочных часов: каждая физическая среда снизу и каждое приложение сверху взаимодействуют, потому что все встречаются у одного тонкого, простого протокола в середине.
TCP: надёжность из хаоса
TCP — это где живёт вся надёжность, которую IP отказался предоставлять. И он работает только на двух компьютерах по концам разговора. Маршрутизаторы между ними даже не знают о его существовании.
TCP нумерует каждый отправляемый байт, а получатель постоянно сообщает обратно следующий байт, который он ожидает получить — подтверждение, или ACK. Что не подтверждено вовремя, отправитель отправляет снова. Пакеты, пришедшие не по порядку, выстраиваются обратно по номерам, прежде чем данные передаются наверх.
Из хаоса с максимальными усилиями TCP производит абстракцию, против которой написана каждая сетевая программа: надёжный, упорядоченный поток байтов.
Я считаю это самым элегантным решением во всей архитектуре интернета. Вместо того чтобы делать сеть сложной и умной, они сделали её максимально глупой и простой, а всю ответственность за надёжность вытолкнули на края — на компьютеры отправителя и получателя. Это единственное самое важное архитектурное решение интернета, и ключ к тому, как он масштабировался до глобальной сети.
Один знаменитый момент в истории: в октябре 1986 года линия между Лабораторией Лоуренса Беркли и университетом Беркли, всего 400 метров, рухнула с 32 000 бит в секунду до 40 — тысячекратное падение. Каждый отправитель отвечал на потерю усиленной ретрансляцией, создавая спираль обратной связи, названную коллапсом перегрузки. Исправление Вана Якобсона — отступать мультипликативно при потере, осторожно пробовать вперёд при успехе — до сих пор работает в каждой реализации TCP на Земле.
DNS: имена вместо чисел
Маршрутизаторы доставляют пакеты на числовые адреса вроде 208.80.154.224, но эти числа почти невозможно запомнить. В дни ARPANET всё отображение жило в одном файле, HOSTS.TXT, поддерживаемом вручную в Стэнфордском исследовательском институте. К началу 1980-х это проваливалось: один офис, редактирующий один файл, не мог угнаться за экспоненциально растущей сетью.
В 1983 году Пол Мокапетрис разработал замену — Domain Name System, построенную на делегировании. Пространство имён — это иерархия, читаемая справа налево. Для en.wikipedia.org корень иерархии знает только, кто управляет доменами верхнего уровня вроде org; серверы org знают только, кто управляет wikipedia.org; а собственные серверы имён Википедии держат ответ для en.wikipedia.org. Никто не хранит всю карту; вместо этого пространство имён разделено на административные границы, называемые зонами.
🔍 Цена кэширования — устаревание. Когда сайт переезжает на новый адрес, старый ответ задерживается в кэшах по всему миру, пока не истечёт TTL. Эта задержка — причина того, почему изменения DNS распространяются не мгновенно, и почему удивительная доля загадочных сбоев — и в домашних сетях, и в облачных системах за миллиарды долларов — восходит к DNS.
TLS: секреты по публичным проводам
Коммерция пришла вслед за браузерами, и коммерция столкнулась с предположением, заложенным ещё со дней ARPANET: каждый протокол отправляет данные как открытые, читаемые байты. Ваши пакеты проходят через ваш роутер, вашего провайдера и десятки сетей, принадлежащих незнакомцам, и любая машина вдоль пути может прочитать каждый байт или тихо изменить его. Это было терпимо среди исследовательских лабораторий, обменивающихся физическими статьями. Это невыносимо для номера кредитной карты.
Если свести задачу к первым принципам, она выглядит неразрешимой: две стороны, которые никогда не встречались, должны договориться о секрете, общаясь только по каналу, который все могут читать. Всё, что одна отправляет другой для установления секрета, подслушивающий видит тоже.
🔐 Выход — криптография с открытым ключом, разработанная в 1970-х. Определённые математические операции легко выполнить, но вычислительно невозможно обратить. Из них можно построить пару ключей: данные, зашифрованные одним ключом, можно расшифровать только другим. Открытый ключ вы раздаёте миру; закрытый никогда не покидает ваш сервер.
Сердце рукопожатия TLS — обмен Диффи-Хеллмана. Обе стороны стартуют с двумя публичными константами, скажем g = 5 и p = 23. Браузер выбирает приватное число, скажем a = 6, и отправляет долю A = 5⁶ mod 23 = 8. Сервер выбирает своё приватное число, скажем b = 15, и отвечает долей B = 5¹⁵ mod 23 = 19. Затем каждая сторона возводит полученную долю в свою приватную степень: браузер считает 19⁶ mod 23 = 2, сервер считает 8¹⁵ mod 23 = 2. Они приходят к одному значению — сессионному ключу, — вычисленному независимо на обоих концах и никогда не отправленному по проводу, по которому прошли только 8 и 19.
Подслушивающий, держащий обе доли, должен восстановить приватное число, чтобы продвинуться дальше: какая степень 5 даёт 8 по модулю 23? Это задача дискретного логарифмирования, решаемая перебором при таком размере, но вычислительно невозможная при реальных размерах, где p составляет сотни цифр.
Что происходит, когда вы кликаете по ссылке
Давайте проследим один клик от начала до конца:
🌐 Вы кликаете по ссылке на https://en.wikipedia.org. Браузер извлекает имя хоста и запрашивает у DNS его IP-адрес, который возвращается за миллисекунды из ближайшего кэша или обходом иерархии.
🤝 Браузер открывает TCP-соединение на порт 443 — то самое трёхстороннее рукопожатие, три сегмента, договаривающиеся о нумерации байтов до того, как потечёт хоть один бит данных.
🔐 Рукопожатие TLS проходит поверх этого соединения, сертификат проверяется, сессионный ключ согласовывается.
📤 Браузер отправляет зашифрованный запрос: GET /wiki/Internet.
📥 Ответ, сотни килобайт HTML, возвращается как десятки IP-пакетов, индивидуально маршрутизируемых, возможно переупорядоченных, иногда теряемых и ретранслируемых, собранных TCP в точный поток байтов, расшифрованных TLS, и разобранных и отрисованных браузером.
Шаги 1–3 — чистые поездки туда-обратно, задержка, оплачиваемая до того, как двинется хоть один байт страницы. Вот почему даже быстрое соединение может ощущаться медленным при старте.
Выводы и прогнозы
Интернет постоянно меняется под давлением новых требований и узких мест. Адресное пространство IPv4 исчерпалось годы назад, а IPv6 всё ещё разворачивается лишь частично — потому что заменить фундамент, от которого все зависят, невероятно медленно. Реальное видео, облачный гейминг и удалённое сотрудничество продолжают толкать пределы задержки, поэтому низкоорбитальные спутниковые группировки теперь конкурируют с подводными кабелями по времени туда-обратно, и поэтому QUIC вообще был перепроизведён.
Я вижу интернет как триумф эмерджентного порядка над централизованным планированием. Каждый протокол в этой статье — IP, TCP, DNS, TLS — был заплаткой для конкретной проблемы, развёрнутой спустя десятилетия после того, как интернет уже «работал». Давление, которое их породило, не прекратилось: оно исходит от новых физических каналов, новых сценариев отказа и новых требований от программного обеспечения, которого не существовало, когда проектировался нижележащий слой.
Следующий протокол — тот, о котором ещё никто не договорился, — будет существовать потому, что какое-то приложение, работающее сегодня, напрягается против ограничения, которое можно решить только новым протоколом и новым набором компромиссов. И в этом, пожалуй, главная красота интернета: его архитектура позволяет этому происходить без чьего-либо разрешения.
Источники
- Faza — Networking and the Internet, from First Principles: https://fazamhd.com/mental-models/networking/
- A First-Principles Approach to Networked Systems (UC Santa Barbara): https://sites.cs.ucsb.edu/~arpitgupta/first-principles-networking/index.html
- Computer Networks From Scratch: https://www.networksfromscratch.com/
- Beej's Guide to Network Concepts: https://beej.us/guide/bgnet0/html/index.html