Как настроить большой mtu (linux)

У меня есть гигабитное соединение Ethernet от моего ноутбука до маршрутизатора и работающее соединение ipv6 с Интернетом. Я могу получать очень большие пакеты с сайтов в Интернете размером не менее 10000 байт (согласно wireshark). (правка: оказывается, "универсальная разгрузка получения") в Linux. Однако при попытке отправить что-либо, мой локальный компьютер фрагментируется с размером чуть меньше 1500 байт для ipv6. (На ipv4 я могу отправлять tcp пакеты в Интернет по крайней мере 1514 байтов, я могу пинговать с пакетами до настроенного mtu 6128, но они находятся в "черной дыре".)

Я на Ubuntu 12.04. Я настроил MTU для моего eth0 6128 (максимум, который он принимает), оба с использованием ip link set dev eth0 mtu 6128 и в графическом интерфейсе апплета NetworkManager и перезапустил соединение. ip link show eth0 показывает, что 6128 мТУ действительно установлен. ip -6 route показывает, что ни один из путей, о которых знает ядро, не имеет установленного mtu. Я могу пропинговать ipv4 с пакетами до 6128 байтов (хотя я не получаю ответы), но когда я делаю ping6 myrouter -c3 -s1500 -Mdo Я получаю сообщения об ошибках со своего собственного компьютера, в которых говорится, что пакеты слишком велики, а значение mtu равно 1480. Я подтвердил с помощью Wireshark, что ничего не передается по проводам, и ответы действительно генерируются моим собственным компьютером.

Итак, как мне заставить мой компьютер использовать больший mtu?

3 ответа

То, что вы видите, скорее всего, не гигантские кадры. Что-то вроде 99,9% Интернета работает на 1500 байт и меньше MTU в конце концов. Вероятно, только ваше ядро ​​или сетевая карта выполняют объединение пакетов.

Это делается с помощью функции, обычно называемой универсальной разгрузкой приема (GRO) или большой разгрузкой приема (LRO). Это работает так, что пакеты в одном потоке идентифицируются и объединяются, а затем передаются в стек TCP/IP. Это может сэкономить значительное количество циклов ЦП, поскольку уменьшает количество обращений в стек.

Попробуйте это: ethtool -K $ ИНТЕРФЕЙС gro off

Что отключает эту функцию и делает wireshark счастливее (хотя и не ваш процессор)

Вы все еще можете использовать более высокие значения MTU локально, но они больше не будут вам выгодны именно благодаря таким функциям и, конечно, более быстрому аппаратному обеспечению. Также это может быть кошмар управления. Существует множество драйверов и оборудования с ошибками, а также разная степень поддержки настройки MTU через DHCP или RA в операционных системах. Поскольку вы хотите, чтобы все устройства в данном широковещательном домене работали с одним и тем же MTU, это часто делает нецелесообразными гигантские кадры.

MTU в основном используется локально. Использование кадров Jumbo в нескольких сетевых переходах (например, маршрутизатор + Интернет) сложно и, скорее всего, не будет работать. Например, DSL обычно ограничивает значение MTU пути 1492 байтами. Как правило, MTU пути определяется наименьшим MTU канала связи между любым из участвующих маршрутизаторов. Если вы не контролируете весь путь и не устанавливаете большие MTU для каждого канала, увеличение MTU только на вашем компьютере ничего не делает (кроме, возможно, повышения скорости вашей локальной сети).

Я узнал, как это сделать, основываясь на комментарии Стефана Зайделя. Оказывается, есть другая настройка MTU, что ip команда не показывает Установка более высокого значения в /proc/sys/net/ipv6/conf/eth0/mtu (команда sudo sh -c "echo 0 > /proc/sys/net/ipv6/conf/eth0/mtu" сделал то, что хотел. (Не то чтобы это очень помогло, маршрутизатор действительно сбрасывал большие кадры.) Это значение регулярно обновляется / сбрасывается через объявление маршрутизатора. RA можно отключить, написав 0 в accept_ra в той же папке под /proc,

Другие вопросы по тегам