Процедуры фрагментации и сборки фрагментов

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

Затем он копирует в эти буферы содержимое некоторых полей заголовка IP из исходного пакета, создавая тем самым «заготовки» заголовков IP всех новых па­кетов-фрагментов. Одни параметры заголовка IP копируются в заголовки всех фрагментов, а другие остаются лишь в заголовке первого фрагмента. Процесс фрагментации может изменить значения некоторых полей заголовков IP в паке­тах-фрагментах по сравнению с заголовком IP исходного пакета. Так, каждый фрагмент имеет собственное значение контрольной суммы заголовка, смещения фрагмента и общей длины пакета. Во всех пакетах, кроме последнего, флаг MF устанавливается в единицу, а в последнем фрагменте — в нуль.

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

А теперь обсудим, как происходит сборка фрагментированного пакета. Сборка пакета происходит на хосте назначения.

ВНИМАНИЕ --------------------------------------------------------------------------------------------------------

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

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

Когда первый фрагмент исходного пакета приходит на хост-получатель, этот хост запускает таймер, который определяет максимальное время ожидания при­бытия остальных фрагментов данного пакета. В различных реализациях IP при­меняются разные правила выбора максимального времени ожидания. В частно­сти, таймер может быть установлен на фиксированный период времени (от 60 до 120 секунд), рекомендуемый RFC. Как правило, этот интервал достаточен для доставки пакета от отправителя получателю. В других реализациях максималь­ное время ожидания определяется с помощью адаптивных алгоритмов измере­ния и статистической обработки временных параметров сети, позволяющих оце­нивать ожидаемое время прибытия фрагментов. Наконец, тайм-аут может быть выбран на базе значений TTL прибывающих фрагментов. Последний подход ос­нован на том, что нет смысла ожидать, пока прибудут другие фрагменты пакета, если время жизни одного из прибывших фрагментов уже истекло.

Признаком окончания сборки является отсутствие незаполненных промежутков в поле данных и прибытие последнего фрагмента (с равным нулю флагом MF). После того как данные собраны, их можно передавать вышележащему протоко­лу, например TCP.

ВНИМАНИЕ --------------------------------------------------------------------------------------------------------

Если хотя бы один фрагмент пакета не успеет прийти на хост назначения к моменту исте­чения таймера, то никаких действий по дублированию отсутствующего фрагмента не предпринимается, а все полученные к этому времени фрагменты пакета отбрасываются! Хосту, пославшему исходный пакет, направляется ICMP-сообщепие об ошибке. Такому поведению протокола IP вполне соответствует его кредо «с максимальными усилиями» — стараться по возможности, но никаких гарантий не давать.

Пример

Рассмотрим пример фрагментации на маршрутизаторе (рис. 18.19).

Пусть компьютер-отправитель связан с сетью, имеющей значение MTU 17 914 байт, например с сетью Token Ring. Транспортный уровень, как правило, знает MTU ниже­лежащей технологии и соответствующим образом выбирает размер своих сегментов. Пусть в данном примере с транспортного уровня на уровень IP поступает сообщение

размером 6600 байт. Протокол IP формирует из этого сообщения поле данных 1Р-паке- та и снабжает его заголовком. Обратим особое внимание на заполнение полей заголовка, связанных с фрагментацией. Во-первых, пакету присваивается уникальный идентифи­катор, например 12456. Во-вторых, поскольку пакет пока еще не был фрагментирован, в поле смещения помещается значение 0, признак MF также обнулен — это показыва­ет, что пакет одновременно является и своим последним фрагментом. В-третьих, при­знак DF устанавливается в 1, это означает, что данный пакет можно фрагментировать. Общая величина IP-пакета составляет 6600 плюс 20 (размер заголовка IP), то есть 6620 байт, что умещается в поле данных кадра Token Ring. Далее модуль IP хоста-от- иравителя передает этот кадр своему сетевому интерфейсу, который отправляет кадры следующему маршрутизатору.

Хост-получатель

После того как наш кадр пройдет уровень сетевого интерфейса маршрутизатора и осво­бодится от заголовка Token Ring, модуль IP по сетевому адресу определяет, что при­бывший IP-пакет нужно передать в сеть Ethernet, которая имеет значение MTU, рав­ное 1492, что значительно меньше размера поступившего на входной интерфейс пакета. Следовательно, IP-пакет необходимо фрагментировать. Маршрутизатор извлекает поле данных из пакета и делит его на 4 части по 1400 байт и 1 часть в 1000 байт (обратите внимание, что каждый фрагмент данных кратен 8). Затем модуль IP формирует новые IP-пакеты, четыре из которых имеют длину 1400 + 20 = 1420 байт, а один — 1000 + + 20 = 1020 байт, что меньше 1500 байт, поэтому они нормально помещаются в поле данных кадров Ethernet.


В результате хосту-получателю по сети Ethernet приходят пять IP-пакетов с одинако­вым идентификатором 12456. Если время прихода фрагментов не превысило тайм- аут, модуль IP может собирать исходное сообщение. При этом смещение укажет пра­вильный порядок их сборки.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: