RFC: 1122
Оригинал: Requirements for Internet Hosts - Communication Layers
Категория: Стандарт Интернета
Дата публикации:
Автор:
Перевод: Николай Малых

3.3.2 Сборка (Reassembly)

Уровень IP должен обеспечивать сборку фрагментов (reassembly) дейтаграмм IP.

Будем обозначать максимальный размер дейтаграммы, которая может быть собрана, как EMTU_R (Effective MTU to receive — эффективное значение MTU для приема); иногда используется термин «размер буфера сборки» (reassembly buffer size). Значение EMTU_R должно быть не менее 576 (байтов) и рекомендуется обеспечивать возможность настройки этого значения или использования неограниченного буфера сборки. Кроме того, это значение рекомендуется делать не меньше, чем значение MTU для подключенных сетей.

  • Обсуждение:
  • Фиксированное значение предела EMTU_R не должно встраиваться в программный код, поскольку некоторые протоколы прикладного уровня требуют использования EMTU_R > 576.
  • Реализация
  • При реализации можно использовать непрерывный буфер сборки для каждой дейтаграммы или применять более сложные структуры данных, позволяющие собирать дейтаграммы неопределенно большого размера; в последнем случае говорят о неограниченном (indefinite) EMTU_R.

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

    Некоторую хитрость при сборке представляет учет для определения момента, когда собраны все фрагменты дейтаграммы. Мы рекомендуем алгоритм Кларка (Clark) [RFC815], не требующий дополнительного пространства памяти для учета. Однако, следует отметить, что в отличие от сказанного в [RFC815], заголовок первого фрагмента должен быть сохранен для включения в возможное сообщение ICMP Time Exceeded (Reassembly Timeout — тайм-аут при сборке).

Должен обеспечиваться механизм, посредством которого транспортный уровень будет определять значение MMS_R — максимальный размер сообщения, которое может быть принято и собрано в дейтаграмму IP (см. функцию GET_MAXSIZES в параграфе 3.4). Если используется неограниченное значение EMTU_R, величина MMS_R определяется как MMS_R = EMTU_R - 20 (минимальный размер заголовка IP).

Для сборки должно задаваться максимальное время (тайм-аут). Значение тайм-аута рекомендуется делать фиксированным, а не привязывать его к оставшемуся времени жизни (TTL). Рекомендуется устанавливать тайм-аут в диапазоне 60-120 секунд. По истечении заданного времени частично собранные дейтаграммы должны отбрасываться с передачей сообщений ICMP Time Exceeded хосту-отправителю (если получен начальный фрагмент).

  • Обсуждение:
  • Спецификация IP говорит, что тайм-аут для сборки должен быть равен оставшемуся времени жизни дейтаграммы (TTL) из заголовка IP, но такое решение не работает должным образом, поскольку маршрутизаторы в общем случае трактуют TTL просто как счетчик интервалов, а не время доставки. Если тайм-аут для сборки слишком мал, дейтаграммы будут отбрасываться без нужды, что приведет к излишней загрузке коммуникационных каналов. Значение тайм-аута должно быть не меньше среднего времени доставки пакетов через Internet. Реальная оценка минимального значения тайм-аута для сборки фрагментов составляет 60 секунд.

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

    При установке слишком большого значения тайм-аута на принимающем хосте может не хватить выделенного для буферов пространства и время жизни сегмента MSL (Maximum Segment Lifetime) [RFC793] станет слишком велико. Значение MSL управляет максимальной скоростью, с которой могут передаваться фрагменты дейтаграмм при использовании различных значений 16-битового поля идентификации (увеличение MSL снижает максимальную скорость). Спецификация TCP [RFC793] предполагает для MSL значение 2 минуты. Эта величина устанавливает верхний предел для тайм-аута при сборке.

2007 - 2017 © Русские переводы RFC, IETF, ISOC.