Безопасно ли предполагать, что если я отправляю данные в 0 байтов (полезная нагрузка), то фактические передаваемые данные составляют 28 байтов
нет
Нет
(и да ... потому что обычно это не имеет большого значения, если это "безопасно")
Хотя верно, что дейтаграмма UDP / IPv4 без полезной нагрузки без опций составляет ровно 28 байтов (или «октеты» в жаргоне сети), это ни в коем случае не является безопасным допущением.
Это, однако, по большей части несущественно. Коммутаторы и маршрутизаторы обычно пересылают небольшой пакет точно так же быстро, как и больший (или с незначительной разницей). Единственный случай, когда вы можете увидеть разницу - это счет за пропускную способность (вы платите за все биты в проводе, а не только за те, которые используете!).
К IPv4 может быть прикреплено до 40 октетов «опций», а IPv4 может быть инкапсулирован в IPv6 (даже без вашего ведома). И то, и другое может резко увеличить размер дейтаграммы и, следовательно, данные, передаваемые довольно очевидным образом.
Кроме того, дейтаграмма будет дополнительно инкапсулирована на канальном уровне, как с добавлением преамбул и данных заголовка, так и с минимальной длиной кадра. Наличие дополнительных заголовков, опять же, довольно очевидно, тот факт, что помимо максимальных размеров полезная нагрузка также имеет минимальные размеры, является менее известным фактом.
Ethernet и ATM - два широко используемых стандарта, которые могут помешать вашим предположениям (но другие уровни связи аналогичны).
Фрейм Ethernet имеет минимальный размер 64 байта и дополняется нулями до этого размера. При наличии 802.1Q (VLAN) это означает, что минимальная полезная нагрузка для кадра Ethernet составляет 42 октета, в противном случае - 46 октетов.
Следовательно, отправка дейтаграммы UDP / IPv4 нулевой длины через «обычную» сеть Ethernet добавит 18 нулевых байтов к полезной нагрузке. Вы никогда их не увидите, но они есть, и они появятся в вашем счете.
Аналогично, ячейки АТМ (как и «фрейм», по некоторым причинам они используют другое слово) всегда составляют 53 байта с 48 байтами полезной нагрузки с нулевым дополнением. Таким образом, диаграмма UDP с нулевой полезной нагрузкой вызовет добавление 20 нулевых байтов, тогда как дейтаграмма UDP / IPv6 нулевой длины сохранит свой первоначальный размер (равный точно 48 байтов), при условии, что между ними нет другой инкапсуляции, такой как PPPoE.
Наконец, учтите, что для отправки и получения пакетов могут потребоваться дополнительные пакеты. Например, вашей сетевой карте может потребоваться ARP (или NDP) для отправки дейтаграммы. Кэширование результатов амортизирует это, когда вы отправляете несколько дейтаграмм, но если вы отправляете только одну UPD дейтаграмму, вы можете быть удивлены, что примерно в три раза больше "данных" отправлено и получено по сравнению с тем, что вы могли наивно ожидать.