MTU (Maximum Transmission Unit) – максимальный размер полезной нагрузки фрейма/пакета, который может быть передан по каналу без фрагментации. В контексте Ethernet по умолчанию этот размер составляет 1500 байт полезных данных для сетевого (IP) уровня. При включении 802.1Q-тегирования в кадр добавляются ещё 4 байта, включая заголовок Ethernet, общий размер кадра составляет 1514 байт (без учёта 4-байтового FCS). Таким образом, под «Ethernet MTU» обычно подразумевается максимальная длина данных на канальном уровне (учитывая заголовки L2), а «IP MTU» – максимальный размер IP-пакета на сетевом уровне (не включая Ethernet-заголовки). На устройствах Cisco IOS команда mtu (или system mtu на коммутаторах) задаёт аппаратный (L2) MTU, а команда ip mtu – размер IP-пакета (L3). При этом IP MTU никогда не может превышать Ethernet MTU: на практике после установки большего MTU на интерфейсе (например, mtu 1600) командой ip mtu можно задать до того же значения. Например, если на маршрутизаторе выставить interface F0/0; mtu 1600, то сразу же IP MTU станет доступен до 1600 (по умолчанию он равен 1500). Аналогично, на коммутаторе Cisco Nexus установка interface vlan X; mtu 9216 задаёт L3-MTU для SVI.
Важно: если кадр по L2 оказывается больше настроенного MTU, он просто отбрасывается – на канальном уровне фрагментация не происходит. Фрагментация возможна лишь на сетевом уровне (L3). Например, стандартный Ethernet-кадр (1514 байт) укладывается в MTU 1500 байт плюс заголовки; но кадр, скажем, 1600 байт на L2 из-за отсутствия поддержки не будет передан и отбрасывается. Чтобы избежать потерь, необходимо на всех сегментах сети согласовать MTU или включить поддержку «джамбо-фреймов» (jumbo frames) на всем пути.
Влияние MTU на производительность сети
Размер MTU напрямую влияет на эффективность передачи данных. При фиксированном объёме трафика (например, большой файл) меньший MTU означает большее число пакетов, а значит, больше заголовков, более частые прерывания процессора для обработки пакетов и потенциально большую нагрузку на маршрутизаторы/коммутаторы. Джамбо-фреймы (MTU ~9000) позволяют пересылать больше данных «за раз», сокращая накладные расходы на заголовки и обработки. Теоретически при использовании jumbo снижает число операций по пересылке и увеличивает пропускную способность хоста или CPU устройства.
С другой стороны, очень большие пакеты могут увеличить задержку при обработке (например, в буферах и при повторных передачах), а при ошибках потерь данных – объём повторной передачи фрагментов. При фрагментации на маршрутизаторах возрастает нагрузка на CPU, поскольку устройство должно разделить IP-пакет на части и затем их заново собрать на приёмном конце. В IPv6-фреймворке, кстати, маршрутизаторы никогда не фрагментируют пакеты сами; при превышении MTU они отсылают ICMPv6 «Packet Too Big» и обязуют отправитель снизить размер. В IPv4 же при выключенном DF-бите маршрутизатор разбивает пакет и передаст фрагменты (увеличивая задержку и нагрузку), а при включенном – отбросит фрагмент и «сообщит» об этом отправителю (см. ниже про PMTUD).
Итого, слишком мелкий MTU снижает общую эффективность из‐за повышенного числа пакетов и накладных расходов, а слишком большой MTU может приводить к фрагментации, задержкам и проблемам при прохождении сегментов с меньшим MTU. Выбор оптимального MTU зависит от конкретных задач: для дата-центров и iSCSI-хранилищ jumbo 9000 часто оправдан, а в общедоступных или многопрыгающих (multi-hop) сетях консервативный MTU 1500 обеспечивает наибольшую совместимость.
Фрагментация IP-пакетов и Path MTU Discovery
Если размер IP-пакета больше, чем MTU исходящего интерфейса, пакет нужно фрагментировать или отбросить. В IPv4 фрагментацию осуществляет маршрутизатор, если DF-бит снят. Фрагментация разделяет пакет на два (или более) меньших, которые доставляются независимо и собираются на конечном узле. Это затратно: требует дополнительных накладных заголовков и нагрузки на CPU для обработки фрагментов.
Чтобы избежать фрагментации, используется Path MTU Discovery (PMTUD) – механизм определения наименьшего MTU по пути следования. При установлении TCP-сессии на отправителе выставляется DF-бит (Don’t Fragment). Если на каком-то звене MTU меньше размера пакета, узел сбрасывает пакет и отправляет ICMP-сообщение «MTU требуется меньше, фрагментация запрещена», указывающее правильное значение MTU. Отправитель получает это сообщение и уменьшает размер последующих пакетов до безопасного уровня, повторяя операцию до тех пор, пока пакет не пройдет до адресата без фрагментации.
Однако PMTUD чувствителен к блокировке ICMP: если промежуточный роутер не допускает возврат ICMP «необходима фрагментация», отправитель не узнает про слишком большой пакет и соединение зависнет (MTU-blackhole). Классическим примером такой проблемы является PPPoE-сегмент: если MTU интерфейса ADSL выставлен 1492, а роутер и сервер ожидают 1500, без PMTUD пакеты отбрасываются и связь не устанавливается. Решением может быть либо разрешение ICMP или ручная настройка MSS/TCP (обычно уменьшают MSS на 40 байт) на конечных хостах.
На практике в Cisco IOS механизмы PMTUD по умолчанию включены для TCP и UDP, но в некоторых сценариях (GRE-туннель, IPsec) может потребоваться дополнительная настройка (см. ниже). Для диагностики несогласованного MTU удобен ping с установленным DF-битом. Пример: при попытке переслать ICMP-пакеты разного размера с DF-маркером видно, что в простом случае максимум 1500 байт проходит, а 1501 байт – нет. Это означает, что текущий MTU меньше 1501. Аналогичным образом можно тестировать любые сегменты сети. В Cisco CLI это делается через «extended ping» и выбор «DF-bit» = yes, как в примере.
Джамбо-фреймы: определение, применения и эффекты
Jumbo frame – неофициальный термин для Ethernet-кадра с полезной нагрузкой, превышающей стандартные 1500 байт. Практически во многих устройствах jumbo означает MTU порядка 9000 байт. Например, рекомендации VMware по виртуальным дата-центрам указывают поддержку кадра до 9000 байт, но с учётом накладных затрат часто рекомендуют MTU ~8800. Использование jumbo-фреймов выгодно при передаче больших объёмов данных между узлами сети (например, в SAN, VM миграциях, больших файлах), поскольку уменьшается количество кадров и обработок CPU.
В Cisco-сетях jumbo-фреймы активно применяются в бэкенд-сетях дата-центров, iSCSI, научно-вычислительных и мультимедийных приложениях. Например, коммутаторы Catalyst 3750/3560 поддерживают до 9000 байт на гигабитных портах, коммутаторы Nexus – тоже (настраиваемое пер-порт MTU до 9216). При этом важно согласовать MTU на всех элементах пути. Если хотя бы один сегмент сети не поддерживает jumbo, пересылаемые большие кадры будут отброшены. Например, на Catalyst 3750/3560 сообщение предупреждает, что «ingress на гигабит с jumbo, egress на FastEthernet – пакеты отбрасываются». Аналогично, соединение по туннелю или через маршрутизатор, где MTU меньше, вызовет фрагментацию или потерю пакетов.
При настройке джамбо-фреймов важно помнить о дополнительной нагрузке: в некоторых условиях слишком крупные кадры могут перегружать буферы, а также приводить к увеличению задержек при ошибках. Кроме того, стандартные клиенты в интернете и некоторые сервисы не ожидают MTU >1500, поэтому на границе сети с внешними сегментами нередко сохраняют 1500 и не используют jumbo для внешнего трафика. Внутри же изолированных «производственных» сетей (например, между хостами в одном серверном помещении) джамбо-фреймы обычно дают прирост производительности.
Настройка MTU на Cisco-устройствах
MTU на Ethernet-интерфейсах
На маршрутизаторах (IOS): команда interface GigabitEthernet0/0 (либо другой физический интерфейс) позволяет задать mtu <размер> и/или ip mtu <размер>. Например:
Router(config)# interface GigabitEthernet0/1
Router(config-if)# mtu 9216
Router(config-if)# ip mtu 9000
Здесь mtu 9216 устанавливает максимально допустимый размер L2-кадра (включая заголовки), а ip mtu 9000 – предел данных IP-пакета. Как правило, ip mtu делают равным (или немного меньше) аппаратному MTU. Без mtu интерфейс может не пропустить кадры более 1500 байт. Проверить настройки можно командами show interfaces GigabitEthernet0/1 | include MTU.
На коммутаторах Catalyst (IOS Switch): чтобы включить джамбо-фреймы, часто требуется глобальная команда. Например, на Catalyst 3750/3560:
Switch(config)# system mtu jumbo 9000 или просто system mtu 9000
Switch(config)# exit
Switch# reload
Эта команда применяет MTU 9000 байт для всех гигабитных портов. Для 100 Мбит портов на том же коммутаторе используется system mtu <1492..1998> (baby-giant). После перезагрузки show system mtuпокажет текущие значения. Если на одном порту включены jumbo, а на смежном нет, крупные кадры будут падать.
На коммутаторах Catalyst L3 (SVI): у SVI (виртуального интерфейса VLAN) стандартно ip mtu 1500. Увеличение делается командой:
Switch(config)# interface vlan 100
Switch(config-if)# ip mtu 9000
На новых платформах (например, Catalyst 9000/3850) могут поддерживаться гигантские MTU до ~9000 за вычетом заголовков. Необходимо также увеличить системный MTU (как выше) для поддержки кадров с метками, если SVI находится на трассируемом порту.
На Nexus-устройствах: настройка MTU похожа на Catalyst, но зачастую команда просто mtu. Пример из документации Cisco:
Nexus(config)# interface vlan 10
Nexus(config-if)# mtu 9216
или для физического L3-порта:
Nexus(config)# interface ethernet 1/1
Nexus(config-if)# no switchport
Nexus(config-if)# mtu 9216
Обратите внимание, что в NX-OS «ip mtu» используется только на SVI, а на физических портах обычно просто mtu.
MTU в туннелях (GRE, IPsec и др.)
При создании GRE или IP-туннеля на Cisco по умолчанию MTU туннельного интерфейса меньше физического на величину заголовков инкапсуляции. Например, GRE добавляет 24 байта (20 IP + 4 GRE), соответственно туннельный MTU по умолчанию = физический MTU – 24. На практике часто устанавливают туннельный MTU вручную, чтобы избежать проблем. Для туннелей с IPsec часто рекомендуется:
Router(config)# interface tunnel 1
Router(config-if)# ip mtu 1400
Router(config-if)# ip tcp adjust-mss 1360
Это снижает риск фрагментации после шифрования. Команда tunnel path-mtu-discovery включает PMTUD внутри туннеля GRE/IPsec, копируя DF-бит и позволяя динамически уменьшать MTU туннеля при необходимости. Без этого, если DF установлен, большие пакеты просто отбрасываются. В Cisco документе отмечается, что для GRE рекомендуется использовать как ip mtu, так и tunnel path-mtu-discoveryвместе. Если же все же требуется фрагментация «до шифрования», в интерфейсе можно включить crypto ipsec fragmentation before-encryption, чтобы разбиение происходило на роутере перед IPsec.
MTU для VLAN и Trunk
При использовании 802.1Q заголовка на транке фактическая нагрузка MTU уменьшается на 4 байта. На некоторых Cisco-коммутаторах можно обходным путём включить режим транка «для 4 доп. байт», даже если трафик один. Например, инструкция рекомендует явно установить порт в режим trunk, чтобы поддержать дополнительные 4 байта «автологирования». В противном случае, если на SVI или порту настроено MTU=1546 (1500+46), кадры с VLAN-тегом (1518) будут считаться «oversized» и отброшены. Поэтому при настройке jumbo в сети стоит помнить про синхронизацию системного MTU, IP MTU SVI и режимов транка.
Проблемы при несовпадении MTU и диагностика
Несогласованность MTU на разных сегментах может привести к различным проблемам:
- Потеря пакетов: если фрейм больше MTU соседнего сегмента, он отбрасывается. Например, описан случай, когда на порту Gi с jumbo-фреймами, ведущий на порт FastEthernet с MTU=1500, все фреймы более 1500 байт падают. Точно так же несогласованность MTU на туннелях может разрывать соединение без явных ошибок.
- Фрагментация и перегрузка: если маршрутизатор фрагментирует пакеты из-за разного MTU, это увеличивает нагрузку и задержки. В худшем случае (DF включен) пакеты вовсе не пройдут, а соединение «зависнет» (blackhole).
- Неполадки в протоколах: например, Path MTU Discovery может дать сбой при блокировке ICMP, а SCTP, DNS или некоторые VPN-клиенты часто терпят крах на несоответствии MTU.
Для диагностики несогласованности MTU используют несколько инструментов:
- Extended ping с DF: как показано выше, позволяет установить максимальный безфрагментационный размер. Например, серия ping между R2 и R1 с увеличивающимся размером покажет, что 1500 байт проходит, а 1501 – нет.
- Traceroute с MTU: некоторые системы умеют трассировать с установкой DF, выявляя узел-«бутылочное горлышко».
- Команды шоу: show interfaces (или SNMP ifMtu) покажет MTU на интерфейсах. show system mtu на коммутаторе – системные настройки. Логи (buffer-level debugging) иногда фиксируют фрагментацию.
- TCP-MSS adjust: при проблемах часто выставляют ip tcp adjust-mss <значение> на интерфейсах в обход фрагментации (снижая максимальный размер TCP сегмента).
Таким образом, главное – убедиться, что во всех сегментах сети (и на хостах) приняты одинаковые MTU (или применены механизмы обхода: PMTUD, MSS). В Cisco IOS на маршрутизаторах команды mtu/ip mtu, а на коммутаторах – system mtu (и ip mtu на SVI) позволяют установить желаемые значения. Для проверки используйте ping с DF и show interface.
# Пример: проверка MTU на интерфейсе
Router# show interface GigabitEthernet0/1 | include MTU
MTU 1500 bytes, BW 1000000 Kbit/sec
# Пример: включение туннельного PMTUD и настройка MTU GRE
Router(config)# interface Tunnel1
Router(config-if)# ip mtu 1400
Router(config-if)# tunnel path-mtu-discovery
# Пример: включение jumbo на Catalyst 3750
Switch(config)# system mtu jumbo 9000
Switch(config)# exit
Switch# reload
# Пример: настройка MTU на Nexus SVI
Nexus(config)# interface vlan 10
Nexus(config-if)# mtu 9216
В итоге грамотная настройка MTU и понимание различий между L2 vs L3 позволяют оптимизировать производительность сети и избежать «черных дыр» при пересылке больших пакетов