Кратко
- Значение 32 в Fragment Offset указывает на байт 256 исходной дейтаграммы, а не на байт 32.
- Данные каждого фрагмента с MF=1 должны иметь длину, кратную восьми; последний фрагмент может быть исключением.
Смещение не равно номеру байта
RFC 791 задаёт Fragment Offset как 13-битное поле в единицах по восемь октетов. Получатель умножает значение на восемь и получает начало данных относительно исходной, ещё не разделённой дейтаграммы. Поэтому 32 означает позицию 256.
Такой масштаб соответствует распределению места в заголовке. Тринадцать бит дают 8192 значения; при шаге в восемь октетов координата охватывает 65 536 октетов, то есть диапазон, связанный с 16-битным Total Length. Три младших бита не передаются и восстанавливаются как нули.
Экономия создаёт ограничение
Начало следующего фрагмента тоже должно быть представимо этой координатой. Поэтому при MF=1 длина данных текущего фрагмента обязана делиться на восемь. Речь идёт именно о данных, а не о полной длине вместе с заголовком IPv4.
Последнему фрагменту не нужно подготавливать начало следующего. Его данные могут иметь длину, не кратную восьми. Следовательно, правило относится к нефинальным фрагментам, а не ко всем без исключения.
Смещение и MF сообщают разное
Смещение указывает начало фрагмента, а MF сообщает, есть ли после него ещё данные. Нефрагментированная дейтаграмма имеет нулевое смещение и MF=0. Первый фрагмент также может начинаться с нуля, но имеет MF=1. Последний может иметь ненулевое смещение и MF=0.
Для сборки получатель превращает смещение в байтовое начало и вместе с длиной данных получает интервал исходного пространства. RFC 815 описывает этот процесс через полученные интервалы и отсутствующие «дыры»: новый фрагмент может заполнить дыру, сократить её с одной стороны или разделить. MF=0 сообщает конечную протяжённость, но не доказывает, что все предыдущие данные уже получены.
Координата сохраняется при повторном разделении
Если фрагмент разделяют ещё раз, новые смещения по-прежнему отсчитываются от исходной дейтаграммы. Локальная нумерация не появляется. Поэтому последовательное разделение несколькими устройствами остаётся описанным в одной системе координат.
Уменьшение поля не устраняет сложность, а перемещает её: отправитель соблюдает выравнивание, а получатель возвращает координату к байтовому виду.
Источники
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
