Почему данные не отправляют целиком
Файл в сотни мегабайт нельзя протолкнуть по сети одним куском. Канал общий, и один длинный передаваемый блок надолго занял бы его для всех остальных. Поэтому информацию режут на небольшие порции, которые называют пакетами, и отправляют по одной. Такой подход называется коммутацией пакетов, и на нём построен интернет.
У него есть и запас прочности. Если один пакет потерялся или повредился, достаточно повторить только его, а не всю передачу. Кроме того, разные пакеты одного потока могут идти разными маршрутами и огибать перегруженные участки, что повышает устойчивость сети.
Из чего состоит пакет
Любой пакет делится на две части. Полезная нагрузка, она же payload, это фрагмент самих данных: кусок веб-страницы, часть письма, кадр видео. Заголовок содержит служебную информацию, необходимую для доставки, и играет роль конверта.
В заголовке IP лежат адрес отправителя и адрес получателя, номер версии протокола, поле TTL, тип вложенного протокола и контрольная сумма самого заголовка. Транспортный протокол добавляет свой заголовок: у TCP это порты, порядковые номера, флаги и размер окна, у UDP заметно короче, только порты, длина и контрольная сумма. Получается вложенность, где нагрузка одного уровня оказывается пакетом другого.
Путь пакета по сети
Отправитель формирует пакет, и первый маршрутизатор смотрит на адрес назначения и выбирает следующий переход. Так повторяется на каждом узле: устройство читает заголовок, уменьшает TTL, принимает решение и передаёт пакет дальше. Полезная нагрузка при этом не анализируется, если только устройство не выполняет расширенную фильтрацию.
На стороне получателя пакеты могут приходить не в том порядке, в каком были отправлены, а иногда и не приходить вовсе. Транспортный уровень собирает их, ориентируясь на порядковые номера, и запрашивает повтор недостающих частей. Для протоколов без такого механизма упорядочивание остаётся задачей приложения.
Размер и накладные расходы
Размер пакета ограничен максимальным размером блока на канале. В типичной Ethernet-сети он составляет около полутора тысяч байт, что подробнее разобрано в описании MTU. Заголовки забирают часть этого объёма, поэтому реальная полезная нагрузка чуть меньше. Мелкие пакеты дают относительно больше накладных расходов, а очень большие увеличивают риск фрагментации и повторной передачи.
Вот почему скорость соединения на практике оказывается ниже номинальной: часть канала занята служебными данными, подтверждениями и повторами.
Как увидеть пакеты у себя
Посмотреть на пакеты можно с помощью анализатора трафика, например Wireshark, или консольной утилиты tcpdump. Запустите захват на своём сетевом интерфейсе, откройте любую страницу и вы увидите цепочку: запрос DNS, установку TCP-соединения, обмен по TLS и передачу данных. Кликая по строке, можно развернуть каждый заголовок отдельно.
Захватывайте только собственный трафик в своей сети: перехват чужих данных без разрешения недопустим, и в современном мире значительная часть содержимого всё равно зашифрована, так что видны будут лишь заголовки.
Пакеты и восприятие скорости
Пользователь измеряет скорость в мегабитах в секунду, но сеть оперирует единицами по полторы тысячи байт. Поэтому важны не только пропускная способность, но и то, сколько пакетов теряется, насколько нестабильна задержка между ними и в каком порядке они приходят. Видеозвонок, в котором каждый пакет несёт крошечный фрагмент звука, страдает от потерь заметнее, чем загрузка файла, где потерянное просто отправят снова.
Отсюда практический вывод: если страницы открываются медленно, а тест скорости показывает хорошие цифры, стоит посмотреть на потери и задержку до узлов, а не только на пропускную способность. Для этого подойдут ping и traceroute.
Слово «пакет» используют широко, и в разговоре оно может означать разное. Для сетевиков это единица данных сетевого уровня, для пользователя любая порция трафика. В защитных системах говорят о фильтрации пакетов: правило смотрит на адреса, порты и флаги в заголовке и решает, пропустить или отбросить. Более продвинутые системы отслеживают состояние соединения и сопоставляют пакет с уже открытым сеансом.
Отдельный случай: пакет ICMP, служебное сообщение, которое несёт не пользовательские данные, а информацию о состоянии сети, например «узел недоступен».