Как узнать mtu linux

Обновлено: 30.06.2024

В компьютерных сетях термин MTU (Maximum transmission unit, максимальная единица передачи) означает максимальный размер одного пакета, который может быть передан протоколом без фрагментации. Пакеты большего размера (чем размер MTU), будут разбиваться на более мелкие и передаваться за несколько раз - этот процесс называется фрагментация. При большом количестве фрагментированных пакетов может снижаться скорость передачи данных по сети, а в некоторых системах, может запрещаться передача фрагментированных пакетов, в результате чего сетевая связность между системами может нарушиться. Особенно часто такое поведение может наблюдаться при дополнительном шифровании трафика, например, при построении крипто-туннелей.
Любое устройство которое взаимодействует по сети имеет по умолчанию установленное производителем значение MTU. При этом, для каждой сетевой топологии может быть установлено свое значение размера MTU.
В таблице ниже приведены размеры MTU по умолчанию для различных сетевых сред:

Как изменить MTU в Linux?

Чтобы определить текущие значения MTU, которое установлено на сетевом интерфейсе Linux, необходимо выполить команду:
Результат выполнения команды показан на рисунке ниже. Там же можно увидеть, что для интерфейса eth0 установлено MTU 1500.
Для того, чтобы изменить MTU для текущего состояния интерфейса, необходимо выполнить команду (для сетевого интерфейса с именем eth0) После выполнения данной команды (возможно потребуется запуск из под su), значение MTU для интерфейса изменится (см скриншот ниже).
Чтобы новое значение MTU применялось при старте системы, и не требовалось устанавливать его вручную при каждом запуске, необходимо внести изменения в файл конфигурации сетевого интерфейса.
Для этого:
в CentOS:
в конфигурационном файле /etc/sysconfig/network-scripts/ifcfg-eth0: необходимо дописать строку:
и перезапустить сетевую службу, выполнив команду:
в Ubuntu:
в конфигурационном файле размещенном в папке /etc/netplan/ необходимо дописать строку:
Например, так как показано на скриншоте:
И перезапустить netplan, выполнив команду:

После выполненных команд, установленное значение MTU на интерфейсах будет установлено по умолчанию.

Существуют Linux-команды, которые всегда должны быть под рукой у системного администратора. Эта статья посвящена 7 утилитам, предназначенным для работы с сетью.

Этот материал — первый в серии статей, построенных на рекомендациях, собранных от множества знатоков Linux. А именно, я спросил у наших основных разработчиков об их любимых Linux-командах, после чего меня буквально завалили ценными сведениями. А именно, речь идёт о 46 командах, некоторые из которых отличает тот факт, что о них рассказало несколько человек.


В данной серии статей будут представлены все эти команды, разбитые по категориям. Первые 7 команд, которым и посвящена эта статья, направлены на работу с сетью.

Команда ip

Команда ip — это один из стандартных инструментов, который необходим любому системному администратору для решения его повседневных задач — от настройки новых компьютеров и назначения им IP-адресов, до борьбы с сетевыми проблемами существующих систем. Команда ip может выводить сведения о сетевых адресах, позволяет управлять маршрутизацией трафика и, кроме того, способна давать данные о различных сетевых устройствах, интерфейсах и туннелях.

Синтаксис этой команды выглядит так:


Самое важное тут — это <OBJECT> (подкоманда). Здесь можно использовать, помимо некоторых других, следующие ключевые слова:

  • address — адрес протокола (IPv4 или IPv6) на устройстве.
  • tunnel — IP-туннель.
  • route — запись таблицы маршрутизации.
  • rule — правило в базе данных политики маршрутизации.
  • vrf — управление виртуальными устройствами маршрутизации и перенаправления трафика.
  • xfrm — управление IPSec-политикой.

Вывод IP-адресов, назначенных интерфейсу на сервере:


Назначение IP-адреса интерфейсу, например — enps03 :


Удаление IP-адреса из интерфейса:


Изменение статуса интерфейса, в данном случае — включение eth0 :


Изменение статуса интерфейса, в данном случае — выключение eth0 :


Изменение статуса интерфейса, в данном случае — изменение MTU eth0 :


Изменение статуса интерфейса, в данном случае — перевод eth0 в режим приёма всех сетевых пакетов:


Добавление маршрута, используемого по умолчанию (для всех адресов), через локальный шлюз 192.168.1.254, который доступен на устройстве eth0 :


Добавление маршрута к 192.168.1.0/24 через шлюз на 192.168.1.254:


Добавление маршрута к 192.168.1.0/24, который доступен на устройстве eth0 :


Удаление маршрута для 192.168.1.0/24, для доступа к которому используется шлюз 192.168.1.254:


Вывод маршрута к IP 10.10.1.4:

Команда ifconfig

Команда ifconfig до определённого времени представляла собой один из основных инструментов, используемых многими системными администраторами для настройки сетей и решения сетевых проблем. Теперь ей на замену пришла команда ip , о которой мы только что говорили. Но если вас, всё же, интересует эта команда, можете взглянуть на данный материал.

Команда mtr

MTR (Matt's traceroute) — это программа, работающая в режиме командной строки, представляющая собой инструмент для диагностики сетей и устранения сетевых неполадок. Эта команда совмещает в себе возможности ping и traceroute . Она, как traceroute , может выводить сведения о маршруте, по которому сетевые данные идут от одного компьютера к другому. Она выводит массу полезных сведений о каждом шаге маршрутизации, например — время ответа системы. Благодаря использованию команды mtr можно получить довольно подробные сведения о маршруте, можно обнаружить устройства, которые вызывают проблемы при прохождении данных по сети. Если, например, наблюдается рост времени ответа системы, или рост числа потерянных пакетов, это позволяет с уверенностью говорить о том, что где-то между исследуемыми системами возникла проблема с сетевым соединением.

Синтаксис команды выглядит так:


Рассмотрим несколько распространённых способов применения mtr .

Если вызвать эту команду, указав лишь имя или адрес хоста — она выведет сведения о каждом шаге маршрутизации. В частности — имена хостов, сведения о времени их ответа и о потерянных пакетах:


Вот — вариант использования mtr , когда вместо имён хостов выводятся их IP-адреса (речь идёт о ключе -g , благодаря которому вместо имён выводятся числовые IP-адреса):


А следующий вариант команды позволяет выводить и имена, и IP-адреса хостов:


А так можно получить отчёт, содержащий результаты работы mtr :


Вот — ещё один вариант получения такого отчёта:


Для того чтобы принудительно использовать TCP вместо ICMP — надо поступить так:


А вот так можно использовать UDP вместо ICMP:


Вот — вариант команды, где задаётся максимальное количество шагов маршрутизации:


Так можно настроить размер пакета:


Для вывода результатов работы mtr в формате CSV используется такая команда:


Вот — команда для вывода результатов работы mtr в формате XML:

Команда tcpdump

Утилита tcpdump предназначена для захвата и анализа пакетов.

Установить её можно так:


Прежде чем приступить к захвату пакетов, нужно узнать о том, какой интерфейс может использовать эта команда. В данном случае нужно будет применить команду sudo или иметь root-доступ к системе.


Если нужно захватить трафик с интерфейса eth0 — этот процесс можно запустить такой командой:


Или — такой, с указанием (через ключ -c ) количества пакетов, которые нужно захватить:

▍ Захват трафика, идущего к некоему хосту и от него

Можно отфильтровать трафик и захватить лишь тот, который приходит от определённого хоста. Например, чтобы захватить пакеты, идущие от системы с адресом 8.8.8.8 и уходящие к этой же системе, можно воспользоваться такой командой:


Для захвата трафика, идущего с хоста 8.8.8.8, используется такая команда:


Для захвата трафика, уходящего на хост 8.8.8.8, применяется такая команда:

▍ Захват трафика, идущего в некую сеть и из неё

Трафик можно захватывать и ориентируясь на конкретную сеть. Делается это так:


Ещё можно поступить так:


Можно, кроме того, фильтровать трафик на основе его источника или места, в которое он идёт.

Вот — пример захвата трафика, отфильтрованного по его источнику (то есть — по той сети, откуда он приходит):


Вот — захват трафика с фильтрацией по сети, в которую он направляется:

▍ Захват трафика, поступающего на некий порт и выходящего из некоего порта

Вот пример захвата трафика только для DNS-порта по умолчанию (53):


Захват трафика для заданного порта:


Захват трафика для всех портов кроме 80 и 25:

Команда netstat

Инструмент netstat используется для вывода сведений о сетевых соединениях и таблицах маршрутизации, данных о работе сетевых интерфейсов, о masquerade-соединениях, об элементах групп многоадресной рассылки. Эта утилита является, как и ifconfig , частью пакета net-tools . В новом пакете iproute2 для достижения тех же целей используется утилита ss .

Если в вашей системе netstat отсутствует, установить эту программу можно так:


Ей, в основном, пользуются, вызывая без параметров:


В более сложных случаях её вызывают с параметрами, что может выглядеть так:


Можно вызывать netstat и с несколькими параметрами, перечислив их друг за другом:


Для вывода сведений обо всех портах и соединениях, вне зависимости от их состояния и от используемого протокола, применяется такая конструкция:


Для вывода сведений обо всех TCP-портах применяется такой вариант команды:


Если нужны данные по UDP-портам — утилиту вызывают так:


Список портов любых протоколов, ожидающих соединений, можно вывести так:


Список TCP-портов, ожидающих соединений, выводится так:


Так выводят список UDP-портов, ожидающих соединений:


А так — список UNIX-портов, ожидающих соединений:


Вот — команда для вывода статистических сведений по всем портам вне зависимости от протокола:


Так выводятся статистические сведения по TCP-портам:


Для просмотра списка TCP-соединений с указанием PID/имён программ используется такая команда:


Для того чтобы найти процесс, который использует порт с заданным номером, можно поступить так:

Команда nslookup

Команда nslookup используется для интерактивного «общения» с серверами доменных имён, находящимися в интернете. Она применяется для выполнения DNS-запросов и получения сведений о доменных именах или IP-адресах, а так же — для получения любых других специальных DNS-записей.

Рассмотрим распространённые примеры использования этой команды.

Получение A-записи домена:


Просмотр NS-записей домена:


Выяснение сведений о MX-записях, в которых указаны имена серверов, ответственных за работу с электронной почтой:


Обнаружение всех доступных DNS-записей домена:


Проверка A-записи для выяснения IP-адресов домена — это распространённая практика, но иногда нужно проверить то, имеет ли IP-адрес отношение к некоему домену. Для этого нужно выполнить обратный просмотр DNS:

Команда ping

Эта команда, при простом способе её использования, принимает лишь один параметр: имя хоста, подключение к которому надо проверить, или его IP-адрес. Вот как это может выглядеть:


В данном случае работу команды ping можно остановить, воспользовавшись сочетанием клавиш CTRL+C . В противном случае она будет выполнять запросы до тех пор, пока её не остановят. После каждой ping-сессии выводятся сводные данные, содержащие следующие сведения:

  • Min — минимальное время, которое требуется на получение ответа от пингуемого хоста.
  • Avg — среднее время, которое требуется на получение ответа.
  • Max — максимальное время, которое требуется на получение ответа.

Обычно, если запустить команду ping в её простом виде, не передавая ей дополнительные параметры, Linux будет пинговать интересующий пользователя хост без ограничений по времени. Если нужно изначально ограничить количество ICMP-запросов, например — до 10, команду ping надо запустить так:


А для того чтобы увидеть лишь итоговый отчёт работы ping — можно воспользоваться ключом -q :


В системах с несколькими сетевыми интерфейсами можно задавать конкретный интерфейс, которым должна пользоваться команда ping . Например, есть компьютер, имеющий интерфейсы eth0 и eth1 . Если нужно, чтобы команда ping использовала бы интерфейс eth0 — надо запустить её так:


Или можно указать адрес интерфейса. В данном случае речь идёт об IP-адресе 10.233.201.45:


Применяя эту команду, можно указать и то, какую версию протокола IP использовать — v4 или v6:

▍ Destination Host Unreachable

Вероятной причиной получения такого ответа является отсутствие маршрута от локальной хост-системы к целевому хосту. Или, возможно, это удалённый маршрутизатор сообщает о том, что у него нет маршрута к целевому хосту.

▍ Request timed out

▍ Unknown host/Ping Request Could Not Find Host

Такой результат может указывать на то, что неправильно введено имя хоста, или хоста с таким именем в сети просто не существует.

О хорошем качестве связи между исследуемыми системами говорит уровень потери пакетов в 0%, а так же — низкое значение времени получения ответа. При этом в каждом конкретном случае время получения ответа варьируется, так как оно зависит от разных параметров сети. В частности — от того, какая среда передачи данных используется в конкретной сети (витая пара, оптоволокно, радиоволны).

Итоги

Надеемся, вам пригодятся команды и примеры их использования, о которых мы сегодня рассказали. А если они вам и правда пригодились — возможно, вам будет интересно почитать продолжение этого материала.


Информация в компьютерных сетях передается в виде небольших сформированных блоков данных (иначе говоря, пакетов). Каждый пакет помимо пересылаемой информации содержит еще и служебные данные, составляющие так называемый заголовок (header) пакета. Эти служебные данные нужны для определения целостности данных, используемой версии сетевых протоколов и т.д. При этом размер полезного блока данных ограничивается определенным количеством байт. Делается это для того, чтобы снизить вероятность потерь информации и уменьшить время повторной пересылки пакета в случае появления проблем с подключением.

MTU – что это?

MTU (от англ. Maximum transmission unit) – это максимальный объем данных, передаваемый по сети без дальнейшего фрагментирования (одним пакетом). Любая информация, объем которой превышает значение MTU, автоматически разбивается на небольшие блоки данных перед отправкой по сети. Возможные значения MTU зависят от используемого типа подключения к сети. Так, при использовании PPoE (в основном с ADSL и подобными технологиями) максимальное значение параметра MTU составляет 1492 байта (стандартные 1500 байт для Ethernet минус восемь байт заголовков), а при использовании Wi-Fi MTU может достигать 2304 байт.

В современных ОС оптимальное значение MTU зачастую вычисляется самой системой или берется из настроек маршрутизатора (обычно значение MTU задается в разделе WAN сетевых настроек устройства). Если проблем с доступом к Интернету не наблюдается, значение MTU лучше не менять. Однако, если возникли проблемы со связью и вы предполагаете, что они могут быть связаны с фрагментацией сетевых пакетов, попробуйте изменить значение MTU.

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


Рассчитываем значение MTU

Найти оптимальное значение MTU можно с помощью старой-доброй команды ping. Предположим, что мы определяем значение этого параметра для проводного подключения. Открываем командную строку Windows и пишем такую команду:

Запомните полученное значение и прибавьте к нему 28 байт (длина служебных заголовков). Получившееся значение – это оптимальное (или близкое к оптимальному) значение MTU для вашей сети.

Устанавливаем значение MTU

Теперь вы знаете, какое значение MTU можно использовать в вашей домашней сети. Укажем операционной системе, что необходимо использовать именно его (дальнейшие примеры иллюстрируют настройку сети IPv4).

В Windows открываем командную строку с правами администратора и выполняем команду:

netsh interface ipv4 show subinterfaces

На экране появится список всех сетевых подключений, их названия и текущий размер MTU. Запоминаем название нужного нам подключения и пишем следующую команду:

netsh interface ipv4 set subinterface Ethernet mtu=1450 store=persistent

Здесь Ethernet – название интерфейса (может быть другим), 1450 – выбранный размер MTU. Если название состоит из нескольких слов, его надо указывать в кавычках.

Для отключения автоматической настройки MTU можно выполнить команду:

netsh int tcp set global autotuninglevel=disabled

Включить автоматическое определение MTU можно той же командой с параметром autotuninglevel=normal.

Если необходимо сбросить настройки к исходному состоянию, выполняем команду:

В Linux настройка MTU осуществляется с помощью команды ip. Посмотрим текущее значение MTU:

А далее установим желаемое значение:

Здесь eth0 – название интерфейса, оно может быть другим на вашем компьютере. Для того чтобы выбранное значение MTU использовалось постоянно при каждом входе в систему, необходимо прописать значение в файл /etc/network/interfaces, либо создать модуль для systemd. Рекомендуем обратиться к документации используемого дистрибутива для получения более подробной информации.

В macOS посмотреть размер MTU для подключения en0, а затем установить значение параметра можно в терминале:

networksetup -getMTU en0

networksetup -setMTU en0 1450

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

При ручной настройке MTU учитывайте, что слишком маленький размер блока данных устанавливать не рекомендуется, чтобы не создавать дополнительную нагрузку на процессор маршрутизатора. Также напомним еще раз: если ваше сетевое подключение работает нормально, значение MTU менять не стоит. Параметры, установленные провайдером или производителем маршрутизатора, вполне подходят для подавляющего большинства пользователей.

Favorite

Добавить в избранное

Главное меню » Linux » Как изменить размер MTU в Linux

Как изменить размер MTU в Linux

Размер MTU по умолчанию в большинстве сетей Ethernet составляет 1500 байтов. Однако вы можете изменить его в соответствии с требованиями. В этой статье мы объясним, как изменить размер MTU в Linux.

Предпосылки

  • Система Ubuntu 20.04
  • Пользователь с привилегиями sudo
Команды, обсуждаемые в этой статье, были протестированы на Ubuntu 20.04 LTS (Focal Fossa). Те же команды действительны и для дистрибутива Debian.

Просмотреть текущий размер MTU

Чтобы просмотреть текущий размер MTU вашего интерфейса Ethernet, используйте команду ifconfig следующим образом:

Приведенные ниже выходные данные показывают, что текущий размер MTU интерфейса ens33 составляет 1500.

В качестве альтернативы вы также можете использовать команду ip с параметром a для просмотра текущего размера MTU:

Мы можем использовать команду ifconfig, чтобы изменить размер MTU сетевого интерфейса системы. Однако помните, что это изменение сохраняется после перезагрузки и возвращается к значению по умолчанию, то есть 1500.

Чтобы изменить размер MTU интерфейса, используйте следующий синтаксис:

Например, чтобы изменить размер MTU интерфейса с именем ens33 на 1000 байт, команда будет выглядеть так:

После выполнения указанной выше команды размер MTU мгновенно изменяется. Это изменение даже не требует перезапуска службы.

Вы можете проверить новый размер MTU, выполнив следующую команду в Терминале:

Из вышеприведенного вывода вы можете убедиться, что размер MTU теперь изменился до 1000 байт. Однако, как упоминалось ранее, это изменение не сохранится после перезагрузки. Размер MTU вернется к своему значению по умолчанию 1500 после перезагрузки.

Постоянное изменение размера MTU

Команда ifconfig мгновенно изменяет размер MTU, но это изменение не сохраняется после перезагрузки системы. В следующем разделе мы увидим, как навсегда изменить размер MTU.

При динамической IP-адресации размер MTU устанавливается DHCP. Поэтому потребуется настроить файл конфигурации DHCP, расположенный в /etc/dhcp/dhclient.conf . Для статического IP-адреса мы внесем изменения в файл конфигурации сетевого интерфейса, расположенный в /etc/network/interfaces.

Использование файла /etc/dhcp/dhclient.conf

Если в вашей системе работает DHCP-сервер и сетевые интерфейсы настроены на получение от него IP-адресов, используйте файл /etc/dhcp/dhclient.conf для изменения размера MTU.

Отредактируйте nano /etc/dhcp/dhclient.conf, используя следующую команду:

Например, чтобы установить размер MTU равным 1400, мы добавим:

Если у вас несколько интерфейсов и вы хотите изменить размер MTU только для одного интерфейса, заключите его в фигурные скобки следующим образом:

После того, как вы настроили файл, сохраните и закройте его. Теперь перезапустите сетевую службу, используя следующую команду в терминале:

Также вызовите интерфейс, используя следующую команду:

Обязательно замените <interface_name> фактическим сетевым интерфейсом в вашей системе, например, ens33, eth0, eth1 и т. д.

В нашем случае это будет:

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

Из выходных данных вы можете видеть, что размер MTU был изменен на 1400.

Использование файла /etc/network/interfaces

Если ваш сетевой интерфейс настроен на получение статического IP-адреса, вы можете изменить размер MTU, настроив файл / etc / network / interfaces .

Отредактируйте файл /etc/network/interfaces с помощью следующей команды в Терминале:

Добавьте в файл следующую строку:

Обязательно замените <interface-name> фактическим именем интерфейса, а <mtu_size> размером MTU, который вы хотите установить на сетевом интерфейсе.

Например, чтобы изменить размер MTU интерфейса с именем ens33 на 1300 байт, команда будет выглядеть так:

После того, как вы настроили файл, сохраните и закройте его.

Теперь перезапустите сетевые службы, используя следующую команду в Терминале:

Также вызовите интерфейс, используя следующую команду:

Обязательно замените <interface_name> фактическим сетевым интерфейсом в вашей системе, например, ens33, eth0, eth1 и т. Д.

В нашем случае это будет:

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

Из выходных данных видно, что размер MTU был изменен на 1300. Это изменение останется постоянным и не изменится даже после перезагрузки.

Вот и все! Следуя описанным выше процедурам, вы можете временно или навсегда изменить размер MTU сетевого интерфейса в вашей системе Linux. Надеемся это поможет!

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: