What happens when you type google.com in your browser and press Enter?
Как только нажимается Enter, браузер распознает «google.com» как доменное имя и попытается сопоставить его с правильным сервером, чтобы предоставить правильный контент.
DNS Lookup
Компьютеры используют IP-адреса для идентификации, каждый узел в интернете имеет свой IP-адрес. Поэтому после нажатия Enter первым шагом будет преобразование текста в IP-адрес. Этот шаг имеет последовательную процедуру:
- Браузер просматривает свой кеш, чтобы увидеть, есть ли в нем запись, соответствующая
Domain Name = IP-address
. Если запись есть, браузер использует IP-адрес для отправки запроса на сервер. Если в браузере нет записи, он перенаправляет поиск вOS
компьютера; - Если
OS
не имеет записи в своем кеше, она пересылает запросResolver
; - Резолвером обычно является
ISP
(Internet Service Provider). Все резолверы знают, где они могут найти корневой сервер. Если резолвер не имеет записи в своем кэше, он пересылает запрос разрешения наRoot Server
; - Корневой сервер — это один из 13 авторитетных
Name Servers
, которые отвечают на DNS-запросы, направляя резолвер на соответствующийTLD
- Top Level Domain. Original top-level domains: .com (commercial), .org (organization), .net (network), .int (international), .edu (education), .gov, .mil. Затем резолвер сохраняет IP-адрес соответствующего TLD, которым в нашем случае является TLD «.com», предоставленный корневым сервером; - На этом этапе
resolver
пересылаетDNS resolution request
на серверTLD
. В ответ сервер TLD предоставляет IP-адреса авторитетныхName Servers
; - Затем
Name Servers
передают IP-адрес DNS-запроса. Резолвер сохраняет эту информацию в своем кэше для дальнейшего использования; - Затем
resolver
отвечает на запросOS
, пересылая ответ браузеру; OS
иBrowser
кэшируют эту ^ информацию, чтобы ускорить обработку будущих запросов. TTL (Time To Live - время жизни) — продолжительность времени, в течение которого DNS-запись может быть кэширована, настраивается владельцем домена или определяется авторитетнымиName Servers
.
TCP/IP
Теперь, когда у браузера есть IP-адрес, он должен создать соединение с сервером, которое соответствует IP-адресу, чтобы облегчить связь и обмен данными. Существуют различные протоколы, облегчающие передачу и обработку данных в Интернете. Однако большинство HTTP-запросов используют TCP
.
TCP (Transmission Control Protocol - протокол управления передачей) обеспечивает надежную и упорядоченную передачу данных между устройствами посредством пакетов данных. Пакеты данных представляют собой меньшие по размеру блоки данных, которые легче передавать и обрабатывать. TCP очень предпочтителен для HTTP-запросов, поскольку он имеет дополнительные функции, такие как управление потоком, обнаружение ошибок и повторная передача потерянных пакетов.
IP (Интернет-протокол) отвечает за присвоение уникального адреса каждому устройству в Интернете для облегчения идентификации. Это также обеспечивает инкапсуляцию, адресацию и правильную маршрутизацию пакетов по сетям.
Соединение TCP/IP устанавливается в результате трехэтапного рукопожатия (handshake):
SYN(Synchronize)
Ваш компьютер, который является клиентским компьютером, отправляет на сервер пакет, содержащий порядковый номер. Этот шаг указывает на намерение клиентского компьютера установить соединение.
SYN-ACK(Synchronize-Acknowledge)
Получив пакет SYN
, сервер проверяет, есть ли у него открытые порты для приема и инициирования новых соединений. Если есть открытые порты, он отвечает пакетом SYN-ACK
. Этот пакет состоит из двух важных частей. Сначала он подтверждает получение пакета SYN
, подтверждая порядковый номер. Во-вторых, сервер включает свой порядковый номер, чтобы обозначить свою готовность установить соединение.
ACK(Acknowledgement)
После получения пакета SYN-ACK
клиентский компьютер отвечает пакетом ACK
. Этот пакет подтверждает получение пакета SYN-ACK
и подтверждает порядковый номер сервера.
После трехстороннего рукопожатия соединение устанавливается, и устройства могут надежно обмениваться данными.
На этом этапе браузер отправляет запрос GET
с запросом веб-страницы google.com через установленное TCP-сое динение
. Сервер получает запрос и отправляет в ответ HTML-код
домашней страницы google.com. Браузер отобразит скелет HTML, и если веб-странице требуются дополнительные ресурсы, браузер отправит дополнительные запросы. Эти дополнительные запросы могут относиться к таким элементам, как изображения, файлы Javascript и таблицы стилей CSS.
Firewall
Firewall может представлять собой физическое устройство или программное обеспечение, которое действует как барьер между внутренней и внешней сетью. Firewalls отслеживают и контролируют входящий и исходящий сетевой трафик на основе заранее определенных правил безопасности. При этом они защищают сеть от потенциальных угроз и несанкционированного доступа. Firewalls проверяют сетевые пакеты и применяют предопределенные правила, чтобы определить, разрешать или блокировать их. Эти правила безопасности основаны на различных критериях, таких как:
- Source and destination IP address;
- Port numbers;
- Характеристики содержимого пакета.
HTTPS/SSL
HTTP (Hypertext Transfer Protocol) — это протокол, используемый для передачи данных через Интернет. Он обрабатывает связь между браузером и сервером в форме request
и response
. Как следует из названия, HTTPS (Hypertext Transfer Protocol Secure) представляет собой безопасную версию HTTP. Под безопасностью мы подразумеваем, что данные, передаваемые по протоколу HTTPS, остаются конфиденциальными и не могут быть подделаны или перехвачены злоумышленниками.
Для шифрования используется криптографический алгоритм, который может быть SSL (Secure Sockets Layer) или TLS (Transport Layer Security) для обеспечения безопасности в
HTTPS
. Эти уровни безопасности получаются от доверенных центров сертификации (CA - Certificate Authorities), в виде сертификата. Это шифрование означает, что передаваемые данные не могут быть прочитаны любым другим человеком или ботом. Только браузер, который вы используете, и сервер могут расшифровать данные.
Load-balancer
Балансировщик нагрузки — это сетевое устройство или программное обеспечение, которое распределяет входящий сетевой трафик между различными серверами для оптимизации эффективности и повышения надежности. В нашем случае, например, Google получает множество запросов на доступ к своей веб-странице. Таким образом, они не могут работать на одном сервере. Им потребуется несколько серверов, способных обрабатывать запросы и ответы. Следовательно, сведите к минимуму SPOF (Single Point of Failure).
Балансировщики нагрузки управляют серверами и знают, какой сервер какой запрос будет обрабатывать. Балансировщик нагрузки равномерно распределяет рабочую нагрузку между различными серверами, следуя алгоритму балансировки нагрузки. Например, HAproxy — один из самых известных балансировщиков нагрузки, который можно настроить с помощью циклического алгоритма. При такой конфигурации запрос отправляется на один сервер, а затем на следующий, пока все серверы не обработают запрос, и цикл продолжается.
Web Server
Как только балансировщик нагрузки распределяет запрос, он поступает на веб-сервер. Веб-серверы — это программное обеспечение, которое обслуживает веб-контент по запросу. Веб-контент включает в себя веб-страницы, изображения и файлы, а также другие ресурсы. Веб-серверы включают такие программы, как Nginx, Apache и Microsoft Internet Information Services(IIS).
Получив запрос от балансировщика нагрузки, веб-сервер отвечает соответствующими ресурсами, которые перенаправляются балансировщику нагрузки и, в конечном итоге, браузеру.
Application Server
Веб-серверы обрабатывают статический контент, но в большинстве случаев вам может потребоваться взаимодействовать с веб-сайтом. В нашем случае, когда вы вводите google.com, вы, скорее всего, захотите продолжить поиск других вещей в Google. Application Servers
обрабатывают это взаимодействие. Application Servers
обрабатывает динамический контент, включая управление пользовательской информацией, взаи модействие с базами данных, где это необходимо, и работу приложений.
Таким образом, если Nginx получает запрос и если запрос представляет собой взаимодействие, Nginx перенаправляет запрос на
Application Server
. ЕслиApplication Server
может ответить на запрос, он генерирует ответ и пересылает его на Nginx. ЕслиApplication Server
не может сгенерировать ответ, поскольку ему требуется дополнительная информация, он перенаправляет запрос в базу данных.
Database
База данных — это совокупность хорошо организованных и хранимых данных, обеспечивающих эффективный поиск, изменение и добавление данных. Существуют различные модели баз данных. Основными из них являются реляционные базы данных (SQL), такие как MySQL и PostgreSQL, и нереляционные базы данных (NoSQL), такие как MongoDB и Cassandra.
Для доступа к базе данных вам потребуется DBMS-СУБД (Database Management System). СУБД — это программное обеспечение, в котором есть инструменты и функции для создания, удаления, добавления, запроса и администрирования базы данных.
Когда
Application Server
требуется дополнительная информация, он перенаправляет запрос в СУБД. СУБД взаимодействует сбазой данных
и отвечаетApplication Server
.Application Server
, в свою очередь, отвечает Nginx, который отвечает браузеру. После получения необходимых ресурсов браузер отображает всю страницу целиком.