1

У меня есть гигабитное соединение Ethernet от моего ноутбука до маршрутизатора и работающее соединение IPv6 с Интернетом. Я могу получать очень большие пакеты с сайтов в Интернете размером не менее 10000 байт (согласно wireshark). (edit: оказывается 'linux' offload receive '). Однако, при попытке отправить что-либо, мой локальный компьютер фрагментируется чуть ниже 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 mtu действительно установлены. ip -6 route показывает, что ни один из путей, о которых знает ядро, не имеет установленного mtu. Я могу пропинговать ipv4 с пакетами до 6128 байт (хотя я не получаю ответы), но когда я делаю ping6 myrouter -c3 -s1500 -Mdo я получаю сообщения об ошибках от моего собственного компьютера, говорящие, что пакеты слишком велики и что мту 1480. Я подтвердил в Wireshark, что ничего не передано, и ответы действительно генерируются моим собственным компьютером.

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

3 ответа3

2

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

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

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

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

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

1

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

1

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

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