Перейти к содержимому
3.3. Пакеты: почему данные режутся на кусочки

Матрёшка пакета: что снимается на каждом узле

Соберите пакет, снимите любой слой и посмотрите, какой узел первым его не поймёт.

// данные внутри заголовков

Пакет - это данные плюс инструкция по доставке, и каждый заголовок нужен своему устройству. Соберите пакет и отправьте; потом снимите любой слой и отправьте снова - увидите, кто первым не поймёт, что ему принесли. Пока пакет идёт, слой светится у того узла, который его читает.

TTL 64

Слои можно надевать и снимать по одному - щёлкните по названию. А потом жмите «Отправить»: пакет пойдёт по узлам и остановится там, где нужного заголовка не хватит.

+18 б

Заголовок с MAC-адресами и контрольная сумма в конце. IP-адрес нужен, чтобы найти дорогу между сетями, а MAC-адрес - чтобы найти конкретное устройство в своей сети. Этот слой живёт ровно до следующего узла.

+20 б

Адрес отправителя, адрес получателя, TTL, протокол и контрольная сумма заголовка. Это адрес на конверте: по нему пакет и ведут от узла к узлу.

+20 б

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

Кусок файла: полезная нагрузка 1460 б
В одном пакете

заголовки: 58 б, данные: 1460 б, 3.8%

  1. Ваша сетевая карта отправитель

    Кладёт пакет в кадр с MAC-адресом ближайшего узла и выпускает его в провод. Дальше своей сети она ничего не знает - и знать не должна.

    TTL 64

    читает: Кадр Ethernet; не видит: Заголовок TCP, Заголовок IP.

    Отправлять нечего: без кадра сетевой карте некому передать данные. Она работает с MAC-адресами, а их нет - пакет не покидает компьютер.

  2. Коммутатор провайдера коммутатор

    Работает на уровне кадра: смотрит MAC-адреса и передаёт кадр дальше по локальной сети. В заголовок IP он не заглядывает вовсе, поэтому и TTL не трогает - для него это просто байты внутри.

    TTL 64

    читает: Кадр Ethernet; не видит: Заголовок TCP, Заголовок IP.

    Коммутатор умеет только MAC-адреса. Кадра нет - смотреть не на что, и кадр он никуда не передаст.

  3. Домашний роутер маршрутизатор

    Снимает кадр, читает заголовок IP, подменяет адрес отправителя на внешний (NAT) и надевает новый кадр - до следующего узла. Что за сайт вы смотрите и какой у вас браузер, он не знает: TCP он не разбирает.

    TTL 63

    читает: Кадр Ethernet, Заголовок IP; не видит: Заголовок TCP.

    Роутер не знает, куда это везти: в пакете нет адреса получателя. Кадр он снял, а внутри вместо конверта с адресом - голые данные. Такой пакет уничтожается на первом же маршрутизаторе.

  4. Магистральный маршрутизатор маршрутизатор

    Ищет в таблице маршрутизации самое конкретное правило под адрес получателя. Не нашёл - отправляет по маршруту по умолчанию, к вышестоящему узлу, который знает больше. И снова минус единица у TTL.

    TTL 62

    читает: Кадр Ethernet, Заголовок IP; не видит: Заголовок TCP.

    И этому узлу нужен адрес получателя: без заголовка IP вести пакет некуда.

  5. Маршрутизатор в дата-центре маршрутизатор

    Последний шаг перед сервером. Каждый узел знает только следующий шаг, а не весь маршрут целиком - как почтальон, который знает лишь, что всё чужое идёт в районный центр.

    TTL 61

    читает: Кадр Ethernet, Заголовок IP; не видит: Заголовок TCP.

    Без адреса получателя пакет не дошёл бы и сюда.

  6. Сервер-получатель получатель

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

    TTL 61

    читает: Кадр Ethernet, Заголовок IP, Заголовок TCP.

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

Пакет дошёл. Каждый маршрутизатор уменьшил TTL на единицу, а коммутатор не тронул: он работает на уровне кадра. Если бы из-за ошибки в таблицах пакет пошёл по кругу, TTL рано или поздно дошёл бы до нуля, пакет уничтожили бы, а отправителю ушло бы уведомление - именно на этом и построена команда traceroute.

Маршрут условный и короткий: обычно от Беларуси до европейских серверов 8-15 узлов и 10-30 мс. Размеры взяты из статьи: MTU Ethernet 1500 байт, из них 20 на заголовок IP и 20 на заголовок TCP, на данные остаётся около 1460. Размер самого кадра в статье не указан, здесь взят обычный для Ethernet: 14 байт заголовка с MAC-адресами и 4 байта контрольной суммы в конце; в 1500 байт MTU кадр не входит, это уже упаковка канального уровня.

Интерактив разработан - ремонт компьютеров и ноутбуков в Барановичах. © 2008-2026. Источник: any.by/demo/matreshka-paketa