Gymterview
middle

Как пакет проходит путь от клиента до сервера через сеть?

Путь пакета от клиента до сервера — это последовательный процесс инкапсуляции данных на каждом уровне модели OSI, передачи через сетевые устройства с пере-инкапсуляцией на L2 и деинкапсуляции на стороне получателя.

Аналогия из жизни: отправка международной посылки. Вы пишете письмо (L7 — данные), кладёте в конверт с адресом (L4 — порт, L3 — IP), конверт в упаковку с адресом почтового отделения (L2 — MAC). На каждом перевалочном пункте меняется внешняя упаковка (L2), но внутренний конверт (L3/L4) остаётся прежним.

Рассмотрим полный путь HTTP-запроса от браузера к серверу www.example.com:

1. Разрешение DNS (L7)

  • Браузер проверяет кэш → ОС проверяет кэш и hosts → DNS-резолвер (рекурсивный запрос)
  • Получаем IP: 93.184.216.34

2. Формирование HTTP-запроса (L7 — прикладной уровень)

Пример
GET /index.html HTTP/1.1
Host: www.example.com

3. Установление TCP-соединения (L4 — транспортный уровень)

  • ОС выбирает эфемерный порт (например, 52431)
  • Three-way handshake: SYN → SYN-ACK → ACK
  • Если HTTPS — дополнительно TLS handshake

4. Сегментация (L4)

  • TCP разбивает данные на сегменты (обычно до MSS ~1460 байт)
  • Каждый сегмент получает TCP-заголовок: src port: 52431, dst port: 443, sequence number и т.д.

5. Добавление IP-заголовка (L3 — сетевой уровень)

  • К каждому сегменту добавляется IP-заголовок: src IP: 192.168.1.10, dst IP: 93.184.216.34, TTL, protocol=TCP
  • ОС проверяет таблицу маршрутизации: 93.184.216.34 не в локальной сети → отправить на default gateway 192.168.1.1

6. Определение MAC-адреса шлюза (L2)

  • ОС знает IP шлюза: 192.168.1.1. Нужен его MAC-адрес
  • Проверяет ARP-кэш. Если нет — ARP-запрос (broadcast) → ARP-ответ
  • Получает MAC: AA:BB:CC:DD:EE:01

7. Формирование Ethernet-кадра (L2 — канальный уровень)

  • Добавляется Ethernet-заголовок: src MAC (сетевой карты клиента), dst MAC (маршрутизатора), EtherType (IPv4)
  • Добавляется FCS (контрольная сумма)

8. Передача по физической среде (L1 — физический уровень)

  • Кадр преобразуется в электрические сигналы (витая пара), световые импульсы (оптоволокно) или радиоволны (Wi-Fi)

9. На маршрутизаторе (default gateway)

  • Получает кадр, проверяет FCS, снимает L2-заголовок
  • Смотрит IP назначения в таблице маршрутизации → определяет следующий hop
  • NAT: заменяет src IP на публичный (203.0.113.5:40001), записывает в NAT-таблицу
  • Создаёт новый L2-кадр с MAC следующего маршрутизатора
  • Отправляет кадр дальше

10. Через Интернет (транзитные маршрутизаторы)

  • Пакет проходит через несколько маршрутизаторов (hops), каждый повторяет шаг 9
  • На каждом хопе L2-заголовок меняется (MAC-адреса), но L3 остаётся (IP-адреса, кроме NAT)
  • TTL уменьшается на 1 на каждом хопе. Если TTL = 0 — пакет отбрасывается (защита от петель)

11. На сервере

  • Пакет приходит, L2- и L3-заголовки снимаются (деинкапсуляция)
  • TCP-стек собирает сегменты в поток данных, отправляет ACK
  • TLS расшифровывает данные
  • HTTP-запрос передаётся веб-серверу (приложению)

12. Ответ проходит обратный путь

Сервер формирует HTTP-ответ, который проходит все те же этапы в обратном направлении. NAT на маршрутизаторе клиента подставляет обратно приватный IP из NAT-таблицы.

Сводная схема инкапсуляции

Пример
L7: [HTTP-данные]
L4: [TCP-заголовок][HTTP-данные]
L3: [IP-заголовок][TCP-заголовок][HTTP-данные]
L2: [Eth-заголовок][IP-заголовок][TCP-заголовок][HTTP-данные][FCS]
L1:  01010111001010110... (биты → сигнал)

Что меняется на каждом хопе

Уровень Заголовки Меняется на хопе?
L2 MAC src/dst Да, на каждом хопе
L3 IP src/dst Нет (кроме NAT)
L4 Port src/dst Нет (кроме PAT/NAPT)
L7 HTTP-данные Нет

Вывод

Путь пакета от клиента до сервера — это процесс многоуровневой инкапсуляции, маршрутизации и деинкапсуляции. На каждом уровне добавляется свой заголовок, и на каждом промежуточном устройстве обрабатываются только релевантные уровни. Ключевой момент: MAC-адреса меняются на каждом хопе, а IP-адреса остаются неизменными (за исключением NAT).

На собеседовании: это классический вопрос «Что происходит, когда вы вводите URL в браузере?». Важно описать полную цепочку: DNS → TCP handshake → TLS handshake → HTTP-запрос → маршрутизация → ответ. Покажите понимание того, что L2-заголовки меняются на каждом хопе, а L3 — нет (кроме NAT). Этот вопрос проверяет глубину понимания сетевой модели.