...
🧠 Блог посвящен теме VPN и безопасности, конфиденциальности данных в Интернете. Рассказываем про актуальные тренды и новости связанные с защитой.

Фрагментация IP: полное объяснение

975

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

IP-пакеты, превышающие размер MTU, необходимо разделить на более мелкие фрагменты или пакеты, чтобы их можно было перемещать по сети.

Все еще в замешательстве? Не волнуйся. 

В этом руководстве мы объясним все о фрагментации IP — что это такое, что она делает, как она используется и ее недостатки, простым языком для понимания. Далее мы ответим на некоторые конкретные вопросы пользователей, связанные с этой темой. Итак, без лишних слов, приступим!

Что такое IP-фрагментация?

Каждая локальная сеть поддерживает максимальный размер IP-пакета. Таким образом, когда хост использует сеть для передачи IP-пакета, он не должен превышать размер Максимальной единицы передачи (MTU). В противном случае он делится на мелкие части — процесс, называемый фрагментацией IP.

Этот размер обычно определяется MTU и каналом передачи данных в сети, который часто является одним и тем же. Современное рабочее место, центр обработки данных или кампусная сеть, предлагаемая через Ethernet, имеет значение MTU 1500 байт.

Однако IP-пакеты, сначала передаваемые по сети, поддерживающей один MCU, могут потребовать маршрутизации через туннели VPN, глобальные сети или другие сети с меньшими максимальными единицами передачи. Если размер пакета превышает меньший MTU, данные в этом пакете необходимо фрагментировать.

Данные будут разбиты на несколько частей и перенесены в виде новых фрагментов (пакетов), которые меньше или равны по размеру, чем нижний MCU. Эти фрагментированные данные будут затем собраны, когда достигнут места назначения.


IPv4

Используемые поля заголовка IPv4

В процессе фрагментации и повторной сборки задействованы различные поля заголовка IP, которые разбиты на части/фрагменты.

(Изображения предоставлены: packagepushers.net)

Операция фрагментации зависит от трех полей заголовка IP (всего 32 бита). Все эти фрагменты будут иметь значения, существенно отличающиеся от исходного IP-пакета:

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

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

Как и в исходном IP-пакете, первый зарезервированный бит поля «Флаги» (всего 3 бита) и второй, бит «Не фрагментировать» (DF)  будут сброшены (0).

Однако в последнем фрагменте третий бит поля, т. е. Больше фрагментов (MF), будет установлен на 1. Все биты в этом поле последнего IP-пакета будут установлены на 0, точно так же, как исходный IP-пакет (если это не фрагмент).

Если в исходном пакете установлен флаг «Не фрагментировать», то это предотвратит фрагментацию и приведет к необходимости отбрасывать пакеты. В этом случае отправителю должны быть отправлены ошибки, например ошибка ICMP типа 3: «Пункт назначения недоступен», код 4: «Требуется фрагментация и установлен DF».

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

Смещение в первом фрагменте равно 0, так как данные в этом фрагментированном пакете и в исходном пакете начинаются с одного и того же места. В следующих фрагментах значение представляет собой смещение фрагментированных данных от начала данных в начальном фрагменте (смещение 0) в 8-байтовых блоках (также называемых октасловами).

Если IP-пакет, содержащий данные размером 800 байт, разделен на две равные части/фрагменты, каждая из которых содержит 400 байт, то смещение фрагмента 1- го фрагмента равно 0, а другого – 50 (400/8).

Значение смещения должно быть количеством 8-байтовых блоков данных. Это означает, что предыдущий фрагмент должен быть кратен 8 байтам. Последний фрагмент может содержать данные, не кратные 8 байтам, так как больше фрагментов не будет.


IPv6

Несмотря на то, что большинство полей заголовка остаются прежними, фрагментация IP в IPv6 работает немного иначе, чем в IPv4. В IPv6 данные могут быть фрагментированы только на исходном узле. Это означает, что фрагментация не может выполняться в других сетях, кроме исходной.

Флаг «Не фрагментировать» недоступен, поэтому все, что вам нужно сделать, это не создавать фрагменты.

Фрагментация IP не может быть выполнена, если не используется PMTUD. Узлы не могут использовать MTU выше 1280 байт, что является минимумом IPv6, если они не реализуют обнаружение MTU пути (PMUTD).

Хотя Path MTU Discovery работает так же, как IPv4, сообщение об ошибке ICMP отличается:

(Изображения предоставлены: packagepushers.net)

Если IP-пакет больше по размеру, чем MCU, то маршрутизатор IPv6 должен отбросить его и отправить отправителю ошибку ICMPv6 типа 2 «Слишком большой пакет» — код 0.

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

Таким образом, хост-источник не будет получать сообщения Packet Too Big и будет повторно передавать IP-пакеты, которые были отброшены несколько раз, что, безусловно, не будет достигнуто. В конце концов, соединение будет считаться нестабильным и закрытым. Даже если бы установили новый, проблема повторилась бы.

Поля заголовка, относящиеся к фрагментации, помещаются в заголовок расширения, называемый заголовком фрагмента. Это указывается в поле «Следующий заголовок» (значение 44) в стандартном IPv6 или любом предыдущем заголовке расширения.

Как и все заголовки расширения, этот имеет длину 8 байт/64 бита вместе со стандартным заголовком, что приводит к фрагментации IPv6 с более высокими накладными расходами, чем IPv4.

Используемые поля заголовка IPv6

Проверьте поля в заголовке расширения фрагмента IPv6:

(Изображения предоставлены: packagepushers.net)

Поле под названием «Следующий заголовок» (8 бит) определяет тип заголовка, например, заголовок протокола верхнего уровня или заголовок расширения IPv6. Затем резервируются следующие 8 бит.

13-битное поле Fragment Offset используется аналогично IPv4. После этого следующие 2 бита резервируются.

Флаг поля M будет установлен в 1, а последний фрагмент будет установлен как поле More Fragments (MF)  IPv4.

32- битное поле идентификации такое же, как 16-битное поле IPv4, содержащее уникальный идентификационный номер для комбинации адресов источника и адреса назначения. Поле протокола недоступно в IPv6.


Недостатки фрагментации IP

Считается, что стек IP-протокола имеет ненадежный механизм, из-за которого конечные хосты не могут определить максимальный размер полезной нагрузки при обмене данными через хост IPv4 и IPv6.

Несмотря на то, что отсутствие механизма MTU в сети понятно, поскольку IP-пакеты идут по разным маршрутам, отсутствие сквозной информации может привести к тому, что промежуточные маршрутизаторы будут получать пакеты слишком большого размера и не смогут их пересылать.

Маршрутизаторы IPv4 могут разбивать IP-пакеты на фрагменты во время передачи, но та же функция недоступна в маршрутизаторах IPv6, где отправитель должен выполнять фрагментацию.

Фрагментация приводит к всплеску накладных расходов уровня 3. Так, например, если конечный хост считает, что он может использовать IP-пакеты размером 1500 байт, но сталкивается с переходом на своем пути с размером MTU 1472, тогда IP-пакет будет разделен на два пакета, что приведет к добавлению заголовка IPv6 из 40 байт и заголовок IPv4 20 байт.

IP-фрагменты создают дополнительную нагрузку на принимающую систему, поскольку требуется повторно собрать фрагменты, чтобы доставить их на более высокие уровни протокола. Эта активность усугубляется, когда маршрутизатор прерывает IP-трафик.

Если маршрутизатор попытается собрать фрагментированные пакеты, пакеты не смогут собраться в аппаратном обеспечении, что резко снизит производительность платформы.


Часто задаваемые вопросы

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

Нет, маршрутизаторы могут фрагментировать IP-пакеты, но не собирать их заново. Задача целевого устройства состоит в том, чтобы заново собрать эти пакеты для пользователя.

Если один или несколько фрагментов дейтаграммы потеряны, вся дейтаграмма отбрасывается по истечении времени ожидания.


Вывод

На этом наше подробное руководство о фрагментации IP заканчивается.

Чтобы дать вам краткий обзор, если данные, отправляемые по сети, превышают размер Максимальной единицы передачи (MTU), то данные будут разделены на несколько фрагментов и отправлены получателю.

Как только фрагменты IP достигают места назначения, они собираются в правильном порядке, чтобы данные могли быть полезны пользователям. Механизм фрагментации различается для сетей IPv4 и IPv6, подробности которого упомянуты выше.

Если у вас есть какие-либо вопросы об IP-адресах и фрагментации, обращайтесь к нам с ними в комментариях.

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее