3

Мой вопрос состоит из двух частей:

  1. Я знаю, что часть данных в кадре Ethernet может быть 46 ~ 1500 байт. Учитывая, что заголовок IP составляет 20 байтов + заголовок TCP - 20 байтов, минимальный размер "данных" сегмента TCP должен быть (46-20-20) = 6 bytes . Учитывая, что заголовок UDP составляет 8 байтов, минимальный размер "данных" сегмента UDP должен составлять (46-8-20) = 18 bytes . Итак, может кто-нибудь объяснить, почему нижняя граница размера данных приложения становится высокой, например, 6 или 18 байтов; не маленькое значение, как 1 байт? Я верю, что что-то упустил.

  2. Я нашел пару объяснений [1] [2], что минимальный размер IP-пакета должен составлять 64 байта. Я думаю, что объяснение в приведенных выше ссылках является правильным. В таком случае, почему минимальный размер "данных" кадра Ethernet (64-20-20) = 24 bytes?

Кто-нибудь может объяснить это более четко?

2 ответа2

6

Минимальный размер кадра для Ethernet определяется в 64 байта (как также описано в ваших ссылках).

DMAC + SMAC + EtherType + Payload + CRC  
 6   +  6   +     2     +    46   +  4  = 64

На уровне 4 (TCP или UDP) «длина» охватывает заголовок уровня 4 и отслеживается в заголовке IP.
Это означает, что для UDP ожидаемый минимум составляет 8 байт (для его заголовка). А для TCP это 20 байтов (минимальный заголовок TCP).

Часть, которую вы, кажется, упускаете, начинается сейчас.
Хотя длина данных Ethernet должна составлять не менее 46 байтов, длина IP не обязательно должна составлять 46-20 байтов. Это может быть намного меньше, чем это.

Итак, если бы у нас был 8-байтовый пакет UDP без данных вообще, его длина IP была бы 20+8 но длина полезной нагрузки Ethernet все равно будет 46 байтов. Что происходит с 18 байтовым отверстием? Он дополняется для создания кадра Ethernet на проводе 64 байта (по причинам, которые вы уже знаете).

[Eth: DMAC + SMAC + EtherType + [IP: Hdr + [UDP: Hdr + 0data ]] + PAD + CRC ]

Итог: то, что вы называете application data size не имеет минимальных ожиданий на основании этого требования к 64 байтовому Ethernet. PAD компенсирует любые различия.

4

Короткий ответ:
Минимальная длина части данных сегмента TCP равна нулю. Минимальная длина части данных дейтаграммы UDP равна нулю.

Если стеку IP необходимо передать дейтаграмму менее 46 байт в Ethernet, Ethernet дополняет его до 46 байт, добавляя байты заполнения. Заголовок IP имеет свое собственное поле длины (как и заголовки TCP и UDP), поэтому эти протоколы никогда не путаются и пытаются интерпретировать заполнение канального уровня как часть их собственных полезных нагрузок.

Дополнительная информация:
Ethernet - это лишь один из многих протоколов канального уровня, на которых может работать IP. Ethernet имеет минимальную длину пакета в 64 байта по унаследованным техническим причинам (так, чтобы "коллизии" могли надежно обнаруживаться в сетях Ethernet максимального диаметра, когда сети Ethernet были CSMA/CD и могли иметь коллизии - современные сети Ethernet используют коммутаторы везде и полнодуплексный на всех сегментах, поэтому CSMA/CD и коллизии в значительной степени остались в прошлом).

Поскольку мы так часто используем IP через Ethernet, легко забыть, что Ethernet и IP - это две отдельные сетевые технологии, созданные двумя отдельными организациями. Ethernet, стандартизированный IEEE (Институтом инженеров по электротехнике и электронике), был разработан для обработки неизвестного количества сетевых протоколов (уровень 3), помимо IP, а IP, созданный IETF (Internet Engineering Task Force), был разработан для работы над неизвестное количество протоколов передачи данных (уровень 2), кроме Ethernet. IP не изменяет свой минимальный или максимальный размер датаграммы только из-за одного популярного протокола канального уровня. Если протокол канального уровня не любит крошечную дейтаграмму, которую он получает, он должен дополнить ее. И в противоположном случае, если IP не нравится MTU, который предлагает текущий канал передачи данных, он должен фрагментироваться.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .