The Internet map

Введение

В первой части мы разбирались, что такое Интернет в плане кабелей, роутеров и остальной инфраструктуры. Смотрели, кто владеет этой инфраструктурой, и как она используется, чтобы дать доступ к Интернету 28 миллиардам различных устройств.

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

Имя, адрес и маршрут

Для начала немного поговорим о том, как мы находим нужное место в нашем привычном мире. Обычно, всё начинается с того, что мы знаем название или имя места, куда мы хотим попасть. Допустим я из своего дома хочу попасть в ближайший магазин “Пятёрочка”, чтобы купить там продуктов и приготовить себе обед.

Route

Чтобы попасть в “Пятёрочку”, мне надо узнать адрес. Допустим у нужной мне “Пятёрочки” такой адрес:

Route

В адресе есть указание сначала на страну, потом на город, потом на улицу, и, в конце концов, на дом. Всё это однозначно определяет то место, которое мне нужно. Если поменять что-то в адресе, то это будет уже другое место или вообще несуществующее место. Например, если поменять номер дома в адресе, например на 12, то это будет уже Новогиреевская ул., 12, то есть другой дом. Если поменять название улицы — например, на улицу Тверская — то получится Тверская ул., 11. Это будет место в том же городе, но уже совсем в другом районе. И так далее, если поменять в адресе город или страну, то скорее всего такого места вообще не найдётся.

Таким образом, сочетание страны, города, улицы и номера дома даёт нам уникальное сочетание, которое обозначает нужный нам дом. То есть каждому адресу соответствует один определенный дом, а у каждого дома есть один определенный адрес.

Чтобы попасть по нужному адресу, нужна еще одна штука — маршрут. Маршрут — это последовательный набор точек, через которые нужно пройти. Например, мой маршрут до “Пятёрочки” мог бы выглядеть так:

  1. Выход из подъезда
  2. 3-я Владимирская улица
  3. Улица Металлургов
  4. Новогиреевская улица
  5. Новогиреевская улица 11

То есть для ориентации в физическом мире важно знать три вещи:

Имя — Что мы ищем

Адрес — Где оно находится

Маршрут — Как туда добраться

В Интернете работают эти же понятия, и за каждое из них в Интернете отвечает специальная система или протокол:

Имя — Domain Name System (DNS)

Адрес — Internet Protocol (IP)

Маршрут — Border Gateway Protocol (BGP)

Сначала разберёмся, как устроены адреса в Интернете.

Где оно находится

Как устроен адрес в нашем физическом мире, мы хорошо представляем. Если бы тот же YouTube был физическим местом, куда ты приходишь ногами и смотришь видео, то его адрес выглядел бы, возможно, как-то так:

Address 1

Но так как YouTube — это НЕ физическое место, а ресурс с видео в Интернете, поэтому его адрес выглядит так:

Address 2

Это IP-адрес. IP — это аббревиатура названия протокола, которые управляет адресацией в Интернете. Этот протокол называется не очень замысловато — Internet Protocol.

Людям из сферы IT, которые довольно часто сталкиваются с IP-адресами, эти адреса уже довольно привычны. Но при первом знакомстве, мне кажется, к ним может быть много вопросов:

  • Что значат все эти цифры?
  • И вообще зачем тут цифры?
  • Почему нельзя сделать какой-то более понятный адрес?
  • Как вообще по этому адресу понять где это находится?

На самом деле, этот адрес очень понятный. Просто понятен он не человеку, а компьютеру. IP-адрес нужен, чтобы компьютеры могли друг друга находить в огромном Интернете, поэтому IP-адреса должны быть хорошо понятны в первую очередь компьютерам, а людям приходится подстраиваться. Даже запись IP-адреса в виде четырёх групп по три цифры (как выше) — это очень “очеловеченная” запись. В самом компьютере адрес выглядит вот так:

Address 3

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

Кстати, поскольку IP-адерс состоит из 32-х нулей и единиц, то значит всего может существовать 4,3 млрд. уникальных IP-адресов. При этом, в самом конце первой части, где была красивая картинка с визуализацией Интернета, мы говорили о том, что к Интернету сейчас подключено 28 млрд. устройств. Как же так? Устройств 28 млрд., а адресов — всего 4 млрд.? Ведь по идее у каждого устройства в сети должен быть уникальный адрес, чтобы другие могли его найти?

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

Немного истории

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

Одна из таких систем, которая в итоге во многом легла в основу Интернета, называлась ARPANET. Она была создана в конце 1969 и просуществовала до 1990 года.

ARPANET 1981

[Оригинал]

На этой схеме мы видим, сколько узлов было в ARPANET примерно во время создания протокола IP. Ещё раз, на этой схеме ВСЕ узлы самой большой сети на тот момент — немногим больше 200 компьютеров. Конечно, когда ты придумываешь адреса для сетей и в самый большой сети на тот момент 200 компьютеров, то 4,3 млрд. кажется тебе достаточным количеством адресов с огромным запасом.

Ещё важно помнить, что ARPANET разрабатывалась для нужд военных, и, конечно, не предполагалась для широкого использования. Даже сеть NSFNET, которая была идейным наследником ARPANET и включала намного больше узлов, даже близко не могла подойти к исчерпанию IP-адресов.

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

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

IP meme

Объяснять мемы конечно дело такое, но дело вот в чём. Изначально в IP предполагалось три типа сетей. Сейчас совсем не важно, что это за типы, просто посмотрим на масштаб чисел. Короче, IP предполагал три типа сетей, самые маленькие — где будет максимум 254 узла, побольше — до 65 534 узлов, и СУПЕР ОГРОМНЫЕ с почти 17 миллионами.

Поэтому, когда мы говорим о том, почему IP адреса были созданы именно такими, нужно помнить, что на момент создания люди возможно думали, что они придумали ВООБЩЕ ВСЕ адреса, которые когда либо понадобятся человечеству. На момент создания протокола IP никто не ожидал, что уже через 30 лет все IP-адреса закончатся.

Тем не менее, через 30 лет адреса закончились, и эту проблему надо было как-то решать.

Что же делать

Люди поняли, что есть проблема, довольно рано. Уже в 1990-х был разработан новый стандарт Интернет-адресов. Это тоже IP, но уже 6-й версии. Эта версия поддерживает уже какое-то невообразимо большое количество адресов — 3,4×10³⁸.

Это в 100 000 000 000 000 000 000 000 000 000 раз больше, чем IPv4, который используется сейчас.

Внедрение IPv6 идёт по всему Интернету, но идёт, к сожалению, о-о-очень медленно. На данный момент где-то треть устройств в Интернете использует IPv6.

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

IPv6 нужен для того, чтобы увеличить доступный набор адресов. Но, кроме этого, можно ещё придумать разные способы, как более экономно использовать уже существующие адреса IPv4.

Приватные сети

Один из таких способов — это использовать один адрес для многих устройств. Это можно сделать с помощью приватных сетей.

Private networks

Допустим, у нас есть роутер, к которому подключено 4 устройства. У роутера есть публичный IP-адрес, который виден всему Интернету. А вот между роутером и устройствами настроена внутренняя (или приватная) сеть со своим набором IP-адресов, которые остальному Интернету не видны.

Поскольку это внутренняя сеть, не доступная остальным устройствам в Интернете, то в ней можно использовать любые из 4 млрд. адресов и никаких проблем не будет. Какие бы мы адреса не использовали во внутренней сети, для всего остального Интернета у наших 4-х устройств будет один и тот же публичный адрес, и таким образом мы “сэкономим” IP-адреса.

Виртуальный хостинг

Ещё один метод, с помощью которого можно снизить потребность в IP-адресах, — это виртуальный хостинг.

Virtual hosting

Допустим, у нас есть 4 разных сайта. Мы эти сайты можем разместить на одном сервере, у которого будет один IP-адрес. Разбираться, когда какой сайт показать, будет уже сервер, главное, что нам не нужен отдельный IP-адрес для каждого сайта.

Все эти способы пока помогают обходиться 4 млрд. адресов IPv4. Окончательно проблема решится, когда большая часть Интернета перейдёт на IPv6, ну а пока — приватные адреса всем!

Что мы ищем

Так, допустим с адресами в Интернете мы разобрались. Но как мне узнать какой адрес у того сайта, который я хочу открыть?

Internet

Помните у нас была в начале такая картинка? Вот есть пользователь, который хочет зайти на YouTube, чтобы смотреть там видео. Что он для этого делает?

Один из вариантов может быть например такой: пользователь заходит в браузер, вбивает в адресной строке youtube.com и нажимает Enter. Дальше проходит какое-то небольшое время и открывается YouTube.

И вот тут возникает вопрос. Как мы помним, в Интернете у нас используются IP-адреса. И если у нас открылся YouTube, значит наш компьютер или браузер каким-то образом преобразовал адрес youtube.com в IP-адрес, нашёл его в сети и загрузил нужные данные. Как он это сделал?

Для этого в Интернете существует целая специальная система. Она называется Domain Name System — Система доменных имён — или сокращённо DNS.

Contacts

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

DNS

Если помните, чуть раньше у нас была вот такая картинка. С помощью системы DNS как раз и настраивается то, на каком адресе искать определённый домен. С ее помощью можно настраивать разные конфигурации. Можно сделать, как здесь на картинке — когда один адрес соответствует нескольким именам. Можно сделать и наоборот — чтобы одному имени соответствовало несколько адресов.

Маршрут или как туда добраться

Мы уже поняли, как устроены адреса в Интернете и как из названия получить адрес. Отлично! Допустим, мы знаем адрес. А как до него добраться-то?

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

Например, как мы помним, мой маршрут до магазина выглядел так:

  1. Выйти из подъезда
  2. 3-я Владимирская улица
  3. Улица Металлургов
  4. Новогиреевская улица
  5. Новогиреевская улица 11

А в Интернете как? На самом деле, примерно так же.

Star-schema

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

А что если сеть побольше и посложнее, например та самая ARPANET?

ARPANET 1981

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

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

Давайте поделим Интернет

А придумать можно, например, такое решение. Пусть у нас весь Интернет будет поделен на отдельные большие сети. Эти большие сети будут знать маршруты друг до друга, но не до каждого конкретного узла внутри другой сети. Каждая сеть для остального Интернета будет выглядеть как единое целое. Эти большие сети будут обмениваться друг с другом информацией о маршрутах и, таким образом, любая из больших сетей будет знать, как добраться до любой другой большой сети.

Autonomous Systems

Эти “большие сети” Интернета называются Автономные системы. На границах этих систем стоят специальные роутеры, которые обмениваются друг с другом информацией о маршрутах до других систем. Это очень мощные роутеры, которые способны в себе хранить несколько вариантов маршрутов до других автономных систем и выбирать оптимальный.

За счёт такой организации Интернета мы, что называется, сводим задачу к предыдущей. Только до этого (например, в ARPANET) у нас роутеры знали маршруты до каждого конкретного узла в сети, а теперь роутеры знают маршрут до каждой Автономной системы. Автономных систем в Интернете “всего лишь” пару десятков тысяч, поэтому маршруты до них худо-бедно влезают в память мощных роутеров.

Border Gateway Protocol (BGP)

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

BGP

Протокол BGP позволяет Автономным системам обмениваться маршрутами друг с другом. Обмен маршрутами основан на наборах IP-адресов, которые присвоены каждой Автономной системе.

Например Автономной системе 1 (AS1) присвоены адреса, которые начинаются на 173.194.221. AS1 сообщает соседям, что адреса вида 173.194.221.*** — это её адреса, соседи сообщают своим соседям и т.д. Через какое-то время все Автономные системы знают, что если к ним пришел трафик с адресом, который начинается на 173.194.221, то его нужно направить в сторону Автономной системы 1.

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

На этой схеме AS1 может быть, например, Google, AS2 — Ростелеком, а AS3 — какой-нибудь небольшой Интернет-провайдер в городе, где вы живёте.

BGP — это важный протокол, он позволяет Автономным системам находить другие Автономные системы в огромном Интернете. Протокол важный, поэтому и цена ошибок в его настройках очень высокая. Ошибки в BGP могут приводить к тому, что целые огромные сети пропадают из Интернета. Например, так случилось Автономной системой Facebook-а в начале октября 2021 года. Ошибки в настройках BGP привели к тому, что другие Автономные системы перестали видеть сеть Facebook-а. В результуте все их сервисы были недоступны в течение 6 часов. При этом сами сервера работали и были готовы принимать трафик, просто никто не знал, куда этот трафик направить.

Всё вместе

Итак, мы узнали, как устроен Интернет физически, потом поразбирались с тем, как устроены имена, адреса и маршруты. Теперь попробуем это всё соединить в одну картину.

Amazing map

Допустим, где-то на планете, допустим в России, в сети провайдера третьего уровня сидит наш абонент и хочет посмотреть видео на YouTube.

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

Пользователь вводит youtube.com в строке браузера. Через систему DNS компьютер узнает IP-адрес для youtube.com и посылает туда запрос.

Запрос проходит через сеть провайдера наружу и идет до Автономной системы Google через магистральных провайдеров, которые передают трафик в Северную Америку.

Запрос проходит по маршруту, который роутер смог проложить благодаря обмену информацией между Автономными системами по протоколу BGP.

Запрос приходит на сервер YouTube внутри Автономной системы Google. Сервер отвечает на запрос и счастливый пользователь смотрит свои любимые видео с котиками.

Материалы

  1. Серия коротких видео про Интернет (EN)
  2. Магистральные сети связи в России
  3. Статья на Vox (EN)
  4. Статье на Wired про кабели Google (EN)
  5. Infrapedia — карта магистральных сетей глобального Интернета
  6. The Opte Project — проект по визуализации Интернета
  7. Карты сети ARPANET в разные годы