IP-фрагментация

ОГЛАВЛЕНИЕ

В данном документе мы рассмотрим, что такое IP фрагментация, как она происходит и почему является нежелательным явлением в сетях, а также рассмотрим пару сценариев как ее предотвратить.

IP-фрагментация и реассемблирование

IP Протокол был спроектирован для использования на широком разнообразии каналов передачи данных. Хотя максимальная длина датаграммы IP - 64 КБ, большинство каналов передачи данных устанавливают максимальный предел длины пакета, названный MTU.

Значение MTU зависит от типа канала передачи данных. Дизайн IP протокола приспосабливается к различным MTU, разрешая маршрутизаторам фрагментировать IP датаграммы по мере необходимости. За сборку (реассемблирование) фрагментов обратно в оригинальную IP датаграмму полного размера ответственна принимающая сторона.

IP-фрагментация это разбиение датаграммы на множество частей, которые могут быть повторно собраны позже. Для IP-фрагментации и повторной сборки используются такие поля из IP заголовка как источник, адресат, идентификация, полная длина, и смещение фрагмента, наряду с флажками "больше фрагментов" (MF) и "не фрагментировать" (DF).

Изображение ниже изображает расположение IP заголовка



Идентификация это 16 битовое поле и есть значение, назначенное отправителем IP датаграммы. Используется для последующей сборки фрагментов датаграммы.
Смещение фрагмента это поле 13 битов и указывает, какому месту принадлежит фрагмент в оригинальной IP датаграмме. Это значение всегда кратно восьми байтам.
В области флажков заголовка IP, есть три бита для флажков управления. Важно отметить, что бит "не фрагментировать" (DF) играет основную роль во фрагментации, потому что он определяет, можно ли фрагментировать пакет.

Бит 0 – зарезервирован и всегда сброшен в 0. Бит 1 – это бит DF (0 – можно фрагментировать, 1 – нельзя). Бит 2 – это бит MF (0 – это последний фрагмент, 1 = есть еще фрагменты)

На график ниже показ пример фрагментации.



Если вы сложите все длины IP-фрагментов, то полученное значение превысит оригинальную длину IP датаграммы на 60 байт. Причина,такого увеличения состоит в том, что были созданы три дополнительных IP заголовка, по одному для каждого фрагмента после первого.
  • Первый фрагмент имеет смещение 0, длина этого фрагмента - 1500; она включает 20 байтов для немного измененного оригинального IP заголовка.
  • Второй фрагмент имеет смещение 185 (185 x 8 = 1480), которое означает, что порция данных этого фрагмента начинается с 1480 байта в оригинальной IP датаграмме. Длина этого фрагмента - 1500; она включает дополнительный IP заголовок, созданный для этого фрагмента.
  • Третий фрагмент имеет смещение 370 (370 x 8 = 2960), которое означает, что данные этого фрагмента начинаются с 2960 байта в оригинальной IP датаграмме. Длина этого фрагмента - 1500; она включает дополнительный заголовок IP, созданный для этого фрагмента.
  • Четвертый фрагмент имеет смещение 555 (555 x 8 = 4440), которое означает, что часть данных этого фрагмента начинается с 4440 байтов в оригинальной IP датаграмме. Длина этого фрагмента - 700 байтов; это включает дополнительный заголовок IP, созданный для этого фрагмента.
Только, когда получен последний фрагмент, может быть определен размер оригинальной IP датаграммы. Смещение фрагмента в последнем фрагменте (555) дает смещение данных в 4440 байтов в оригинальной IP датаграмме. Если вы добавите байты данных от последнего фрагмента (680 = 700 - 20), это даст вам 5120 байтов, что является порцией данных оригинальной IP датаграммы. Затем, добавляя 20 байтов для IP заголовка мы получим размер оригинальной IP датаграммы (4440 + 680 + 20 = 5140).