Сети и интернет: клиент-сервер, адреса, протоколы и путь запроса

Цели урока
  • Объяснить, что такое компьютерная сеть и зачем соединять компьютеры друг с другом
  • Отличать LAN от интернета и понимать роль маршрутизатора
  • Объяснить, что такое IP-адрес, и различать публичные, частные адреса и localhost
  • Объяснить, что такое порт и зачем он нужен в дополнение к IP
  • Объяснить, что такое протокол и почему сеть не может работать без него
  • Описать структуру HTTP-запроса и HTTP-ответа
  • Разобрать URL на части — протокол, домен, порт, путь, параметры запроса
  • В правильном порядке описать 8 шагов от ввода адреса до показа сайта

В этом уроке

Урок состоит из нескольких коротких глав — в том же порядке, что и в презентации:

  1. Глава 1 — компьютерные сети, LAN, интернет, клиент и сервер
  2. Глава 2 — IP-адрес, порт, домен и DNS
  3. Глава 3 — запрос, ответ и протоколы: HTTP, HTTPS, TCP и UDP
  4. Глава 4 — что происходит с момента ввода адреса до показа сайта

Глава 1: Компьютерные сети, LAN, интернет, клиент и сервер

Что мы изучим?

  • Что такое компьютерная сеть.
  • LAN (локальная сеть) и интернет.
  • Маршрутизатор (router) — устройство, которое соединяет сети.
  • Модель клиент-сервер — основу каждого сайта, приложения и сервера, которые мы построим в темах бэкенда и баз данных.

Зачем это нужно?

Каждое современное приложение общается с сетью: WhatsApp, сайты, игры, а в темах бэкенда и баз данных — и сервер, который вы напишете. Бэкенд-разработчики пишут именно серверную часть. Фронтенд-разработчики пишут клиентскую часть. Без понимания этой модели нельзя понять, что делает ваш код.

Объяснение с основ

Что такое сеть?

Компьютерная сеть — два или более устройства, соединённые так, чтобы они могли передавать информацию между собой. Соединение может быть по кабелю (Ethernet), по воздуху (Wi-Fi) или по оптоволокну.

Зачем соединять компьютеры?

  • Обмен информацией — сообщения, файлы, сайты.
  • Совместное использование ресурсов — один принтер на весь офис, одно интернет-подключение на весь дом.
  • Разделение работы — информация хранится в одном месте (на сервере), и все обращаются к ней.

LAN — локальная сеть

LAN (Local Area Network) — локальная сеть: устройства дома, в офисе или в классе. У вас дома в LAN входят компьютер, телефон, умный телевизор и принтер — все подключены к одному маршрутизатору.

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

Интернет — сеть сетей

Интернет — это сеть сетей: миллионы локальных сетей по всему миру, соединённые друг с другом через интернет-провайдеров (ISP) и подводные кабели между континентами.

Маршрутизатор — ворота между сетями

Маршрутизатор (router) — устройство, которое соединяет вашу LAN с интернетом. Он знает, должен ли пакет информации остаться дома (например, от компьютера к принтеру) или уйти наружу (например, на сайт).

          Your home (LAN)
   ┌──────────────────────────┐
   │ Laptop   Phone   Printer │
   │    \       |       /     │
   │         Router ──────────┼───► ISP ───► Internet ───► Google's network
   └──────────────────────────┘                           (another LAN)
Аналогия: почта

LAN — квартира с несколькими жильцами, которые передают друг другу записки из рук в руки. Маршрутизатор — почтовый ящик у входа в дом: письмо соседям по квартире остаётся внутри, письмо в другой город уходит на почту. Интернет — вся мировая почтовая система: отделения, грузовики, самолёты, соединяющие все дома в мире.

Модель клиент-сервер

Почти всё общение в сети следует одной модели:

  • Клиент (client) — программа, которая начинает общение и отправляет запрос. «Дай мне главную страницу», «сохрани это сообщение».
  • Сервер (server) — программа, которая ждёт запросов, обрабатывает их и возвращает ответ.
КлиентСервер
Кто начинает?ОнЖдёт обращения
Сколько их?Много клиентовОбычно один сервер (или несколько) обслуживает всех
ПримерыБраузер, мобильное приложение, curlВеб-сервер, сервер базы данных, почтовый сервер
Время работыЗапускается, когда нужно, и закрываетсяРаботает всё время (24/7)

Очень важно: клиент и сервер — это роли программ, а не виды компьютеров. Один и тот же ноутбук может одновременно запускать браузер (клиент) и сервер FastAPI (сервер). В темах бэкенда и баз данных именно так вы и будете делать: сервер и клиент будут работать на одном компьютере.

Аналогия: ресторан

Клиент — посетитель: делает заказ (запрос) и получает блюдо (ответ). Сервер — кухня: ждёт заказов, готовит и отдаёт. Одна кухня обслуживает многих посетителей, и она открыта, даже когда никто не заказывает.

Запрос и ответ — пример

Когда вы заходите на сайт, браузер — клиент, а сайт — сервер:

Browser (Client)                  Server (example.com)
   │                                   │
   │ ──── Request: GET /  ──────────►  │
   │                                   │  finds the page
   │ ◄──── Response: 200 + HTML  ────  │
   ▼                                   │
shows the page
  1. Браузер начинает — отправляет запрос: «дай мне главную страницу».
  2. Сервер, который всегда ждёт запросов, находит страницу.
  3. Сервер возвращает ответ: код успеха (200) и содержимое страницы.
  4. Браузер показывает полученное.

Тот же самый шаблон повторяется в каждом приложении: WhatsApp отправляет сообщение на сервер, приложение погоды запрашивает прогноз, а позже на курсе — сервер, который вы напишете, будет получать запросы и возвращать ответы.

Типичная ошибка

Ошибка: «сервер — это огромный компьютер в комнате с кондиционером», значит, «на ноутбуке сервер не запустить».

  • Сервер — это программа, которая ждёт запросов, а не особый вид компьютера.
  • Любой ноутбук может запустить серверную программу. Позже на курсе вы запустите сервер на своём компьютере.
  • Один и тот же компьютер может быть клиентом и сервером одновременно: ваш браузер (клиент) может обратиться к серверу, работающему на том же ноутбуке.
  • В серверных комнатах просто работает много таких серверных программ на мощных компьютерах, которые всегда включены.

Вторая ошибка: думать, что сайт «находится в браузере». Браузер только запрашивает и показывает. Сам сайт — файлы и логика — находится на сервере.

Итоги

  • Сеть = соединённые устройства, которые передают информацию. LAN = локальная сеть. Интернет = сеть сетей.
  • Маршрутизатор соединяет LAN с интернетом и решает, что остаётся внутри, а что уходит наружу.
  • Клиент начинает запрос. Сервер ждёт, обрабатывает его и возвращает ответ.
  • Клиент и сервер — роли программ. Один и тот же компьютер и даже одна и та же программа могут выполнять обе роли.
  • Каждая страница, которую вы открываете, — это запрос от клиента и ответ от сервера.

Официальная документация

Глава 2: IP-адрес, порт, домен и DNS

Что мы изучим?

Три вопроса, на которые должно ответить каждое сообщение в сети:

  1. На какой компьютер? — IP-адрес.
  2. Какой программе на этом компьютере? — порт.
  3. Как узнать адрес, если я помню только имя? — домен и DNS.

Зачем это нужно?

  • В темах бэкенда и баз данных вы запустите сервер на http://127.0.0.1:8000. Сегодня вы поймёте каждую часть этого адреса.
  • Ошибки вроде Address already in use (порт занят) или Name or service not known (DNS не сработал) — обычное дело в работе бэкенда.
  • Когда вы подключаете приложение к базе данных, нужно указать ему host и port.

Объяснение с основ

IP-адрес — адрес компьютера

IP-адрес (Internet Protocol address) — числовой адрес, который идентифицирует устройство в сети. Без адреса ему нельзя отправить информацию — точно как письмо без адреса.

Распространённый формат, IPv4, — четыре числа от 0 до 255, разделённые точками:

192.168.1.23
 │   │  │  │
 └───┴──┴──┴── four numbers, each 0–255

Есть и IPv6 — более новый и длинный формат (2001:db8::1), появившийся потому, что адресов IPv4 не хватило для всех устройств в мире. Принцип тот же.

Три вида адресов, которые стоит знать

ВидПримерЧто это
Частный IP192.168.x.x, 10.x.x.xАдрес внутри LAN. Его выдаёт маршрутизатор. Один и тот же адрес может встречаться в тысячах разных домов.
Публичный IP84.229.15.7Адрес дома/офиса в интернете. Все устройства дома выходят через него, через маршрутизатор.
localhost / loopback127.0.0.1«Этот самый компьютер». Данные, отправленные туда, никогда не покидают компьютер.
Аналогия: офисное здание

Публичный IP = уличный адрес здания («улица Герцля, 10»). Частный IP = номер офиса внутри здания («комната 23»). В каждом здании есть «комната 23», поэтому снаружи этого недостаточно, но внутри это точный идентификатор. localhost = «моя собственная комната»: отправляя туда, я отправляю самому себе.

Порт — дверь к нужной программе

IP-адрес доставляет информацию до компьютера. Но сетью на компьютере пользуются многие программы: браузер, Spotify, Zoom, сервер, который вы написали. Как информация попадает к нужной программе?

Порт (port) — число от 0 до 65535, которое идентифицирует определённую программу на компьютере. Сервер «слушает» определённый порт, и каждый запрос, пришедший на этот порт, передаётся ему.

IP   = which building    →  192.168.1.23
Port = which apartment   →  8000
Full address             →  192.168.1.23:8000

Известные порты:

ПортИспользование
80HTTP — сайты (без шифрования)
443HTTPS — сайты (с шифрованием)
22SSH — удалённый вход на сервер
5432PostgreSQL — база данных
8000 / 8080Распространены для серверов разработки (как наш в темах бэкенда и баз данных)

Важное правило: на каждом порту (на каждом адресе) в любой момент может слушать только одна программа.

Домен и DNS — имена вместо чисел

Люди не запоминают 142.250.75.14. Мы запоминаем google.com.

  • Домен (domain) — читаемое имя, которое обозначает адрес: google.com, ynet.co.il.
  • DNS (Domain Name System) — «телефонная книга интернета»: мировая система серверов, которая переводит домен в IP-адрес.

Структура домена (читается справа налево, от общего к частному):

   www   .   ynet   .   co   .   il
    │         │          │        │
subdomain   name      second    TLD (top-level domain: country/type)

Что происходит при переводе DNS (кратко):

  1. Компьютер проверяет, не знает ли он уже ответ (кэш — память предыдущих ответов).
  2. Если нет, он спрашивает DNS-сервер, который у него настроен (обычно сервер интернет-провайдера или 8.8.8.8 от Google).
  3. DNS-сервер находит ответ (при необходимости спрашивая другие серверы в иерархии) и возвращает IP-адрес.
  4. Только после этого компьютер отправляет сам запрос на полученный адрес.

Поиск DNS — шаг за шагом

You type:     example.com
     │  "What is the IP of example.com?"
     ▼
DNS server:   93.184.215.14
     │
     ▼
Browser connects to 93.184.215.14:443
  1. Вы набираете имя — example.com.
  2. Компьютер спрашивает DNS-сервер: «какой IP у этого имени?» (сначала он проверяет, не сохранён ли ответ с прошлого раза — кэш).
  3. Возвращается IP-адрес.
  4. Только теперь браузер подключается — к IP и порту (443 для HTTPS).

Несколько примеров ответов:

google.com              ->  142.250.75.14
localhost               ->  127.0.0.1
no-such-domain-123.com  ->  lookup failed
  • localhost всегда переводится в 127.0.0.1 — сам компьютер.
  • Для несуществующего имени DNS не находит адреса, и браузер показывает ошибку ещё до попытки подключения.

Типичная ошибка

Ошибка: запуск второго сервера на уже занятом порту.

Program A listens on port 8000   -> OK
Program B tries port 8000        -> ERROR

Address already in use

Почему? Слушать порт в любой момент может только одна программа. Первая программа «заняла» 8000.

Исправление: остановить первую программу или запустить вторую на другом порту, например 8001.

Особенно в теме бэкенда

«Я закрыл окно терминала, а сервер всё ещё держит порт»: иногда процесс продолжает работать в фоне. Найдите его (Get-Process python / ps aux | grep python) и остановите по PID — точно так, как мы учили в теме о компьютере и операционной системе.

Вторая ошибка: путать localhost с IP в LAN. 127.0.0.1 доступен только с того же компьютера. Если друг попытается открыть со своего телефона 127.0.0.1:8000, он попадёт на свой собственный телефон.

Итоги

  • IP идентифицирует компьютер в сети. Частный (192.168.x.x) — внутри LAN, публичный — в интернете.
  • 127.0.0.1 / localhost = этот самый компьютер. С других компьютеров недоступен.
  • Порт идентифицирует программу внутри компьютера. На каждом порту слушает только одна программа. 80 = HTTP, 443 = HTTPS.
  • Домен — читаемое имя. DNS переводит его в IP до отправки запроса.
  • Полный адрес: protocol://host:port/path, например http://127.0.0.1:8000/students.

Официальная документация

Глава 3: Запрос, ответ и протоколы: HTTP, HTTPS, TCP и UDP

Что мы изучим?

  • Что такое протокол.
  • Запрос и ответ: что отправляется и что возвращается.
  • HTTP и HTTPS: язык веба.
  • TCP и UDP: как переносится сама информация.

Зачем это нужно?

Вся тема бэкенда построена на HTTP: вы напишете сервер, который получает запросы и возвращает ответы, и будете выбирать метод (GET/POST/PUT/DELETE) и код состояния (200, 404…). Сегодня мы посмотрим, как это выглядит «изнутри». Когда вы это поймёте, FastAPI будет выглядеть как сокращение, а не как магия.

Объяснение с основ

Что такое протокол?

Протокол — согласованный набор правил общения: что отправлять, в каком порядке, в каком формате и что отвечать. Если две стороны не говорят на одном протоколе, они не понимают друг друга, даже если само соединение работает.

Аналогия: телефонный звонок

Телефонный звонок — это «протокол»: вы звоните, другая сторона отвечает «алло», вы говорите, кто звонит, передаёте сообщение и говорите «пока». Если кто-то ответит и заговорит на незнакомом вам языке, соединение работает, а общение — нет.

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

HTTP / HTTPS   ← WHAT we say      (application: "give me /index.html")
TCP  / UDP     ← HOW it travels   (transport: reliable or fast)
IP             ← WHERE it goes    (addressing: 93.184.215.14)
Wi-Fi/Ethernet ← the physical link

Запрос и ответ

Всё общение по HTTP — это пара:

  • Запрос (request) — клиент отправляет: что он хочет и где.
  • Ответ (response) — сервер возвращает: удалось ли, и содержимое.

Начинает всегда клиент. HTTP-сервер ничего не отправляет по собственной инициативе.

HTTP — HyperText Transfer Protocol

HTTP — текстовый протокол: запрос и ответ — это действительно текст, который можно прочитать.

Структура запроса:

GET /index.html HTTP/1.1          ← request line: METHOD  PATH  VERSION
Host: example.com                 ← headers: extra info, "Name: value"
User-Agent: Mozilla/5.0
Accept: text/html
                                  ← empty line = end of headers
(body — empty for GET)            ← body: data we send (used in POST/PUT)
ЧастьОбъяснение
МетодЧто мы хотим сделать. GET = получить. POST = создать. PUT = обновить. DELETE = удалить.
ПутьКакой ресурс: /, /students, /students/7.
Заголовки (headers)Сопровождающая информация: какой сайт (Host), кто отправляет, какой формат принимается.
Тело (body)Сами данные, например данные нового студента в POST.

Структура ответа:

HTTP/1.1 200 OK                   ← status line: VERSION  STATUS CODE  REASON
Content-Type: text/html           ← headers
Content-Length: 1256
                                  ← empty line
<!doctype html><html>...          ← body: the content itself

Коды состояния по первой цифре:

ДиапазонЗначениеПримеры
2xxУспех200 OK, 201 Created
3xxПеренаправление в другое место301 Moved Permanently
4xxОшибся клиент400 Bad Request, 404 Not Found
5xxСбой сервера500 Internal Server Error

HTTPS — защищённый HTTP

В обычном HTTP текст идёт по сети в открытом виде. Любой, кто находится на пути (например, в публичном Wi-Fi), может прочитать пароли и номера кредитных карт.

HTTPS = HTTP + шифрование (с помощью протокола TLS). Он добавляет две вещи:

  1. Шифрование — только сервер и клиент могут прочитать содержимое.
  2. Проверку подлинности — цифровой сертификат доказывает, что вы действительно общаетесь с bank.co.il, а не с самозванцем.

HTTP внутри шифрования точно такой же. Порт: HTTP = 80, HTTPS = 443. Значок замка 🔒 в браузере говорит, что соединение — HTTPS.

TCP и UDP — как перемещается информация

Информация в сети делится на маленькие пакеты. IP доставляет каждый пакет на нужный адрес, но пакеты могут теряться или приходить не по порядку. Здесь вступают TCP и UDP:

TCPUDP
НадёжностьГарантирована: потерянный пакет отправляется сноваНе гарантирована: что потерялось, то потерялось
ПорядокПриходит в правильном порядкеМожет прийти в другом порядке
СоединениеОткрывает соединение перед отправкой (рукопожатие)Отправляет сразу, без соединения
СкоростьМедленнее (из-за проверок)Быстро
ИспользованиеСайты (HTTP/HTTPS), почта, передача файлов, базы данныхВидеозвонки, онлайн-игры, DNS, прямые трансляции
Аналогия

TCP = заказное письмо: есть подтверждение доставки, а если письмо потерялось, его отправляют снова. Надёжно, но требует времени. UDP = выкрикнуть сообщение в мегафон: быстро, но если кто-то пропустил слово, никто его не повторит. В видеозвонке лучше потерять один кадр, чем чтобы звонок замер, пока его отправляют заново.

HTTP работает поверх TCP. Когда браузер запрашивает страницу, сначала открывается TCP-соединение с сервером (на порт 80 или 443), и только потом внутри него отправляется текст запроса.

Распространённые коды ответа

Каждый HTTP-ответ начинается с кода состояния — трёхзначного числа, которое говорит, что произошло. Первая цифра указывает «семейство»:

КодЗначениеПример
200 OKЗапрос выполнен успешноСтраница загрузилась
301Адрес переехал в другое местоСайт, переехавший на новый адрес
404 Not FoundПуть не существуетОпечатка в адресе
500 Internal Server ErrorОшибка на стороне сервераКод сервера упал
  • 2xx — успех. 3xx — перенаправление. 4xx — ошибка клиента. 5xx — ошибка сервера.

Типичная ошибка

Ошибка: думать, что 404 значит «интернет не работает» или «сервер упал».

  • 404 — корректный ответ сервера: «я получил запрос, но по этому пути у меня нет ресурса». Сервер работает отлично. Проблема в запросе, то есть в пути.
  • Если сервер вообще недоступен, никакого кода состояния вы не получите. Вы получите ошибку соединения, например Connection refused или timed out.
  • 500 = сервер получил запрос и упал при его обработке. В теме бэкенда, когда вы видите 500, баг — в коде вашего сервера.
Что вы получилиГде проблема
200Проблемы нет
404Неверный путь (сторона клиента)
500Баг в коде сервера (сторона сервера)
Connection refusedНикакой сервер не слушает этот адрес/порт

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

Итоги

  • Протокол = согласованные правила общения. Есть уровни: HTTP (что мы говорим), TCP/UDP (как это перемещается), IP (куда).
  • HTTP-запрос = метод + путь + заголовки + тело. HTTP-ответ = код состояния + заголовки + тело.
  • Коды состояния: 2xx успех, 4xx ошибка клиента, 5xx ошибка сервера.
  • HTTPS = HTTP + шифрование и проверка подлинности (TLS). Порт 443.
  • TCP надёжный и упорядоченный (сайты, файлы). UDP быстрый и без гарантий (видео, игры, DNS).

Официальная документация

Глава 4: Что происходит с момента ввода адреса до показа сайта

Что мы изучим?

Это классический вопрос собеседования: «Что происходит, когда вы набираете https://www.example.com/about в браузере и нажимаете Enter?» В этой главе мы построим полный ответ шаг за шагом и свяжем все сегодняшние понятия: URL, DNS, IP, порт, TCP, HTTPS, запрос, ответ.

Зачем это нужно?

  • Это самый частый вопрос на собеседованиях для джунов. Он проверяет, видите ли вы «общую картину».
  • Когда сайт «не работает», тот, кто знает шаги, знает, где искать: DNS? соединение? сервер? содержимое?
  • В темах бэкенда и баз данных вы напишете шаг 6 — обработку на сервере. Хорошо понимать, что происходит до и после него.

Объяснение с основ

Шаг 0 — разбор URL

URL (Uniform Resource Locator) — «полный адрес» ресурса в интернете:

https://www.example.com:443/about?lang=he
└─┬─┘   └──────┬──────┘ └┬┘ └─┬─┘ └──┬──┘
protocol     domain     port  path   query
ЧастьЗначение
Протокол (scheme)https: на каком протоколе говорить.
Домен (host)www.example.com: какой сервер. Будет переведён в IP.
Порт443: обычно не пишется. https = 443, http = 80.
Путь (path)/about: какой ресурс внутри сервера.
Параметры запроса (query)?lang=he: дополнительные параметры в формате key=value. Несколько параметров соединяются через &.

Восемь шагов

1. Браузер разбирает URL — он понимает, что протокол HTTPS (значит, порт 443), домен www.example.com, а путь /about.

2. Поиск DNS — имя → IP-адрес. Браузеру нужен IP, а не имя. Он проверяет по порядку: кэш браузера, кэш операционной системы, а если ответа нет — спрашивает DNS-сервер. Он получает, например, 93.184.215.14.

3. TCP-соединение — тройное рукопожатие. Браузер открывает TCP-соединение с адресом 93.184.215.14:443. Соединение открывается «рукопожатием» из трёх сообщений:

Client ──── SYN ────────►  Server     "Can we talk?"
Client ◄─── SYN-ACK ─────  Server     "Yes, can you hear me?"
Client ──── ACK ────────►  Server     "Yes. Let's start."

4. Рукопожатие TLS — шифрование. Поскольку это HTTPS: сервер отправляет сертификат, браузер проверяет, что он подлинный и принадлежит www.example.com, и обе стороны договариваются о ключе шифрования. Дальше всё зашифровано. (С http:// этого шага нет.)

5. Отправка HTTP-запроса:

GET /about?lang=he HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 ...
Accept: text/html

6. Сервер обрабатывает запрос. Серверная программа получает запрос, понимает, что запрошено (GET /about), и готовит ответ. Иногда это просто готовый файл, а иногда много работы: выполнение кода, запрос к базе данных, построение HTML. Именно эту часть вы будете писать в темах бэкенда и баз данных.

7. Сервер отправляет HTTP-ответ:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8

<!doctype html><html> ... <link href="/style.css"> <img src="/logo.png"> ...

8. Браузер отображает страницу (рендеринг). Браузер читает HTML и строит из него страницу. Когда он встречает дополнительные файлы (CSS, изображения, JavaScript), он отправляет новые запросы — по одному на файл, повторяя шаги 5–7. Средняя страница делает десятки запросов! (TCP-соединение и шифрование уже есть, поэтому шаги 2–4 обычно не повторяются.)

Аналогия: заказ доставки
  1. Вы знаете, что хотите «пиццу из того ресторана» (URL). 2. Ищете его адрес в приложении (DNS). 3. Звоните, и вам отвечают (TCP-рукопожатие). 4. Убеждаетесь, что это действительно ресторан, а не самозванец, и говорите на секретном коде (TLS). 5. Делаете заказ (запрос). 6. Кухня готовит, возможно, беря ингредиенты со склада (обработка + база данных). 7. Курьер привозит блюдо (ответ). 8. Вы распаковываете и подаёте — и обнаруживаете, что соусов нет, поэтому заказываете ещё (запросы CSS и изображений).

Сколько длится каждый шаг

Весь этот путь обычно занимает меньше секунды. Пример замера одного запроса:

Step 2 - DNS: example.com -> 93.184.215.14 | ms: 21
Step 3 - TCP connected to 93.184.215.14 443 | ms: 64
Step 4 - TLS version: TLSv1.3 | ms: 71
Steps 5-7 - first line: HTTP/1.1 200 OK | ms: 66

Те же замеры можно увидеть в любом браузере: F12 → вкладка Network → щёлкнуть по запросу → Timing. Преподаватель покажет это на экране. Там же видно, сколько запросов отправляет одна страница — иногда десятки.

Типичная ошибка

Ошибка: пропустить DNS или поставить его после соединения («браузер подключается к google.com»). К имени подключиться нельзя. TCP-соединению нужен IP, поэтому DNS всегда идёт первым.

Вторая ошибка: думать, что вся страница приходит одним запросом. Сначала приходит HTML, и из него браузер узнаёт о десятках других файлов и запрашивает каждый отдельно. Во вкладке Network в DevTools это сразу видно.

Третья ошибка — неверная диагностика сбоя:

СимптомШаг, на котором произошёл сбой
«DNS_PROBE_FINISHED_NXDOMAIN» / «server IP address could not be found»2 — DNS: такого домена нет или проблема с DNS
«Connection refused» / «timed out»3 — никакой сервер не слушает, или сервер недоступен
«Your connection is not private»4 — проблема с сертификатом в TLS
Страница «404 Not Found»6–7 — сервер работает, но такого пути нет
Страница «500 Internal Server Error»6 — код сервера упал

Итоги

  • URL = протокол + домен + порт + путь + параметры запроса.
  • Порядок: разбор URL → DNS → TCP-рукопожатие → TLS → HTTP-запрос → обработка на сервере → HTTP-ответ → рендеринг.
  • DNS всегда идёт до соединения, потому что подключаются к IP, а не к имени.
  • Одна страница = десятки запросов: сначала HTML, затем CSS, изображения и JS.
  • Каждый вид сбоя относится к определённому шагу — так его и диагностируют.

Официальная документация

Практика

Вопросы на понимание материала урока — без кода.

Упражнение 1: Клиент или сервер?

В каждом сценарии — кто клиент (Client), а кто сервер (Server)?

  1. Вы заходите с телефона на сайт банка.
  2. Приложение погоды запрашивает прогноз.
  3. Дана запускает на своём ноутбуке программу, которая ждёт запросов, и открывает её в браузере на том же ноутбуке.
Показать решение
  1. Клиент: браузер на телефоне. Сервер: программа, на которой работает сайт банка.
  2. Клиент: приложение. Сервер: сервис, который возвращает прогнозы.
  3. Оба на одном ноутбуке: браузер — клиент, а программа, которая ждёт запросов, — сервер. Клиент и сервер — роли программ, а не виды компьютеров.

Упражнение 2: IP, порт и DNS

  1. Что идентифицирует IP-адрес, а что идентифицирует порт?
  2. Что означает адрес 127.0.0.1:8000?
  3. Друг пытается открыть 127.0.0.1:8000 на своём телефоне, чтобы увидеть сервер, работающий на вашем компьютере. Почему это не сработает?
Показать решение
  1. IP идентифицирует компьютер в сети (какое здание). Порт идентифицирует программу внутри компьютера (какая квартира).
  2. 127.0.0.1 — это localhost, сам компьютер. 8000 — порт, который слушает программа. Вместе: программа, слушающая порт 8000 на этом компьютере.
  3. На телефоне друга 127.0.0.1 — это сам телефон, а не ваш компьютер. localhost доступен только с того же компьютера.

Упражнение 3: Разбор URL

Разберите адрес на части — протокол, домен, порт, путь и параметры запроса (query):

https://shop.example.com:443/cart?coupon=SALE10

А каким был бы порт, если бы :443 не было написано в адресе?

Показать решение
ЧастьЗначение
Протоколhttps
Доменshop.example.com
Порт443
Путь/cart
Параметры запросаcoupon=SALE10

Когда порт не указан, браузер использует порт протокола по умолчанию: 443 для HTTPS (и 80 для HTTP).

Упражнение 4: Коды ответа

Что означает каждый код и где проблема — у клиента или у сервера?

200   301   404   500

А что получит браузер, если сервер вообще не запущен?

Показать решение
КодЗначениеГде проблема
200Запрос выполнен успешноПроблемы нет
301Адрес переехал в другое местоПроблемы нет — перенаправление
404Путь не найденКлиент — неверный адрес
500Ошибка в коде сервераСервер

Если сервер вообще не запущен — никакой код состояния не возвращается. Вы получите ошибку соединения, например Connection refused или timed out.

Упражнение 5: Путь запроса

Расставьте шаги по порядку — от ввода адреса до показа сайта:

  • (а) TCP-соединение — тройное рукопожатие
  • (б) DNS — перевод имени в IP-адрес
  • (в) Браузер отображает страницу (рендеринг)
  • (г) Отправка HTTP-запроса
  • (д) Установка шифрования (TLS)
  • (е) Разбор URL
  • (ж) Сервер возвращает HTTP-ответ

И почему DNS должен идти до TCP-соединения?

Показать решение

Порядок: (е), (б), (а), (д), (г), (ж), (в)

  1. Разбор URL.
  2. DNS — имя → IP-адрес.
  3. TCP-соединение (SYN, SYN-ACK, ACK).
  4. TLS — шифрование (из-за HTTPS).
  5. HTTP-запрос.
  6. (Сервер обрабатывает запрос.)
  7. HTTP-ответ.
  8. Рендеринг — и браузер запрашивает дополнительные файлы (CSS, изображения).

DNS идёт первым, потому что TCP-соединению нужен IP-адрес — к имени подключиться нельзя.