Назад | Перейти на главную страницу

Почему в заголовке IPv4 есть поле общей длины?

Заголовки дейтаграмм IPv4 содержат поле, называемое Общая длина кодируется на 16 бит. Поскольку уже есть информация о длина заголовка Для дейтаграммы общая длина кажется избыточной: ее можно вычислить, вычтя длину заголовка из общей длины данных, переданных с канального уровня.

Это поле действительно необходимо?

Короткий ответ - да - в спецификации IPv4 сказано, что это необходимо, и так оно и есть, по крайней мере, для целей совместимости.

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

Вероятно, это вопрос не по теме, но я ясно помню, что примерно 25 лет назад в университете задавал тот же вопрос, когда мы обсуждали TCP / IP в сети 101.

Я получил 2 ответа, которые все еще имеют смысл:

«В то время, когда был разработан TCP / IP v4, не было уверенности, что в будущем не будет расширения для IPv4, которое сделало бы его более полезным. Поэтому они оставили это как возможность для будущих изменений».

"Если программное обеспечение, обрабатывающее пакеты TCP-IP, не знает аспектов L2 передачи данных, если ему нужен метод для определения размера. Вы либо помещаете его в пакет, либо предоставляете отдельный аргумент программному обеспечению, который указывает длина. Так что вы можете просто поместить его в заголовок в первую очередь ".

(Чтобы проиллюстрировать последнее: вы сами упоминаете об этом в вопросе: «Общая длина данных, передаваемых из канального уровня» - это дополнительный аргумент.)