- Blog
- What is MTU in Linux?
- Why MTU size is must in Linux?
- How to set MTU size in Linux with ficonfig command?
- How to set MTU with ip command?
- That’s all, in this tutorial we have seen how to set MTU in Linux.
- Please Share This Share this content
- Смена MTU
- Windows
- Командная строка
- Реестр
- Linux
- Разово
- Постоянно (permanently)
- Роутер
- Читайте также
- Значение MTU в Linux
- Как узнать значение и поменять MTU в Linux
- Как проверить MTU для внешнего сервера
Blog
Dear Friends in this tutorial we will how to set MTU size in Linux and we will also know what is MTU and why it MTU size is must for Linux? So, let’s start and see steps by steps this process.
What is MTU in Linux?
MTU stand for (Maximum Transmission Unit) it’s a size of largest protocol data unit that can communicated in single network layer transaction. MTU depends on underlying network capabilities and must be adjusted manually or automatically to not exceed these capabilities.
For more details about MTU you can Click Here
Why MTU size is must in Linux?
Large packets occupy a slow link for more time than a smaller packet, causing greater delays to subsequent packets, and increasing network delay and delay variation. For example, a 1500-byte packet, the largest allowed by Ethernet at the network layer, ties up a 14.4k modem for about one second.
How to set MTU size in Linux with ficonfig command?
We can set MTU using ifconfig command or ip command. If we don’t have ifconfig command and our Linux is base Operating System, then we can us ip command. Like below: –
First of we can check current MTU size with ifconfig commands.
[cloud-user@deploy-vm ~]$ sudo ifconfig -a docker0: flags=4099 mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:b8:9a:bd:62 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0: flags=4163 mtu 1600 inet 10.10.10.13 netmask 255.255.255.0 broadcast 10.10.10.255 inet6 fe80::f816:3eff:fea1:7bd9 prefixlen 64 scopeid 0x20 ether fa:16:3e:a1:7b:d9 txqueuelen 1000 (Ethernet) RX packets 2 bytes 456 (456.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 20 bytes 2308 (2.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth1: flags=4163 mtu 1600 inet 10.166.58.16 netmask 255.255.255.0 broadcast 10.166.58.255 inet6 fe80::f816:3eff:fe96:cd52 prefixlen 64 scopeid 0x20 ether fa:16:3e:96:cd:52 txqueuelen 1000 (Ethernet) RX packets 633 bytes 48331 (47.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 568 bytes 59074 (57.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73 mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10 loop txqueuelen 1000 (Local Loopback) RX packets 912 bytes 75951 (74.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 912 bytes 75951 (74.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [cloud-user@deploy-vm ~]$
In above output you can see MTU size is 1600 on eth0 and eth1 interface. Now we need to set 1500 MTU on eth0 and eth1. So, we can use below commands.
[cloud-user@deploy-vm ~]$ sudo ifconfig eth0 mtu 1500 [cloud-user@deploy-vm ~]$ sudo ifconfig eth1 mtu 1500
Now we can verify with ifconfig command our changes is completed or not?
You can see in above output we have successfully changed MTU size of eth0 and eth1 from 1600 to 1500 MTU.
How to set MTU with ip command?
If don’t have ifconfig tools, then we can use ip command to change MTU size like below.
First, we can verify current MTU size with IP command.
[cloud-user@deploy-vm ~]$ ip a 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether fa:16:3e:a1:7b:d9 brd ff:ff:ff:ff:ff:ff inet 10.10.10.13/24 brd 10.10.10.255 scope global dynamic eth0 valid_lft 84910sec preferred_lft 84910sec inet6 fe80::f816:3eff:fea1:7bd9/64 scope link valid_lft forever preferred_lft forever 3: eth1: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether fa:16:3e:96:cd:52 brd ff:ff:ff:ff:ff:ff inet 10.166.58.16/24 brd 10.166.58.255 scope global dynamic eth1 valid_lft 84973sec preferred_lft 84973sec inet6 fe80::f816:3eff:fe96:cd52/64 scope link valid_lft forever preferred_lft forever 4: docker0: mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:b8:9a:bd:62 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever [cloud-user@deploy-vm ~]$
You can see in above output we have 1500 MTU in eth0 and eth1 interface.
Now I am going to change is from 1500 MTU to 1600 MTU with ip command like below: –
[cloud-user@deploy-vm ~]$ [cloud-user@deploy-vm ~]$ sudo ip link set mtu 1600 eth0 [cloud-user@deploy-vm ~]$ sudo ip link set mtu 1600 eth1 [cloud-user@deploy-vm ~]$
Now we can verify our MTU size is changed or not with ip a command like below: –
You can see in above output we have successfully changed MTU size with ip command.
Now verify the MTU packet size with ping commands.
[root@urcloud ~]# ping -M do -s 8980 10.167.30.3 PING 10.167.30.3 (10.167.30.3) 8980(9008) bytes of data. ping: local error: Message too long, mtu=9000 ping: local error: Message too long, mtu=9000 ping: local error: Message too long, mtu=9000 ^C --- 10.167.30.3 ping statistics --- 3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 1999ms [root@urcloud ~]# ping -M do -s 8960 10.167.30.3 PING 10.167.30.3 (10.167.30.3) 8960(8988) bytes of data. 8968 bytes from 10.167.30.3: icmp_seq=1 ttl=64 time=0.259 ms 8968 bytes from 10.167.30.3: icmp_seq=2 ttl=64 time=0.269 ms 8968 bytes from 10.167.30.3: icmp_seq=3 ttl=64 time=0.209 ms ^C --- 10.167.30.3 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.209/0.245/0.269/0.031 ms [root@urcloud ~]#
That’s all, in this tutorial we have seen how to set MTU in Linux.
Please Share This Share this content
- Opens in a new window Twitter
- Opens in a new window Facebook
- Opens in a new window Google+
- Opens in a new window Pinterest
- Opens in a new window LinkedIn
- Opens in a new window Viber
- Opens in a new window VK
- Opens in a new window Reddit
- Opens in a new window Tumblr
- Opens in a new window Viadeo
- Opens in a new window WhatsApp
Смена MTU
Обновлено: 23.06.2019 Опубликовано: 25.10.2017
Рассмотрим процесс смены значения MTU для операционных систем семейства Windows и Linux, а также роутерах.
Windows
Командная строка
Открываем командную строку от имени администратора.
Вводим команду для просмотра текущего значения MTU и названия сетевого интерфейса:
netsh interface ipv4 show subinterfaces
Получаем, примерно, следующее:
MTU Состояние определения носителя Вх. байт Исх. байт Интерфейс
—— ————— ——— ——— ————-
1500 1 81324794839 5376993884 Ethernet
* где 1500 — значение MTU (по умолчанию для сетей Etnernet); Ethernet — название интерфейса.
Меняем MTU следующей командой:
netsh interface ipv4 set subinterface «Ethernet» mtu=1492 store=persistent
* где Ethernet — название сетевого интерфейса, которое мы получили предыдущей командой; 1492 — новое значение MTU
Реестр
Открываем реестр (команда regedit) и переходим по ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\.
Внутри будут находиться другие ветки с названиями 0000, 0001, 0002 и так далее. Необходимо пройтись по каждой и найти ключ DriverDesc со значением, похожим на название нашего сетевого адаптера и записать значение ключа NetCfgInstanceId, например:
Переходим в ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces. Находим ветку с нашим идентификатором, который мы записали и меняем ключ MTU (при его отсутствии, создаем — тип DWORD):
Чтобы настройки применились выключаем и снова включаем сетевой интерфейс или перезагружаем компьютер.
Linux
Для примера, рассмотрим наиболее популярные дистрибутивы — CentOS и Ubuntu.
Разово
Разово (до перезагрузки) для данных двух систем настройку можно выполнить одной командой:
ip link set mtu 1400 dev eth0
* где 1400 — новое значение MTU; eth0 — сетевой интерфейс, для которого поменяли максимальный размер пакетов.
Постоянно (permanently)
Для систем на базе Debian (Ubuntu) и Red Hat (CentOS) процедура немного отличается.
Открываем настройку сетевых интерфейсов:
К нужному адаптеру добавляем строчку:
iface eth0 inet static
.
mtu 9000
systemctl restart networking
Открываем конфигурационный файл для соответствующего сетевого интерфейса:
Перезапускаем сетевую службу:
systemctl restart network
Роутер
Смена MTU на роутерах различных производителей выполняется, примерно, по одному и тому же принципу — зайти на веб-интерфейс для настройки маршрутизатора, найти раздел с настройкой сети Интернет, задать значение MTU.
Например, для большинства устройств TP-Link: Network — WAN:
Читайте также
Инструкция по смене значения MTU на Windows и Linux
Значение MTU в Linux
MTU — maximum transmission unit — максимальный размер пакета или фрейма в байтах, который может быть отправлен единовременно без фрагментации. Узнать значение и поменять MTU в Linux можно используя утилиту ip. Чтобы изменения сохранялись после перезагрузки требуется продублировать новое значение в сетевых настройках.
Как узнать значение и поменять MTU в Linux
Узнать значение MTU для всех интерфейсов можно выполнив в консоли команду ip link
1: lo: 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: 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:
Новое значение выделено, это 1400, оно начнет использоваться для интерфейса сразу. После перезагрузки эти изменения не сохранятся.
Чтобы сделать изменения постоянными нужно отредактировать файл /etc/network/interfaces
Для CentOS это скрипты /etc/sysconfig/network-scripts/*, для других систем иначе — для Debian также возможны варианты, но чаще всего это /etc/network/interfaces
К нужному интерфейсу достаточно дописать mtu 1400 отдельной строкой
IFACE при этом заменить именем интерфейса, таким как eth0
Если настройки сети выдаются DHCP, то секция примет такой вид:
iface eth0 inet dhcp
pre-up /sbin/ifconfig $IFACE mtu 1454
Как проверить MTU для внешнего сервера
Для сервера, к которому нет доступа по SSH MTU можно узнать экспериментальным путем. Значение может потребоваться при поиске сетевых неполадок.
Это делается за счет опции -M do утилиты ping.
ICMP пакеты при этом будут отправляться с заданным MTU, из ответа будет видно реальное значение.
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 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