Пакеты и их структура

Пакеты и их структура

Мы разобрались, что IP-адрес — это «адрес на конверте». Теперь посмотрим на само «письмо». Данные в интернете передаются не сплошным потоком, а маленькими порциями — пакетами (packets). Почему так — и что внутри пакета — разберём в этом уроке.

Зачем резать данные на куски

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

  1. Разделение канала. Если один компьютер шлёт гигабайтный файл сплошным потоком, все остальные вынуждены ждать. Маленькие пакеты от разных отправителей перемешиваются и передаются «по очереди» — никто не блокирует канал надолго.

  2. Устойчивость к ошибкам. Если при передаче сплошного потока повредится один бит — придётся пересылать весь файл заново. С пакетами — пересылается только повреждённый кусочек.

  3. Гибкость маршрутизации. Пакеты одного и того же файла могут идти разными путями, обходя перегруженные или сломанные участки сети.

Коммутация пакетов vs коммутация каналов

В телефонии прошлого века использовалась коммутация каналов: два абонента получали выделенную линию на всё время разговора. Линия занята, даже если оба молчат.

Интернет использует коммутацию пакетов (packet switching): канал не выделяется монопольно. Пакеты от тысяч разговоров, видео и сайтов перемешиваются в одном кабеле. Это как автомобильная дорога вместо железнодорожного пути — машины едут вперемешку, а не одна за другой с эксклюзивным доступом.

Что внутри пакета

Пакет состоит из двух частей: заголовок (header) и данные (payload).

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

┌─────────────────────────┐
│  ЗАГОЛОВОК (header)     │
│  • IP отправителя       │
│  • IP получателя        │
│  • TTL (время жизни)    │
│  • Протокол (TCP/UDP)   │
│  • Контрольная сумма    │
│  • Длина пакета         │
├─────────────────────────┤
│  ДАННЫЕ (payload)       │
│  • Кусочек файла/страницы│
│  • Обычно до 1500 байт  │
└─────────────────────────┘

Разберём ключевые поля заголовка:

  • IP отправителя и получателя — откуда и куда идёт пакет. По этим полям роутеры принимают решение о маршрутизации.
  • TTL (Time To Live) — счётчик, ограничивающий количество прыжков (hop'ов) между роутерами. При создании пакета TTL = 64 (или 128, 255). Каждый роутер уменьшает TTL на 1. Когда TTL станет 0 — пакет уничтожается. Это предотвращает бесконечное блуждание пакетов в случае петли маршрутизации.
  • Протокол — указывает, какой протокол верхнего уровня находится в payload. 6 = TCP, 17 = UDP. Чтобы принимающая сторона знала, какому обработчику отдать данные.
  • Контрольная сумма (checksum) — число, которое позволяет проверить, не повредился ли заголовок при передаче. Если сумма не совпадает — пакет отбрасывается.

Размер заголовка IPv4 — от 20 до 60 байт. В IPv6 заголовок фиксированный — 40 байт, зато проще и обрабатывается быстрее.

MTU: максимальный размер пакета

У каждого участка сети есть ограничение на максимальный размер пакета — MTU (Maximum Transmission Unit). Для Ethernet это обычно 1500 байт. Если пакет больше MTU, его фрагментируют — разбивают на несколько меньших пакетов, которые собираются обратно на приёмной стороне.

Аналогия: через узкую дверь не пройдёшь с широким шкафом — приходится разбирать его на части и собирать заново внутри. Фрагментация работает так же, но каждый фрагмент — это самостоятельный IP-пакет со своим заголовком.

Инкапсуляция: матрёшка из протоколов

Пакет — это как матрёшка. На уровне приложения у тебя HTTP-запрос. Он заворачивается в TCP-сегмент, тот — в IP-пакет, а IP-пакет — в Ethernet-кадр:

Ethernet-кадр
  └─ IP-пакет
       └─ TCP-сегмент
            └─ HTTP-запрос

Каждый уровень добавляет свой заголовок. На приёмной стороне заголовки снимаются в обратном порядке. Мы будем разбирать эти уровни подробно в модуле про стек TCP/IP.

Почему пакеты могут приходить не по порядку

Пакеты одного файла могут идти разными путями. Первый пакет пошёл через Франкфурт, второй — через Амстердам, третий догнал второй из-за задержки на промежуточном роутере. В результате пакеты приходят к получателю в порядке 1, 3, 2.

Сам протокол IP не гарантирует порядок доставки — он просто доставляет отдельные пакеты. За наведение порядка отвечает протокол уровнем выше — TCP (разберём в следующем модуле). Именно TCP нумерует пакеты и пересобирает их в правильном порядке.

Проверь себя

  1. Что произойдёт, если TTL пакета станет равным нулю?
  2. Зачем нужна фрагментация?
  3. Может ли один пакет содержать данные и для веб-страницы, и для почтового клиента одновременно?
<details> <summary>Ответы</summary>
  1. Роутер отбросит пакет и может отправить отправителю ICMP-сообщение «Time Exceeded». Это защита от бесконечных петель маршрутизации.
  2. Фрагментация нужна, когда пакет превышает MTU участка сети. Большой пакет разбивается на части, которые собираются обратно на приёмной стороне.
  3. Нет. Каждый пакет принадлежит одному протоколу верхнего уровня (поле «Протокол» в заголовке одно). Данные для разных приложений идут в разных пакетах.
</details>

Что унести с урока

  • Данные передаются пакетами, а не сплошным потоком. Это даёт гибкость и устойчивость.
  • Коммутация пакетов эффективнее коммутации каналов — канал не простаивает.
  • Заголовок IP-пакета содержит адреса, TTL, тип протокола и контрольную сумму.
  • MTU ограничивает размер пакета. Слишком большие пакеты фрагментируются.
  • IP не гарантирует порядок доставки — за это отвечает TCP.

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

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике