
5.5. Протоколы III уровня стека TCP/IP
Управление фрагментацией. Три поля в заголовке дейтаграммы - Иден-
тификация,
Флаги и
Смещение фрагмента ~ управляют фрагментацией
и
сбор-
кой
дейтаграмм (см. рис. 5.16). Поле «Идентификация» содержит уникальное
целое
число,
которое идентифицирует дейтаграл1му.
Напомним,
что когда шлюз
или маршрутизатор фрагментирует дейтаграмму, он копирует большую часть
полей в заголовке дейтаграммы в каждый фрагмент. Поле «Идентификация»
позволяет получателю
узнать,
какой дейтаграмме принадлежат прибьгоающие
фрагменты. Когда появляется фрагмент, получатель для идентификации дей-
таграммы использует поле «Идентификация» вместе с полем адреса источни-
ка. Компьютер, посьшающий ЕР-дейтаграммы, должен генерировать уникаль-
ное значение поля «Идентификация» для каждой отдельной дейтаграммы (в
теории, повторные передачи дейтаграммы должны содержать
то
же самое зна-
чение в поле «Идентификация», что и в исходной дейтаграмме; на практике,
протоколы высокого уровня
обычно вьшолняют
повторную
передачу как новую
дейтаграмму со своим значением поля «Идентификация»). Один из модулей,
используемых в программном обеспечении IP, храшгг глобальный счетчик в
памяти, инкрементирует его каждый раз, когда создается новая дейтаграмма,
и копирует результат в поле «Идентификация» дейтаграммы.
Напомним, что каждый фрагмент имеет точно такой же формат, что и пол-
ная
дейтаграмма. Для фрагмента поле «Смещение фрагмента» указывает сме-
щение в исходной дейтаграмме данных, передаваемых в фрагменте, измеряе-
мое в 8 октетах (смещения измеряются в восьмерках октетов для сохранения
места в заголовке), начиная со смещения ноль. Для сборки дейтаграммы это
поле должно
получить назначение
во
всех фрагментах, начиная
с
фрагмента со
смещением
О
до фрагмента с наибольшим смещением. Фрагмешы необяза-
тельно прибьшают по порядку, и не существует прямого взаимодействия меж-
ду маршрутизатором, который фрагментирует дейтаграммы, и получателем,
который пытается собирать их.
Младшие два бита из трехбитового поля «Флаги» управляют фрагментаци-
ей.
Обычно прикладное программное обеспечение, использующее TCP/IP, не
заботится о фрагментации, так как и фрагментация, и сборка являются авто-
матическими процедурами, выполняемыми на низком уровне в операционной
системе незаметно для пользователя. Тем не менее, для тестирования межсе-
тевого программного обеспечения или отладки рабочих программ может ока-
заться важной проверка размеров дейтаграмм, для которых осуществляется
фрагментация. Первый управляющий бит помогает при таком тестировании,
указьшая возможность фрагментации
дейтаграммы.
Он назьгаается битом «не
фрагментировать», так как установка его в единицу указьгаает, что дейтаграм-
му нельзя фрагментировать. Приложение может выбрать запрет фрагмента-
ции,
когда нужна лишь целая дейтаграмма. Всякий
раз,
когда маршрутизатору
нужно фрагментировать дейтаграмму
с
установленным битом «не фрагменти-
ровать»,
он
удаляет дейтаграмму
и
посьшает обратно источнику сообщение об
ошибке.
355