Я занимаюсь тестированием пропускной способности UDP с использованием iperf (https://iperf.fr/) по IPv6. У меня есть очень плохие результаты при использовании клиента Linux UDP с помощью следующей командной строки:iperf UDP over IPv6
iperf -u -V -c fe80::5910:d4ff:fe31:5b10%usb0 -b 100m
Исследуя вопрос с Wireshark я видел есть некоторая фрагментация, пока клиент отправляет данные. Точнее, я вижу UDP-клиент исходящих пакетов размером 1510 байт и 92 байта, чередующихся. Например, UDP-пакеты, которые я вижу, имеют следующий шаблон (в размере): 1510, 92, 1510, 92, 1510, 92, ..., 1510, 92, ...
Чтение документации iperf2 I прочитайте следующее для опции (-l):
Длина буферов для чтения или записи. iPerf работает, записывая массив len байтов несколько раз. Значение по умолчанию - 8 КБ для TCP, 1470 байт для UDP. Примечание для UDP, это размер дейтаграммы и должен быть снижен при использовании адресации IPv6 до 1450 или менее, чтобы избежать фрагментации. См. Также опции -n и -t.
Я попытался сделать то же тест пропускной способности, заменив клиента командной строки Linux Iperf UDP следующим:
iperf -u -V -c fe80::5910:d4ff:fe31:5b10%usb0 -b 100m -l1450
и я вижу хорошие результаты. Глядя на захват Wireshark, я больше не вижу фрагментации.
Выполнение того же теста по IPv4 Мне не нужно изменять размер дейтаграммы по умолчанию UDP (мне не нужно использовать параметр -l), чтобы получить хорошие результаты.
Таким образом, мой вывод заключается в том, что фрагментация (по протоколу IPv6) отвечает за слабые характеристики полосы пропускания.
В любом случае, мне интересно, что на самом деле происходит при установке размера дейтаграммы UDP на 1450 по IPv6. Почему у меня есть фрагментация по IPv6, а не по IPv4 со значением по умолчанию для размера дейтаграммы UDP? Более того, почему у меня нет фрагментации при уменьшении размера дейтаграммы UDP до 1450?
спасибо.
Итак, если я правильно понял, сохраняя MTU фиксированным на 1500, у нас меньше места для полезной нагрузки UDP из-за большего размера заголовка IPv6. В результате датаграмма UDP по умолчанию не соответствует рамке Ethernet вместе с заголовками Ethernet и IPv6, и пакет должен быть фрагментирован. – salvo
Да! Хотя ethernet MTU делает [не включать заголовки Ethernet] (https://en.wikipedia.org/wiki/Ethernet_frame#Ethernet_II). Таким образом, вы можете обычно отправлять 1500 байтов * полезную нагрузку * (полезная нагрузка в контексте Ethernet, являющаяся IP-пакетом, включая заголовки IP) в каждом кадре Ethernet. –