Интернет как накопление исключений
«Всякая достаточно сложная система начинает жить по своим собственным правилам»
Историю Интернета любят рассказывать через принципы: cквозная адресация, end-to-end, «тупая сеть», rough consensus and running code. Красивый набор догм для конференций и учебников. Но если посмотреть внимательнее, картина оказывается другой. Когда-то и я думал, что IAB отвечает за проектирование архитектуры сети…
Интернет всё меньше похож на систему, построенную по единому проекту, и всё больше на историю постоянных компромиссов. Когда первоначальное правило перестаёт соответствовать реальности, его обычно не отменяют. К нему добавляют исключение. Потом появляется механизм, позволяющий ему сосуществовать с основным правилом. Затем возникает необходимость учитывать уже новое исключение.
Так постепенно формируется архитектура, которую никто никогда целиком не проектировал.
Современный Интернет можно рассматривать как накопление заплаток, каждая из которых когда-то была способом сохранить работоспособность системы.
Первородный грех
Традиционная телефония строилась вокруг коммутации каналов — выделенного соединения, естественного для передачи голоса и ставшего доминирующей моделью телекоммуникаций. Идея коммутации пакетов была прямым нарушением этой догмы: сеть переставала быть предсказуемой, а канал — выделенным. Само появление IP стало отказом от логики классической телефонии.
Дальше пришла модель с глобально уникальным адресом у каждого узла, доставка от края до края без вмешательства сети. Красиво, стройно, и продержалось это ровно до момента, когда адресов физически стало не хватать.
NAT родился как временный хак в 1994 году. Его рассматривали как краткосрочное решение проблемы дефицита IPv4-адресов — до масштабного перехода на новую адресную архитектуру. Прошло больше тридцати лет. IPv6 так и не стал повсеместным, а NAT стал частью архитектуры доступа для огромного числа пользователей и сетей. Появился даже Carrier-Grade NAT.
Временное решение живёт дольше постоянной архитектуры. Сама архитектура со временем превращается в список случаев, когда правило разрешено не соблюдать.
Лес вместо дерева
С DNS отдельная история — нескончаемый поток RFC, где каждый следующий документ чаще оформляет исключение из модели «имя – адрес». Так, Punycode понадобился для того, чтобы вписать интернационализированные доменные имена в существующую ASCII-ориентированную модель DNS. .onion как special-use domain существует именно затем, чтобы не разрешаться через обычный публичный DNS, оставаясь при этом зарезервированным. Split DNS вообще трудно считать исключением, которое пришлось терпеть: он настолько вошёл в практику корпоративных сетей, что получил собственные стандартизованные механизмы.
Маршрутизация на доверии
BGP — ещё нагляднее. Протокол построен на модели взаимного доверия между автономными системами, сложившейся в относительно однородной и доверительной среде раннего Интернета. Он оставляет значительную часть контроля маршрутизации на уровне политик самих автономных систем. Но вся практика междоменной маршрутизации — это набор частных договорённостей: BGP-сообщества, значения которых во многих случаях определяются самими операторами; политики выборочного анонсирования; локальные фильтры, не описанные ни в одной спецификации. RPKI и ROV появились как попытка закрыть одну из этих уязвимостей — подтвердить, имеет ли конкретная автономная система право объявлять данный префикс — а на практике превратились в ещё один слой с проблемами. И здесь появляются собственные исключения: ошибки и устаревшие ROA, ошибочная маркировка маршрутов, проблемы реализации и ситуации, когда оператору приходится разбираться с маршрутом, получившим статус RPKI-invalid, но при этом остающимся необходимым для работы конкретной сети.
Забавно, что часть заплаток порождает следующее поколение уже против самой себя. Так TLS защищал трафик от посредников, пока корпоративные прокси и антивирусы с глубокой инспекцией пакетов не встроились в эту защиту на правах легитимного исключения. По мере того, как TCP всё сильнее сталкивался с ограничениями middlebox-инфраструктуры, возник интерес к транспортному механизму, менее связанному с её ограничениями. QUIC перенёс значительную часть транспортной логики на конечные узлы и использовал UDP как основу. Получилась пирамида компромиссов, где каждый новый слой строился ровно для того, чтобы обойти предыдущий, вполне законный слой.
Юрисдикция вместо протокола
На институциональном уровне то же самое, только вместо протоколов — юрисдикции.
RIR десятилетиями декларировали техническую нейтральность распределения ресурсов. Санкционное законодательство показало, что деятельность RIR не существует вне юрисдикций. Например, RIPE NCC, как организация, находящаяся в Нидерландах, обязана соблюдать применимые санкции ЕС и в соответствующих случаях замораживать регистрацию интернет-ресурсов в своей базе. Список «кому нельзя» живёт отдельно от формальной политики распределения адресов и постоянно расширяется. Даже контрактная модель ICANN предусматривает механизмы временных отступлений от обычного порядка — например, contractual waivers и временные политики.
Даже сама идея «единой глобальной сети» держится не на технической невозможности её сломать, а на том, что ситуацию всем сторонам пока выгоднее терпеть, чем разрубать. И geo-blocking, DPI, национальная фильтрация, многие из этих механизмов в момент появления объяснялись технической необходимостью, безопасностью или временными обстоятельствами. Со временем они перестали быть исключениями и стали частью повседневной инфраструктуры Интернета.
Walled gardens (Огороженные сады)
Отдельный пласт на прикладном уровне, где о принципах открытости давно даже не вспоминают всерьёз. Экосистемы вроде WhatsApp, iMessage или WeChat в значительной степени контролируют взаимодействие через собственные протоколы и API платформы. Межплатформенная открытость здесь остаётся скорее исключением: например, WhatsApp в Европе уже вынужден поддерживать определённую интероперабельность со сторонними мессенджерами в рамках требований DMA. Формально Интернет остаётся сетью с открытыми стандартами. Фактически для миллиардов пользователей — это набор частных протоколов внутри огороженных садов. Просто эта ситуация настолько массовая, что перестало восприниматься как отклонение от нормы.
CDN стали ещё одним примером того, как функции, которые классическая архитектура предпочитала оставлять на конечных узлах, постепенно перемещались в сеть. Кэширование, TLS termination, балансировка и маршрутизация запросов превратили инфраструктуру доставки контента в активного участника обмена. Крупнейшие CDN стали основными посредниками между конечным пользователем и содержанием, фактически меняя традиционную модель распределения нагрузки между сетью и конечными узлами. Назвать получившуюся конструкцию «тупой сетью» можно разве что по инерции.
Принцип Постела наизнанку
«Be liberal in what you accept, and conservative in what you send» — в каком-то смысле вывернутая наизнанку версия этого принципа действительно описывает эволюцию Интернета: участники постепенно учатся принимать чужие отклонения от первоначальной модели, если это позволяет сохранить связность.
Можно ли было спроектировать сеть так, чтобы заплаток не потребовалось? Сомневаюсь. Cистема, которая должна масштабироваться на миллиарды разнородных узлов, физически не может быть спроектирована заранее под все условия — она растёт через накопление частных договорённостей о том, где правило можно нарушить без катастрофы. Есть известная мысль: Интернет нельзя спроектировать целиком — его приходится выращивать, используя доступные технологии и постепенно адаптируя архитектуру к реальности. Можно только уточнить: расти он может только через накопление исключений из собственных же деклараций.
Показательно, что сам процесс стандартизации это давно, по сути, институционализировал. IETF давно научился развивать протоколы не только заменой исходной спецификации, но и через расширения, профили, обновления и Best Current Practices. В результате вокруг многих базовых RFC возникает не новая монолитная спецификация, а семейство связанных документов.
Система, которую никто не проектировал
Каждое отдельное исключение по отдельности оправдано и разумно. Но их сумма за несколько десятилетий — это уже не сеть, построенная на принципах end-to-end и децентрализации, а система, в которой эти принципы остались вывеской, а реальная архитектура определяется всей совокупностью наслоений.
Впору проводить археологические раскопки…
Сеть, которую называют единой и открытой, устроена как слоёный пирог компоста из компромиссов, каждый из которых когда-то считался разовым исключением из общего правила. Учебники по-прежнему описывают правила. Работают исключения.
Изображение только для иллюстрации. Источник: сгенерировано Magnific.com

