Значение MTU в Linux


MTU — maximum transmission unit — максимальный размер пакета или фрейма в байтах, который может быть отправлен единовременно без фрагментации. Узнать значение и поменять MTU в Linux можно используя утилиту ip. Чтобы изменения сохранялись после перезагрузки требуется продублировать новое значение в сетевых настройках.



Как узнать значение и поменять MTU в Linux


Узнать значение MTU для всех интерфейсов можно выполнив в консоли команду ip link

ip link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 54:52:00:91:96:85 brd ff:ff:ff:ff:ff:ff



Чаще всего встречается 1500 — это значение по умолчанию для Ethernet интерфейсов.



Поменять MTU на сервере с Debian можно так:

ip link set dev eth0 mtu 1400



На скриншоте показан процесс смены mtu:

Значение MTU в Linux


Новое значение выделено, это 1400, оно начнет использоваться для интерфейса сразу. После перезагрузки эти изменения не сохранятся.



Чтобы сделать изменения постоянными нужно отредактировать файл /etc/network/interfaces

Для CentOS это скрипты /etc/sysconfig/network-scripts/*, для других систем иначе — для Debian также возможны варианты, но чаще всего это /etc/network/interfaces



К нужному интерфейсу достаточно дописать mtu 1400 отдельной строкой


Затем выполнить

ifdown $IFACE && ifup $IFACE

IFACE при этом заменить именем интерфейса, таким как eth0



Если настройки сети выдаются DHCP, то секция примет такой вид:

iface eth0 inet dhcp
pre-up /sbin/ifconfig $IFACE mtu 1454



Как проверить MTU для внешнего сервера


Для сервера, к которому нет доступа по SSH MTU можно узнать экспериментальным путем. Значение может потребоваться при поиске сетевых неполадок.



Это делается за счет опции -M do утилиты ping.


ICMP пакеты при этом будут отправляться с заданным MTU, из ответа будет видно реальное значение.

ping -c 1 -s $((1600-28)) -M do ya.ru

PING ya.ru (87.250.250.242) 1572(1600) bytes of data.
ping: local error: Message too long, mtu=1500

— ya.ru ping statistics —
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms



28 байт вычитается, поскольку они отданы под заголовки IP и ICMP.



При установке 1500 байт PING проходит успешно.

ping -c 1 -s $((1500-28)) -M do ya.ru

PING ya.ru (87.250.250.242) 1472(1500) bytes of data.
1480 bytes from ya.ru (87.250.250.242): icmp_seq=1 ttl=57 time=32.0 ms

— ya.ru ping statistics —
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 32.040/32.040/32.040/0.000 ms



Читайте про iface inet — директиву, которую можно увидеть в /etc/network/interfaces

Сказать спасибо