Почему фрагменты ip должны быть кратны 8 байтам - PullRequest
7 голосов
/ 21 октября 2011

В учебнике Компьютерные сети Джеймс Ф. Куросе Пятое Эд, глава 4 упомянул

фрагменты ip должны быть кратны 8 байтам, и поскольку Флаги в заголовке IP занимает 3 бит.Я не понимаю, почему фрагментация ip должна быть кратна 8 байтам.

Ответы [ 4 ]

13 голосов
/ 21 октября 2011

Каждый фрагмент, кроме последнего, должен содержать кратные 8 байт данных.

Смещение фрагмента может содержать 8192 (2 ^ 13) единиц, но датаграмма не может иметь 8192 * 8 = 65536 байт данных, поскольку в поле «Общая длина» заголовка IP записывается общий размер, включая заголовок и данные.

Длина IP-заголовка составляет не менее 20 байтов, поэтому максимальное значение «Смещение фрагмента» ограничено значением 8189, что оставляет место для 3 байтов в последнем фрагменте.

Надеюсь, это поможет.

2 голосов
/ 24 июня 2012

Обратите внимание, что поле Fragment Offset выражается в 8-байтовых единицах, а не в байтах. По этой причине размер полезной нагрузки внутри каждого фрагмента, кроме последнего, должен быть кратным 8 байтам.

Поскольку смещение фрагмента кодируется на 13 битах, получается, что его диапазон составляет от 0 до 8191 единиц по 8 байт. Однако, поскольку общая длина учитывает также заголовок IP, максимальный предел смещения фрагмента фактически равен 8189 единицам, а не 8191 единицам, см. Ниже:

Общая длина, кодируемая 16 битами, означает, что она ограничена 65535 байтами. Затем, поскольку заголовок IP составляет не менее 20 байтов, это приводит к тому, что полезная нагрузка ограничена максимальными 65535 байтами - 20 байтов = 65515 байтов. Разделение этих 65515 байтов на 8-байтовые блоки приводит к тому, что может быть максимум 8189 единиц, следовательно, смещение фрагментации ограничено максимальными 8189 единицами.

Фрагмент IP, имеющий значение Смещения фрагмента, установленное на это максимальное значение 8189, может иметь полезную нагрузку максимум 3 байта:

Максимум 65535 байтов - минимум 20 байтов - (8189 единиц * 8 байтов на единицу) = максимум 3 байта

Rurre

0 голосов
/ 19 марта 2016

Здесь (https://cs.nyu.edu/courses/fall98/G22.2262-001/class11.txt) дано, что: смещение фрагмента измеряется в единицах по 8 байтов (64 бита). Это связано с тем, что поле смещения фрагмента на 3 бита короче поля общей длины, т.е.и 2 ^ 3 равно 8).

0 голосов
/ 07 января 2014

То, что сказал Уэйн, плюс тот факт, что смещение фактически используется в конечных хостах, чтобы они могли эффективно хранить фрагменты в памяти, то есть подряд.Смещение показывает относительное положение фрагмента относительно всей дейтаграммы.Вот почему смещение должно быть IP-фрагментами, которые должны быть кратны 8 байтам, потому что на самом деле вы делаете сдвиг вправо на 3 бита (отсюда и 13 бит).

...