Заголовки дейтаграмм IPv4 содержат поле, называемое общей длиной , закодированное на 16 битах. Поскольку уже есть информация о длине заголовка дейтаграммы, общая длина кажется избыточной: ее можно вычислить путем вычитания длины заголовка из общей длины данных, переданных с канального уровня.
Это поле действительно необходимо?
Короткий ответ - да - спецификация IPv4 говорит, что это необходимо, и так оно и есть, по крайней мере, для целей совместимости.
Длинный ответ заключается в том, что некоторые транспорты уровня 2 будут дополнять датаграмму если он меньше определенного размера. заголовок длины IP важен, когда это происходит, так что заполнение второго уровня может быть отброшено.
Вероятно, это вопрос не по теме, но я ясно помню, что примерно 25 лет назад в университете задавал тот же вопрос, когда мы обсуждали TCP / IP в сети 101.
Два ответа я получил, и это все еще имеет смысл, где:
"В то время, когда был разработан TCP / IP v4, было далеко не уверенно, что в будущем не будет расширения IPv4, которое сделало бы его более полезным. Поэтому они оставили это в качестве открытия для будущих изменений. "
" Если программное обеспечение, обрабатывающее пакеты TCP-IP, не знает аспектов L2 передачи данных, если требуется метод определения размера. Вы либо помещаете его в пакет или вы предоставляете программе отдельный аргумент, определяющий длину. Так что вы можете просто поместить его в заголовок в первую очередь. "
(Чтобы проиллюстрировать последнее:Вы сами упомянули об этом в вопросе: «Общая длина данных, передаваемых с канального уровня» - это дополнительный аргумент.)