Фрагментация дейтаграммы IР

Фрагментация дейтаграммы IР необходима, когда она создается в локальной сети, которая допускает большой размер пакета, и, чтобы достичь места назначения, должна пересекать локальную сеть, ограничивающую пакеты до меньшего размера.
Дейтаграмма IР может быть помечена как "не фрагментировать". Любая помеченная таким образом дейтаграмма IР не будет фрагментироваться ни при каких обстоятельствах. Если дейтаграмма IР, помеченная "не фрагментировать", не может быть доставлена к своему месту назначения без фрагментации, она будет отбрасываться. Фрагментация, передача и сборка в локальной сети, которые не видны для модуля протокола IР, называются фрагментацией интрасети.
Фрагментация IР и процедура сборки должны иметь возможность разбить дейтаграмму на произвольное число фрагментов, которые можно в дальнейшем собрать снова. Получатель фрагментов использует поле идентификации для обеспечения того, что фрагменты различных дейтаграмм не смешиваются. Поле сдвига фрагмента и длина определяют часть исходной дейтаграммы, содержащейся в этом фрагменте. Флаг "дополнительные фрагменты" указывает (будучи сброшенным) последний фрагмент. Эти поля предоставляют достаточно информации для сборки дейтаграмм.
Поле идентификации используется для различения фрагментов одной дейтаграммы от фрагментов другой. Модуль исходного протокола дейтаграммы IР задает в поле идентификации значение, которое должно быть уникальным для этой пары источник-место назначения и протокола, пока дейтаграмма будет активной в системе Интернет. Модуль исходного протокола всей дейтаграммы задает флаг "дополнительные фрагменты" равным нулю и сдвиг фрагмента как ноль.
Чтобы фрагментировать длинную дейтаграмму IР, модуль протокола IР (например, в шлюзе) создает две новые дейтаграммы IР и копирует содержимое полей заголовка IР из длинной дейтаграммы в оба новых заголовка IР. Данные длинной дейтаграммы делятся на две части по границе восьми октетов (64 бита) (вторая часть, в отличие от первой, может не быть целым, кратным восьми октетам). Вызовите число восьмиоктетных блоков в первой части NFB (для числа блоков фрагментов). Первая часть данных размещается в первой новой дейтаграмме IР, и поле общей длины задается равным длине первой дейтаграммы. Флаг "дополнительные фрагменты" задается равным единице. Вторая часть данных помещается во второй новой дейтаграмме IР, и поле общей длины задается равным длине второй дейтаграммы. Флаг "дополнительные фрагменты" имеет то же самое значение, что и длинная дейтаграмма. Поле сдвига фрагмента второй новой дейтаграммы IР задается равным значению этого поля в длинной дейтаграмме плюс NFB.
Эта процедура может быть обобщена для разбиения на п частей. Чтобы собрать фрагменты дейтаграммы IР, модуль протокола IР (например, на хосте назначения) объединяет дейтаграммы IР, которые имеют одно и то же значение для четырех полей: идентификации, источника, места назначения и протокола. Сборка осуществляется помещением порции данных каждого фрагмента в относительную позицию, указанную сдвигом фрагмента в заголовке IР этого фрагмента. Сдвиг фрагмента равен нулю, а флаг "дополнительные фрагменты" последнего фрагмента будет сброшен в ноль.

Оставьте комментарий