Изменения MTU влияют на оба направления? - PullRequest
12 голосов
/ 15 июня 2011

ifconfig 1.2.3.4 mtu 1492

Это установит MTU на 1492 для входящих, исходящих пакетов или обоих?Я думаю, что это только для входящих

Ответы [ 5 ]

16 голосов
/ 15 июня 2011

TLDR: Оба.Он будет передавать только пакеты с длиной полезной нагрузки, меньшей или равной этому размеру.Аналогично, он будет принимать только пакеты с длиной полезной нагрузки в вашем MTU.Если устройство отправляет более крупный пакет, оно должно ответить сообщением ICMP о недоступности (негабаритном).

Тщательно: Настройка MTU для вашего устройства полезна, потому что другие переходы между вами ипункт назначения может инкапсулировать ваш пакет в другую форму (например, VPN или PPPoE). Этот слой вокруг вашего пакета приводит к тому, что по сети передается более крупный пакет.Если этот новый, более крупный пакет превышает максимальный размер слоя, тогда пакет будет разбит на несколько пакетов (в идеальном мире) или будет отброшен полностью (в реальном мире).

На практикеНапример, рассмотрите возможность подключения компьютера через Ethernet к модему ADSL, который говорит PPPoE с провайдером.Ethernet допускает полезную нагрузку 1500 байт, из которых 8 байтов будут использоваться PPPoE.Теперь у нас осталось 1492 байта, которые могут быть доставлены в один пакет вашему провайдеру.Если вы отправите полноразмерную полезную нагрузку Ethernet в 1500 байт, она будет «фрагментирована» вашим маршрутизатором и разделена на два пакета (один с полезной нагрузкой 1492 байта, другой с полезной нагрузкой 8 байтов).

Проблема возникает, когда вы хотите отправить больше данных по этому соединению - допустим, вы хотели отправить 3000 байтов: ваш компьютер разделил бы это на основе вашего MTU - в этом случае два пакета по 1500 байтов каждый, и отправил бы ихк вашему модему ADSL, который затем разделил бы их так, чтобы он мог выполнить свой MTU.Теперь ваши 3000-байтовые данные были разбиты на четыре пакета: два с полезной нагрузкой 1492 байта и два с полезной нагрузкой 8 байтов.Это, очевидно, неэффективно, нам действительно нужно всего три пакета для отправки этих данных.Если бы ваш компьютер был настроен с правильным MTU для сети, он отправил бы это как три пакета в первую очередь (два пакета 1492 байта и один пакет 16 байтов.)

Чтобы избежать этой неэффективности, многие IPстеки немного переворачиваются в заголовке IP, который называется «Не фрагментировать».В этом случае мы отправили бы наш первый 1500-байтовый пакет на модем ADSL, и он отклонил бы пакет, ответив сообщением Internet Control (ICMP), информирующим нас о том, что наш пакет слишком велик.Затем мы повторили бы передачу с меньшим пакетом.Это называется обнаружением Path MTU.Аналогичным образом, на уровне ниже, на уровне TCP, еще одним фактором, позволяющим избежать фрагментации, является параметр MSS (максимальный размер сегмента), когда оба хоста отвечают пакетом максимального размера, который они могут передать без фрагментации.Обычно это вычисляется из MTU.

Проблема здесь возникает, когда неправильно настроенные брандмауэры отбрасывают весь трафик ICMP.Когда вы подключаетесь к (скажем) веб-серверу, вы создаете сеанс TCP и отправляете, что вы готовы принимать пакеты TCP на основе вашего 1500-байтового MTU (поскольку вы подключены через Ethernet к маршрутизатору.)Сервер хотел отправить вам много данных, он разделил бы их на куски, которые (в сочетании с заголовками TCP и IP) выходили до 1500 байт полезной нагрузки и отправляли их вам.Ваш провайдер получит один из них, а затем попытается обернуть его в пакет PPPoE для отправки на модем ADSL, но он будет слишком большим для отправки.Таким образом, он ответил бы с недоступным ICMP, что (в идеальном мире) заставило бы удаленный компьютер уменьшить свою MSS для соединения и повторить передачу.Однако, если на этом пути был сломан брандмауэр, то это ICMP-сообщение никогда не будет достигнуто сторонним веб-сервером, и этот пакет никогда не попадет к вам.

В конечном счете, желательно настроить MTU на устройстве Ethernet.чтобы отправить кадры правильного размера на модем ADSL (чтобы он не требовал повторной передачи с меньшим кадром), но очень важно влиять на размер MSS, отправляемый на удаленные хосты, при создании соединений TCP.

10 голосов
/ 15 июня 2011

ifconfig ... mtu <value> устанавливает MTU для полезных нагрузок уровня 2, отправляемых интерфейсом, и отклоняет большие полезные нагрузки уровня 2, полученные на этом интерфейсе. Вы должны обеспечить соответствие MTU по обе стороны канала Ethernet; вы не должны иметь несовпадающие значения mtu в любом месте того же домена вещания Ethernet . Обратите внимание, что заголовки Ethernet не включены в MTU, который вы устанавливаете.

Кроме того, ifconfig не поддерживается в linux для возраста и является старым и устаревшим ; К сожалению, дистрибутивы Linux все еще включают его, потому что они боятся ломать старые скрипты. Это очень негативно влияет на то, чтобы люди продолжали его использовать. Вы должны использовать семейство команд iproute2:

[mpenning@hotcoffee ~]$ sudo ip link set mtu 1492 eth0
[mpenning@hotcoffee ~]$ ip link show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1492 qdisc mq state UP qlen 1000
    link/ether 00:1e:c9:cd:46:c8 brd ff:ff:ff:ff:ff:ff
[mpenning@hotcoffee ~]$ 
2 голосов
/ 19 января 2014

Большие входящие пакеты могут быть отброшены в зависимости от размера MTU интерфейса.

Например, MTU 1500 по умолчанию включен Linux 2.6 CentOS (протестировано с контроллером Ethernet: Intel Corporation, 80003ES2LAN Gigabit Ethernet Controller (Copper) (версия 01)) отбрасывает Jumbo пакеты> 1504. Ошибки появляются в ifconfig, и в выводе ethtool -S для этого есть указания на rx_long_length_errors. Увеличение MTU указывает на необходимость поддержки Jumbo-пакетов. Порог для того, когда отбрасывать пакеты в зависимости от их слишком большого размера, зависит от MTU (-4096, -8192 и т. Д.)

Oren

0 голосов
/ 06 июня 2018

Нет сомнений в том, что MTU, настроенный ifconfig, влияет на фрагментацию Tx ip, у меня больше нет комментариев.

Но для направления Rx я нахожу, влияет ли параметр на входящие IP-пакеты, это зависит.Разные производители ведут себя по-разному.Я протестировал все устройства под рукой и обнаружил 3 случая ниже.

Тестовый случай:

Device0 eth0 (192.168.225.1, mtu 2000) <- ETH кабель -> Device1eth0 (192.168.225.34, mtu MTU_SIZE)

On Device0 ping 192.168.225.34 -s ICMP_SIZE, Проверка того, как MTU_SIZE влияет на Rx устройства 1.

, случай 1 :

Device1 = Linux 4.4.0 с Intel I218-LM:

Когда MTU_SIZE = 1500, ping завершается успешно при ICMP_SIZE = 1476, происходит сбой при ICMP_SIZE = 1477 и выше.Кажется, что существует ПРАКТИЧЕСКИЙ MTU = 1504 (20B (заголовок IP) + 8B (заголовок ICMP) + 1476B (данные ICMP)).

Когда MTU_SIZE = 1490, ping успешно выполняется при ICMP_SIZE = 1476, завершается неудачно приICMP_SIZE = 1477 и выше, ведут себя так же, как MTU_SIZE = 1500.

Когда MTU_SIZE = 1501, ping завершается успешно при ICMP_SIZE = 1476, 1478, 1600, 1900. Кажется, что гигантский кадр включается после установки MTU_SIZE> 1500 и больше нет ограничений 1504.

case 2 :

Device1 = Linux 3.18.31 с Qualcomm Atheros AR8151 v2.0 Gigabit Ethernet:

Когда MTU_SIZE = 1500, проверка связи выполняется успешно при ICMP_SIZE = 1476, происходит сбой при ICMP_SIZE = 1477 и выше.

Когда MTU_SIZE = 1490, ping завершается успешно при ICMP_SIZE = 1466, завершается неудачей при ICMP_SIZE = 1467 и выше.

Когда MTU_SIZE = 1501, ping завершается успешно при ICMP_SIZE = 1477, завершается ошибкой при ICMP_SIZE = 1478 и выше.

Когда MTU_SIZE = 500, проверка связи выполняется успешно при ICMP_SIZE = 476, происходит сбой при ICMP_SIZE = 477 и выше.

Когда MTU_SIZE = 1900, ping завершается успешно при ICMP_SIZE = 1876, завершается неудачей при ICMP_SIZE = 1877 и выше.

Этот случай ведет себя точно так, как сказал Эдвард Томсон, за исключением того, что в моем тесте ПРАКТИЧЕСКИЙ MTU = MTU_SIZE + 4.

случай 3 :

Device1= Linux 4.4.50 с Raspberry Pi 2, модуль B ETH:

Когда MTU_SIZE = 1500, ping завершается успешно при ICMP_SIZE = 1472, завершается неудачей при ICMP_SIZE = 1473 и выше.Таким образом, там работает PRACTICAL MTU = 1500 (20B (заголовок IP) + 8B (заголовок ICMP) + 1472B (данные ICMP)).

Когда MTU_SIZE = 1490, ведите себя так же, как MTU_SIZE = 1500.

Когда MTU_SIZE = 1501, вести себя так же, как MTU_SIZE = 1500.

Когда MTU_SIZE = 2000, вести себя так же, как MTU_SIZE = 1500.

Когда MTU_SIZE = 500, вести себя кактоже самое, что MTU_SIZE = 1500.

Этот случай ведет себя точно так, как сказал Рон Мопин в Почему конфигурация MTU не влияет на направление приема? .

Суммируя все этов реальной жизни после установки ifconfig mtu

иногда пакеты Rx IP сбрасываются, когда превышают 1504, независимо от того, какое значение MTU вы установили (за исключением того, что включен Jumbo-кадр).

иногда пакеты Rx IP сбрасываются при превышении MTU + 4, установленного на приемном устройстве.

иногда пакеты Rx IP отбрасываются при превышении1500, независимо от того, какое значение MTU вы установили.

... ...

0 голосов
/ 15 июня 2011

Это максимальная единица передачи, поэтому она определенно устанавливает максимальный размер исходящего пакета. Я не уверен, отклонит ли входящие пакеты больше MTU.

...