Фрагментация IP датаграмм

Dependences: IP, MTU


IP фрагментация — это процесс разбиения оригинального IP-пакета на множество фрагментов. При этом каждый фрагмент может быть повторно фрагментирован.

Фрагментация означает также добавление IP-заголовка к каждому фрагменту, для независимой доставки. Это увеличивает суммарный размер передаваемых данных. Кроме доставки данных, IP-заголовок также используется для сборки воедино оригинального пакета. Для этого служат следущие поля заголовка: IP-адреса отправителя и получателя, Identification, смещение фрагмента, длина, флаг MF.

  • Поле Identification выбирается отправителем и должно давать уникальный набор полей для определения фрагментов одного пакета.
  • Поле смещение фрагмента — это смещение в оригинальном пакете, деленное на 8.
  • Поле длина — это размер данных вместе с заголовком.
  • Флаг MF (More Fragmets) — указывает, есть ли еще фрагменты, или это последний.

Процесс фрагментации. Пакет разбивается промежуточным устройством на фрагменты, учитывая размер заголовка IP-пакета. К частям розбитого поля данных дописываются копии IP-заголовка оригинального пакета, но с измененными полями длина, флаг MF*, смещение фрагмента*. Получатель идентифицирует фрагменты одного пакета по уникальному набору полей, описанному выше и собирает воедино. Фрагменты должны находиться в определенном буфере, пока не будут получены все. Обработка IP-пакета начнется только тогда, когда он будет полностью собран из фрагментов.

Повторная фрагментация фрагмента. Фрагмент разбивается на несколько по аналогичной схеме. Смещение фрагмента изменяется относительно значения оригинального фрагмента. Таким образом, просто увеличивается количество фрагментов оригинального IP-пакета. Преимуществом такого подхода является последовательная сборка пакета (не нужно рекурсивно сбирать фрагментированные фрагменты), а также возможность (теоретически) промежуточной сборки нескольких фрагментов в один фрагмент (обратная операция).

Для промежуточных устройств фрагменты представляются обычными IP-пакетами.

Хотя промежуточные устройства могут (теоретически) собирать проходящие фрагменты в единый оригинальный пакет или в меньшее количество фрагментов, этим все же должны заниматься конечные устройства. На это есть ряд причин:
  •  фрагменты могут следовать разными маршрутами
  •  вычислительная нагрузка на промежуточные устройства
  •  задержки

IP фрагментация негативно влияет на качество работы сети:
  •  увеличение трафика (как количество пакетов, так и их суммарный размер)
  •  обработка бóльшего количества пакетов
  •  необходимость сборки на стороне получателя (память, нагрузка, задержка)
Поэтому рекомендуется использовать технологию PMTUD.

Задание 1. Как определить по заголовку, что пакет не фрагментирован?
Задание 2. Маршрутизатору необходимо перенаправить пакет 3000 байт с интерфейса 1 (MTU=3000), на интерфейс 2 (MTU=1500), на сколько фрагментов будет разбит пакет?

Благодарим за статью: Дмитрия Подгорного

Войти