Обзор
Maximum Transmission Unit (MTU) – это максимальный размер пакета, который мы можем отправить по сети без фрагментации.
По умолчанию размер MTU для Ethernet составляет 1500 байт.
Иногда мы можем захотеть изменить размер MTU. Например, мы можем использовать джамбо-кадры с размером MTU 9000 байт в виртуальной локальной сети (VLAN), чтобы увеличить производительность.
В этом руководстве мы рассмотрим, как установить постоянный размер MTU сетевого интерфейса.
Мы увидим, что изменение размера MTU зависит от того, используем ли мы статическую или динамическую IP-адресацию.
Изменение размера MTU с помощью ip
Мы можем изменить размер MTU сетевого интерфейса с помощью команды ip.
Сначала проверим размер MTU используемых сетевых интерфейсов:
Команда ip a показывает IP-адреса всех сетевых интерфейсов.
Мы фильтруем вывод с помощью grep mtu, чтобы показать только строки, содержащие размеры MTU.
Наш хост содержит два сетевых интерфейса. Первый – это интерфейс loopback, lo, размер MTU которого составляет 65536 байт.
С другой стороны, второй интерфейс, enp0s3, имеет MTU размером 1500 байт.
Давайте увеличим размер MTU интерфейса enp0s3 до 9000 с помощью команды ip:
Изменение размера MTU требует привилегий root, поэтому мы используем команду ip вместе с командой sudo.
Команда ip link set изменяет атрибуты сетевого устройства. Имя устройства – сетевой интерфейсной карты – указывается с помощью dev enp0s3.
Наконец, мы указываем новый размер MTU с помощью mtu 9000.
Давайте еще раз проверим размер MTU для enp0s3:
Как видно из вывода, нам удалось изменить размер MTU интерфейса enp0s3.
Мы также можем изменить размер MTU с помощью старой команды ifconfig на Linux:
Хотя изменить размер MTU с помощью ip link set или ifconfig очень просто, мы теряем обновления при перезагрузке хоста.
Поэтому в нашем случае после перезагрузки размер MTU сохраняет значение по умолчанию 1500 для интерфейса enp0s3.
Изменение размера MTU на постоянной основе
Что делать, если мы хотим изменить размер MTU на постоянной основе?
Решение зависит от того, используем ли мы статическую или динамическую IP-адресацию.
Статическая IP-адресация
Когда мы назначаем хосту статический IP-адрес, он не меняется со временем, если мы не изменим его явно.
Мы можем настроить атрибуты сетевого интерфейса, отредактировав соответствующий файл конфигурации интерфейса (ifcfg).
На нашем хосте файл ifcfg для интерфейса enp0s3 находится в каталоге /etc/sysconfig/network-scripts/ifcfg-enp0s3.
Каталог, содержащий файлы ifcfg, может отличаться в разных дистрибутивах Linux.
Например, в RHEL это каталог /etc/sysconfig/network-scripts, а в Ubuntu – /etc/network/interfaces.
Давайте проверим, содержит ли каталог /etc/sysconfig/network-scripts/ifcfg-enp0s3 запись MTU, используя grep:
Примечательно, что в нем нет записи о MTU.
Поэтому интерфейс enp0s3 использует стандартный размер MTU, равный 1500.
Давайте изменим размер MTU этого интерфейса на 9000, добавив MTU=9000 в конец файла ifcfg с помощью редактора типа vi.
Теперь размер MTU установлен на 9000:
Давайте проверим размер MTU после перезагрузки хоста:
Как видно из вывода, после перезагрузки размер MTU интерфейса enp0s3 составляет 9000.
Таким образом, мы успешно установили постоянный размер MTU интерфейса.
Динамическая IP-адресация
Динамический IP-адрес назначается хосту, когда он присоединяется к сети. Хост получает свою динамическую IP-конфигурацию с сервера. DHCP (Dynamic Host Configuration Protocol) – наиболее распространенный протокол, используемый для динамического назначения IP-адресов хостам в сети.
DHCP-клиент запрашивает динамический IP-адрес и другие параметры конфигурации, такие как размер MTU, у DHCP-сервера. dhclient – это DHCP-клиент по умолчанию. Он считывает информацию о конфигурации из файла /etc/dhcp/dhclient.conf.
Мы можем переопределить размер MTU, предоставляемый DHCP-сервером, добавив одно единственное утверждение в файл /etc/dhcp/dhclient.conf:
interface "enp0s3" {
supersede interface-mtu 9000;
}
Оператор supersede interface-mtu 9000 отменяет размер MTU, предоставленный DHCP-сервером, и устанавливает его равным 9000.
Мы используем оператор supersede, если хотим, чтобы клиент использовал локально настроенное значение, а не то, которое предоставил сервер.
Утверждение interface «enp0s3», с другой стороны, указывает, что эта конфигурация предназначена только для интерфейса enp0s3.
Изменив файл /etc/dhcp/dhclient.conf, мы можем сразу же применить изменение размера MTU для enp0s3 с помощью dhclient:
Мы должны запускать dhclient автоматически при перезагрузке, чтобы сделать изменения постоянными.
Поэтому одним из способов сделать изменения постоянными является добавление команды dhclient enp0s3 в /etc/rc.d/rc.local с помощью редактора типа vi.
Для изменения /etc/rc.d/rc.local требуются привилегии root.
Затем мы должны дать разрешение на выполнение /etc/rc.d/rc.local с помощью chmod и включить службу rc-local с помощью systemctl:
После внесения этих изменений dhclient автоматически запускается при перезагрузке хоста и применяет размер MTU, указанный в файле /etc/dhcp/dhclient.conf.
Заключение
В этой статье мы рассмотрели, как установить постоянный размер MTU сетевого интерфейса.
Сначала мы увидели, что изменение размера MTU сетевого интерфейса с помощью команды ip не является постоянным.
Затем мы узнали, что можно использовать файлы ifcfg для обновления размера MTU в случае статической IP-адресации.
С другой стороны, мы должны обновить файл dhclient.conf, если мы используем DHCP для назначения динамических IP-адресов.
Кроме того, мы должны запустить dhclient при запуске хоста, чтобы применить изменения в dhclient.conf.
см. также:
- 🐧 Как настроить сеть с помощью инструмента «nmtui»
- 🖧 Как определить статический IP-адрес с помощью netplan
- 🐧 Как назначить IP-адрес удаленным Linux-системам через SSH
- 🖧 Руководство по использованию ifconfig в сравнении с командой ip на Linux
- 🖧 Как отфильтровать конкретный IP-адрес
- 🖧 Как пинговать адреса IPv6
- 🖧 Linux: Создание виртуального сетевого интерфейса