Что происходит, когда вы вводите URL-адрес в браузере и на... | Вопросы для собеседования | Skilio
/s/public
Сеть Новичок Опубликовано
Что происходит, когда вы вводите URL-адрес в браузере и нажимаете Enter?
Вопрос:

Что происходит, когда вы вводите URL в браузере и нажимаете Enter? Например, "https://google.com". Объясните основные этапы того, как происходит сетевое взаимодействие начиная с домена и до получения ответа WEB-сервера.

Подсказки:

  • Начнем с указанного протокола. Это HTTPS. Что это значит?
  • Как наш клиент (ноутбук или ПК) с установленным браузером получил свой IP-адрес? Предполагается, что мы его не задавали вручную.
  • Как браузер преобразует доменное имя в IP-адрес?
  • Подумайте, как сервер может обрабатывать множество запросов от различных клиентов.

Обязательные знания:

  • Знание о DNS протоколе и как он работает в общем виде
  • Понимание процесса получения IP и настроек сети с помощью DHCP
  • Знание о балансировщиках нагрузки для крупных web-сервисов
  • Знание о шлюзах по умолчанию (default gateway) и таблицах маршрутизации

Выше ожиданий:

  • Знание о выделении эфемерных портов
  • Знание о типах записей DNS (A, AAAA, PTR, TXT, MX, NS)
  • Заголовки HTTP-запросов и ответов и алгоритмы балансировки нагрузки, такие как round-robin или least connections.
Ответ:

Когда вы вводите https://google.com и нажимаете Enter:

Получение IP адреса для домена google.com

  1. Браузер проверяет свой кэш на домен google.com и его IP адрес.
  2. Если не найдено, система проверяет файл hosts (/etc/hosts в Linux/macOS, C:\Windows\System32\drivers\etc\hosts в Windows).
  3. Если доменное имя всё ещё не отрезолвили, браузер отправляет запрос к серверу DNS (полученному от DHCP). На получение A записей для IPv4 или AAAA для IPv6.
  4. Сервер DNS может запросить другие серверы DNS в иерархии (корневые серверы → серверы TLD → авторитетные серверы).
  5. Ответ DNS возвращает IP-адрес для google.com.

Стоит упомянуть, что компьютер клиента получает свой IP-адрес через протокол DHCP, если он не был настроен вручную. Клиент DHCP получает:

  • свой IP-адрес;
  • список DNS серверов;
  • IP адрес для gateway по умолчанию, который будет перенаправлять трафик в другие сети и интернет.

Установление соединения

  1. Браузер инициирует TCP-соединение с сервером, используя трёхэтапный обмен:

    • Клиент отправляет пакет SYN серверу.
    • Сервер отвечает пакетом SYN-ACK.
    • Клиент отправляет пакет ACK.
  2. Для HTTPS-соединений следует TLS handshake:

    • Клиент и сервер согласовывают между собой версию TLS и набор шифров.
    • Сервер предоставляет клиенту свой сертификат.
    • Сервер зашифровывает секретный код для симметричного шифрования с помощью публичного ключа клиента и отправляет его клиенту.
    • Клиент расшифровывает зашированный секртер своим приватным ключем, таким образом теперь и клиент, и сервер имеют секрет для ширования и дешифрования данных симметричным алгоритмом.
    • Безопасное соединение установлено.

HTTP-запрос/ответ

Браузер генерирует HTTP-запрос со следующими заголовками, пример (необязательно):

GET / HTTP/1.1
Host: google.com
User-Agent: Mozilla/5.0 ...
Accept: text/html,application/xhtml+xml...

Запрос проходит через сеть:

  • Формируется пакет с запросом и отправляется через поднятое подключение
  • Покидает клиентское устройство через сетевой интерфейс.
  • Достигает шлюза по умолчанию (ваш маршрутизатор).
  • Маршрутизатор пересылает в сеть интернет-провайдера.
  • Пакеты проходят через несколько маршрутизаторов (каждый обращается к таблицам маршрутизации).
  • В конечном итоге достигает серверов Google.
  • Запрос обрабатывается балансировщиком нагрузки (распределяющим трафик между несколькими серверами).
  • Веб-сервер получает запрос.
  • Сервер генерирует ответ со статусом, заголовками и содержимым.
  • Ответ возвращается обратно в ваш браузер через сеть с метками используегося подключения.

Браузер отображает полученное содержимое HTML и загружает дополнительные ресурсы (CSS, JavaScript, изображения).

Назначение портов

  • Во время TCP-соединения ваше устройство выделяет временный порт (временный порт с высоким номером (1000-65534)) для этого конкретного соединения.
  • Сервер обычно прослушивает стандартные порты (80 для HTTP, 443 для HTTPS).
  • Эта пара портов (временный порт клиента + стандартный порт сервера) позволяет облсуживать несколько параллельных соединений.
0
© Skilio, 2025
Условия использования
Политика конфиденциальности
Мы используем файлы cookie, для персонализации сервисов и повышения удобства пользования сайтом. Если вы не согласны на их использование, поменяйте настройки браузера.