ifconfig 1.2.3.4 mtu 1492
Это установит MTU в 1492 для входящих, исходящих пакетов или обоих? Я думаю, что это только для входящих
ifconfig 1.2.3.4 mtu 1492
Это установит MTU в 1492 для входящих, исходящих пакетов или обоих? Я думаю, что это только для входящих
TL;DR: Оба. Он будет передавать только пакеты с длиной полезной нагрузки, меньшей или равной этому размеру. Точно так же он будет принимать пакеты с длиной полезной нагрузки в вашем MTU. Если устройство отправляет более крупный пакет, оно должно ответить сообщением ICMP unreachable (негабаритного).
Ядро: Настройка 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, называемом "Do not Fragment". В этом случае мы отправили бы наш первый пакет в 1500 байт на ADSL-модем, и он отклонил бы пакет, ответив сообщением об управлении Интернетом (ICMP), сообщив нам, что наш пакет слишком велик. Затем мы повторили передачу с меньшим пакетом. Это называется обнаружением пути MTU. Аналогичным образом, слой ниже, на уровне TCP, еще одним фактором во избежание фрагментации является параметр MSS (Максимальный размер сегмента), где оба узла отвечают с пакетом максимального размера, который они могут передавать без фрагментации. Это обычно вычисляется из MTU.
Проблема здесь возникает, когда неправильно сконфигурированные брандмауэры удаляют весь ICMP-трафик. Когда вы подключаетесь к (скажем) веб-серверу, вы создаете сеанс TCP и отправляете то, что вы готовы принимать TCP-пакеты на основе вашего 1500-байтового MTU (поскольку вы подключены через ethernet к вашему маршрутизатору.) Если внешняя сеть сервер хотел отправить вам много данных, они разделили бы это на куски, которые (в сочетании с заголовками TCP и IP) выходили на 1500 байтов и отправляли их вам. Ваш интернет-провайдер получит один из них, а затем попытается связать его с PPPoE-пакетом для отправки на ваш ADSL-модем, но он будет слишком большим для отправки. Таким образом, он ответил бы с недостижимым ICMP, который (в идеальном мире) заставляет удаленный компьютер уменьшать свою MSS для соединения и повторной передачи. Однако, если на пути был разбитый брандмауэр, это сообщение ICMP никогда не будет достигнуто внешним веб-сервером, и этот пакет никогда не сделает его вам.
В конечном счете, установка MTU на вашем устройстве Ethernet желательно отправить правильные размерные кадры на ваш ADSL-модем (чтобы избежать запроса о повторной передаче с меньшим фреймом), но это имеет решающее значение для влияния размера MSS, отправляемого на удаленные хосты при создании TCP-соединений.
ifconfig ... mtu <value>
устанавливает MTU для полезных нагрузок layer2, отправленных из интерфейса, и отклонит большие полезные нагрузки уровня 2, полученные на этом интерфейсе. Вы должны обеспечить соответствие MTU по обе стороны от линии Ethernet; вы не должны иметь несогласованные значения mtu в любом месте в широковещательном домене ethernet. Обратите внимание, что заголовки ethernet не включены в настройку MTU, которую вы устанавливаете.
Кроме того, ifconfig
не поддерживался в linux для возрастов и старый и устаревший; к сожалению, дистрибутивы Linux по-прежнему включают его, потому что они боятся сломать старые сценарии. Это имеет очень негативный эффект, побуждающий людей продолжать его использовать. Вы должны использовать семейство команд iproute2
:
[[email protected] ~]$ sudo ip link set mtu 1492 eth0
[[email protected] ~]$ 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
[[email protected] ~]$
Большие входящие пакеты могут быть сброшены на основе размера MTU интерфейса.
Например, MTU 1500 по умолчанию Linux 2.6 CentOS (протестирован с контроллером Ethernet: Intel Corporation 80003ES2LAN Gigabit Ethernet Controller (Copper) (rev 01)) падает пакеты Jumbo > 1504. Ошибки появляются в ifconfig, и для этого в представлении ethtool -S есть указания rx_long_length_errors. Увеличение MTU указывает на поддержку пакетов Jumbo. Порог для того, чтобы сбросить пакеты на основе их большого размера, зависит от MTU (-4096, -8192 и т.д.).
Орен
Это модуль максимальной передачи, поэтому он определенно устанавливает исходящий максимальный размер пакета. Я не уверен, что отклонит входящие пакеты, превышающие MTU.