Фрагментация IP — это процесс интернет-протокола (IP), который разбивает пакеты на более мелкие части (фрагменты), так что полученные части могут проходить по каналу с меньшим максимальным размером передаваемой единицы (MTU), чем исходный размер пакета. Фрагменты собираются заново принимающим хостом .
Детали механизма фрагментации, а также общий архитектурный подход к фрагментации различаются в IPv4 и IPv6 .
RFC 791 описывает процедуру фрагментации IP, а также передачу и повторную сборку IP-пакетов. [1] RFC 815 описывает упрощенный алгоритм повторной сборки. [2] Поле идентификации вместе с внешним и локальным интернет-адресом и идентификатором протокола , а также поле смещения фрагмента вместе с флагами «Не фрагментировать» и «Больше фрагментов» в заголовке IP используются для фрагментации и повторной сборки IP-пакетов. [1] : 24 [2] : 9
Если принимающий хост получает фрагментированный IP-пакет, он должен собрать пакет заново и передать его на более высокий уровень протокола. Предполагается, что повторная сборка произойдет на принимающем хосте, но на практике это может быть сделано промежуточным маршрутизатором, например, для преобразования сетевых адресов (NAT) может потребоваться повторная сборка фрагментов для преобразования потоков данных. [3]
В IPv4 маршрутизатор , который получает сетевой пакет, превышающий MTU следующего перехода, имеет два варианта: отбросить пакет, если в заголовке пакета установлен флаг Don't Fragment (DF), и отправить сообщение Internet Control Message Protocol (ICMP), которое указывает на условие Fragmentation Needed (Type 3, Code 4), или фрагментировать пакет и отправить его по каналу с меньшим MTU. Хотя отправители могут создавать фрагментированные пакеты, маршрутизаторы IPv6 не имеют возможности фрагментировать дальше. Вместо этого сетевое оборудование должно доставлять любые пакеты IPv6 или фрагменты пакетов, меньшие или равные 1280 байт, а хосты IPv6 должны определять оптимальный MTU с помощью Path MTU Discovery перед отправкой пакетов.
Хотя форматы заголовков для IPv4 и IPv6 различаются, для фрагментации используются аналогичные поля, поэтому один и тот же алгоритм можно повторно использовать для фрагментации и повторной сборки IPv4 и IPv6.
В IPv4 хосты должны делать все возможное, чтобы собрать фрагментированные IP-пакеты с общим размером сборки до 576 байт. Они также могут попытаться собрать фрагментированные IP-пакеты размером более 576 байт, но им также разрешено молча отбрасывать такие большие пакеты. Приложениям рекомендуется воздерживаться от отправки пакетов размером более 576 байт, если только они не знают заранее, что удаленный хост способен принять или собрать их. [1] : 12
В IPv6 хосты должны делать все возможное, чтобы собрать фрагментированные пакеты с общим размером после сборки до 1500 байт, что больше минимального MTU IPv6 в 1280 байт. [4] Фрагментированные пакеты с общим размером после сборки более 1500 байт могут быть при желании отброшены без уведомления. Приложения, полагающиеся на фрагментацию IPv6 для преодоления ограничения MTU пути, должны явно фрагментировать пакет в точке происхождения; однако они не должны пытаться отправлять фрагментированные пакеты с общим размером более 1500 байт, если они заранее не знают, что удаленный хост способен выполнить сборку.
Когда сеть имеет несколько параллельных путей, такие технологии, как LAG и CEF, разделяют трафик по путям в соответствии с алгоритмом хэширования . Одна из целей алгоритма — гарантировать, что все пакеты одного потока отправляются по одному и тому же пути, чтобы минимизировать ненужное переупорядочивание пакетов .
Фрагментация IP может привести к избыточным повторным передачам, когда фрагменты сталкиваются с потерей пакетов , и надежные протоколы, такие как TCP, должны повторно передавать все фрагменты, чтобы восстановиться после потери одного фрагмента. [5] Таким образом, отправители обычно используют два подхода для определения размера IP-пакетов для отправки по сети. Первый заключается в том, что отправляющий хост отправляет IP-пакет размером, равным MTU первого перехода пары источник-назначение. Второй заключается в запуске алгоритма обнаружения MTU пути [6] для определения MTU пути между двумя IP-хостами, чтобы можно было избежать фрагментации IP.
По состоянию на 2020 год [обновлять]фрагментация IP-адресов считается хрупкой и часто нежелательной из-за ее влияния на безопасность. [7]