Анатомия сетевого запроса: быстрый старт

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

1. Путешествие начинается: что происходит, когда вы вводите URL в браузере

Путешествие начинается: что происходит, когда вы вводите URL в браузере

Вы открываете браузер, печатаете example.com и нажимаете Enter. Менее чем через секунду перед вами появляется готовая страница. Для пользователя это выглядит как магия мгновенной телепортации данных, но для сетевого инженера эта секунда — строго оркестрованный каскад событий, в котором участвуют десятки устройств по всему миру. Чтобы научиться управлять сетями, нам нужно замедлить время и разобрать эту секунду на кадры.

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

Шаг 1. Анатомия адреса (Парсинг URL)

Прежде чем куда-то идти, браузер должен понять, куда именно вы хотите попасть и как с этим местом общаться. Строка, которую вы вводите, называется URL (Uniform Resource Locator — единообразный локатор ресурса).

Браузер разбирает введенную строку на составные части.

!Структура URL-адреса

Даже если вы ввели просто example.com, браузер автоматически достраивает строку до полного вида, например: https://example.com/. Здесь скрыты две критически важные инструкции:

  • Схема (Scheme): https:// говорит браузеру, на каком «языке» придется общаться с сервером (в данном случае — по защищенному протоколу HTTP).
  • Доменное имя (Domain): example.com — это человекочитаемое имя узла, к которому нужно обратиться.
  • Но здесь возникает первая инженерная проблема: компьютеры и маршрутизаторы в интернете не понимают имен вроде «example.com». Они оперируют только числами — IP-адресами (например, 93.184.216.34). Нам нужен переводчик.

    Шаг 2. Телефонная книга интернета (DNS)

    Процесс перевода доменного имени в IP-адрес называется DNS-разрешением (DNS resolution). Серверы DNS работают как гигантская распределенная адресная книга.

    Браузер не сразу бежит в интернет с вопросом. Сначала он проверяет свою внутреннюю память (кэш): не заходили ли вы на этот сайт пять минут назад? Если адреса там нет, он спрашивает операционную систему. Если и там пусто, запрос отправляется к DNS-резолверу (обычно это сервер вашего интернет-провайдера).

    Если резолвер тоже не знает ответа, начинается настоящее детективное расследование по иерархии интернета.

    !Процесс DNS-разрешения

    В результате этого многоступенчатого опроса браузер наконец получает заветный IP-адрес: 93.184.216.34. Теперь он знает физические координаты сервера в глобальной сети.

    !Роль DNS в запросе

    Шаг 3. Установка контакта (TCP Handshake)

    Зная IP-адрес, браузер готов отправить запрос. Но в надежных сетях нельзя просто бросить данные в пустоту и надеяться, что они дойдут. Сначала нужно убедиться, что сервер существует, работает и готов нас слушать.

    Для этого используется протокол транспортного уровня — TCP (Transmission Control Protocol). Он устанавливает соединение с помощью процедуры, которую называют «тройным рукопожатием» (Three-way handshake).

    В упрощенном виде диалог машин выглядит так:

  • Браузер (SYN): «Привет, я хочу установить с тобой соединение. Мой стартовый номер синхронизации — X».
  • Сервер (SYN-ACK): «Привет, я получил твой X. Я готов к соединению. Мой номер синхронизации — Y».
  • Браузер (ACK): «Отлично, я получил твой Y. Начинаем передачу данных».
  • Только после того, как это рукопожатие успешно завершено, между вашим компьютером и сервером образуется виртуальный «туннель», по которому можно безопасно передавать информацию. Детальную механику TCP, структуру его пакетов и то, как он гарантирует доставку каждого байта, мы препарируем в третьей главе курса.

    Шаг 4. Разговор на одном языке (HTTP-запрос)

    Соединение установлено. Настало время попросить ту самую веб-страницу, ради которой все затевалось. Здесь в дело вступает протокол HTTP (HyperText Transfer Protocol) — язык, на котором общаются веб-браузеры и веб-серверы.

    Браузер формирует текстовое сообщение и отправляет его по установленному TCP-каналу. Выглядит оно примерно так:

    > GET / HTTP/1.1 > Host: example.com > User-Agent: Mozilla/5.0 > Accept: text/html

    Это сообщение говорит серверу: «Дай мне (GET) главную страницу (/), используя версию протокола HTTP/1.1. Я ищу сайт example.com, а сам я — браузер Mozilla. Я готов принять текст в формате HTML».

    Сервер получает этот текст, обрабатывает его и отправляет ответ:

    > HTTP/1.1 200 OK > Content-Type: text/html > > \<html>...код страницы...\</html>

    Код 200 OK означает, что сервер понял запрос и успешно нашел нужный документ. Получив HTML-код, браузер закрывает соединение (или оставляет его открытым для загрузки картинок) и начинает рисовать страницу на вашем экране.

    Физическое воплощение сервера

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

    !Первый в мире веб-сервер

    Любой компьютер может стать сервером, если на нем открыть нужный порт и запустить программу, умеющую отвечать на HTTP-запросы. В седьмой главе курса вы сами напишете такую программу и превратите свою машину в полноценный узел сети.

    Сборка картины

    Давайте окинем взглядом весь пройденный путь:

  • Вы ввели URL.
  • Система через DNS перевела имя в IP-адрес.
  • Ваш компьютер установил надежное соединение с сервером через TCP-рукопожатие.
  • Браузер отправил текстовый HTTP-запрос.
  • Сервер вернул HTTP-ответ с данными.
  • Это базовый скелет любого сетевого взаимодействия в вебе. Сегодня мы посмотрели на него с высоты птичьего полета. Но мы упустили одну важнейшую деталь: как именно биты информации находят дорогу от вашего домашнего роутера до сервера, который может находиться на другом континенте?

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