Когда работаешь с IP-сетями, волей-неволей начинаешь задумываться, как именно данные путешествуют внутри этих самых сетей. Всё, что мы передаём, разбивается на блоки, заворачивается в заголовки и уходит в путь — а значит, тут не обойтись без понимания многослойных моделей вроде OSI или TCP/IP.

Эти модели работают по принципу: на каждом уровне мы что-то добавляем (инкапсуляция), а на следующем — убираем (декапсуляция). И в этой упаковке-распаковке особенно важны два параметра: MTU (максимальный размер блока, который можно передать без фрагментации) и MSS (максимальный размер полезной нагрузки TCP-сегмента).

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

Я решил собрать всё в одном месте: чётко объяснить, что такое MTU и MSS, где они применяются, и в каких сценариях эти параметры играют решающую роль. Эта статья — не просто разбор терминов, а рабочий инструмент, если ты занимаешься администрированием, отладкой или просто хочешь понимать, что происходит «под капотом» сетевого стека.

Присоединяйся к сообществу админов в Telegram! 🚀 Обменивайся опытом, узнавай лайфхаки, находи полезные материалы и единомышленников. Admin Help

Что такое MTU — и почему это важно?

Начнём с базы. MTU (Maximum Transmission Unit, или максимальная единица передачи) — это не просто один из тех загадочных параметров, про которые «что-то где-то слышал». Это фундаментальная штука, которая определяет, какого максимального размера блок данных может пройти по сети без необходимости разбивать его на куски, то есть без фрагментации.

Но тут есть нюанс: когда говорят «MTU», могут иметь в виду два похожих, но всё же разных параметра — один на канальном уровне, второй — на сетевом. Их часто называют MTU интерфейса и IP MTU.

MTU интерфейса — кадры и ограничения на канальном уровне

Когда речь заходит о MTU интерфейса, мы говорим про максимум, который может передать сетевой интерфейс (например, Ethernet) в одном кадре, не прибегая к фрагментации.

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

Но! В некоторых сценариях — например, в дата-центрах или при построении высокопроизводительных инфраструктур — используют так называемые jumbo-фреймы. Это кадры размером до 9000 байт (или даже больше). Смысл в том, чтобы сократить накладные расходы на каждый передаваемый байт и тем самым ускорить передачу.

Разумеется, такие большие кадры будут нормально проходить только в том случае, если весь путь между узлами поддерживает такую же увеличенную MTU. Иначе всё опять же упрётся в фрагментацию или, что хуже, в отбрасывание пакетов.

IP MTU — ограничения уже на уровне IP

Теперь про IP MTU. Это параметр, который определяет максимальный размер IP-пакета, включая заголовки, который можно передать по маршруту без фрагментации именно на IP-уровне.

Как правило, IP MTU не превышает MTU интерфейса, но иногда становится ещё меньше — особенно если по пути есть туннели, VPN, GRE, IPsec и прочие «прокладки». Они добавляют свои заголовки, и как результат — полезной нагрузке остаётся меньше места.

Например, если между двумя хостами прокинут IPsec-туннель, поверх обычного Ethernet, то часть MTU съедается заголовками шифрования и инкапсуляции. И если не учесть это при расчёте MTU, то большие IP-пакеты могут начать либо фрагментироваться, либо вообще теряться.

В итоге получаем классическую ситуацию: “всё пингуется, но ничего не работает” — особенно часто это проявляется в медленной загрузке страниц, проблемах с VPN, нестабильных соединениях.

Вывод? Знать и уметь правильно настраивать MTU — жизненно важно. Особенно если вы имеете дело с распределённой архитектурой, туннелями или любым трафиком, который не укладывается в стандартные рамки.

Связь между IP-адресом и MTU интерфейса

Иногда кажется, что MTU интерфейса и IP MTU — это просто разные названия одного и того же. И да, если ничего не трогать и оставить всё по умолчанию, то значения у них действительно совпадут. Но на этом сходство заканчивается.

Вот как это выглядит на схеме:

Разница в том, как именно эти параметры определяются. MTU интерфейса — это, грубо говоря, максимальный размер «контейнера», который может пройти по каналу, то есть Ethernet-кадр. Он учитывает только полезную нагрузку, не включая заголовки верхних уровней.

А вот IP MTU — это уже про сам IP-пакет, включая его заголовок. То есть, если ты добавишь туннелирование (например, GRE), поверх IP добавятся ещё и служебные заголовки, и тут уже размер контейнера начнёт «трещать по швам».

Чтобы не быть голословным — вот схема, которая хорошо показывает, как GRE-заголовки выпадают из-под IP MTU, но всё ещё входят в общий размер интерфейсной MTU:

В результате, если у тебя MTU интерфейса 1500 байт, а поверх IP навешивается ещё 20 байт IP-заголовка и 12 байт GRE, то IP MTU нужно выставить в 1468 байт. Это стандартная история для GRE-туннелей. Но если ты используешь другой протокол — будь добр пересчитать. У всех свой «аппетит» на байты служебных данных.

MTU и фрагментация: когда пакет не влезает

Теперь давай поговорим о фрагментации — то есть, что происходит, когда пакет не помещается в отведённый ему размер.

Если всё по-честному, и бит Don’t Fragment (DF) не установлен, тогда система просто нарежет слишком большой IP-пакет на кусочки, чтобы доставить его по сети. Эти кусочки дойдут до адресата, и он их аккуратно соберёт обратно, как пазл.

Но если бит DF включён — а это сейчас норма, особенно в TCP-соединениях — тогда ничего резать никто не будет. Пакет просто выбросят, а отправителю прилетит ICMP-сообщение:

«Извините, фрагментация запрещена, а вы не влезли».

Так работает механизм Path MTU Discovery (PMTUD). Он как бы прозванивает маршрут до цели и узнаёт, какой минимальный MTU есть на этом пути. А потом старается отправлять пакеты, которые точно влезут — чтобы избежать фрагментации и не терять в производительности.

Но есть подвох: если на маршруте кто-то фильтрует ICMP, PMTUD не сможет получить обратную связь. И тут начинается магия из серии «пинг проходит, а сайт не открывается». Пакеты просто исчезают в никуда, и ты сидишь с лицом «почему всё сломалось». Это и есть та самая MTU black hole — чёрная дыра в сети, куда пропадают данные.

Что такое MSS?

MSS — это ещё один кусок головоломки, без которого вся картина будет неполной. Аббревиатура расшифровывается как Maximum Segment Size, или максимальный размер сегмента. По сути, это максимальный объём полезной нагрузки TCP, который устройство готово принять за один раз.

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

Это значение не «зашито» намертво — оно определяется динамически во время трёхстороннего рукопожатия TCP (да-да, тот самый SYN → SYN-ACK → ACK в начале любого TCP-сеанса). Один раз договорились — и MSS остаётся неизменным до завершения соединения.

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

Типичное значение MSS по умолчанию — это MTU минус 40 байт, где 40 — это служебная надбавка на заголовки IP (20 байт) и TCP (тоже 20 байт). Если у тебя интерфейс MTU = 1500, то MSS получится 1460 байт. Всё просто.

Почему MSS вообще важен? Потому что он помогает избежать фрагментации на уровне TCP. Устройство сразу знает, сколько байт можно безопасно засунуть в сегмент, чтобы он прошёл через IP-сеть, не развалившись на куски.

Для полноты картины стоит взглянуть ещё на одну схему — она показывает все три параметра (MTU интерфейса, IP MTU и MSS) в ситуации с туннелированием. Полезно, когда начинаешь путаться в этих уровнях и заголовках:

Сравнение IP MTU, MTU интерфейса и MSS

Ну и чтобы окончательно расставить все точки над «и», вот табличка. В ней я свёл в одну простую форму три параметра — интерфейсную MTU, IP MTU и MSS — с пояснением, за что каждый отвечает и как они связаны между собой. Такой краткий конспект для себя и коллег.

Параметр Уровень модели OSI Что измеряет Типичные значения Комментарий
MTU интерфейса Канальный Максимальный размер кадра Ethernet (без заголовков уровня 2) 1500 байт (по умолчанию), до 9000 байт (jumbo) Определяет, сколько данных может пройти через физический интерфейс без фрагментации
IP MTU Сетевой Максимальный размер IP-пакета, включая заголовок IP Обычно 1500 байт (может быть меньше при туннелировании) Может быть меньше MTU интерфейса из-за VPN, GRE и прочей инкапсуляции
MSS (TCP) Транспортный Максимальный размер полезной нагрузки TCP (без IP и TCP заголовков) Обычно MTU – 40 байт → 1460 байт Устанавливается при установке TCP-соединения, критичен для эффективной передачи данных

Реализация на устройствах Cisco

На устройствах под управлением Cisco IOS все три параметра — MTU интерфейса, IP MTU и MSS — можно настроить напрямую или косвенно. Причём у Cisco, как всегда, всё зависит от платформы, версии прошивки и настроения интерфейса (в шутку, конечно — но не совсем).

Настройка MTU интерфейса

MTU интерфейса — это как максимум, который способен “проглотить” конкретный сетевой интерфейс без фрагментации. Настройка зависит от железа и версии IOS. На стареньких или менее навороченных устройствах всё просто: одно значение MTU задаётся глобально через system mtu, и будет одинаковым для всех интерфейсов.

Switch(config)# system mtu 1500

А вот на более современных и производительных железках можно — и нужно — задавать MTU отдельно для каждого интерфейса:

Router(config)# interface GigabitEthernet0/1
Router(config-if)# mtu 1500

Диапазон допустимых значений зависит от конкретного оборудования и версии прошивки. Часто можно выставить MTU до 9000 байт и выше — особенно в средах с большими кадрами, например, в дата-центрах.

Настройка IP MTU

IP MTU — это уже история про 3 уровень. Он задаёт максимальный размер IP-пакета, включая заголовки, который может быть передан без фрагментации. Настройка выполняется командой ip mtu прямо на интерфейсе:

Router(config)# interface GigabitEthernet0/1
Router(config-if)# ip mtu 1500

Это особенно критично в тех случаях, где используется туннелирование (например, GRE, IPsec). Дополнительные заголовки уменьшают реальный доступный размер полезной нагрузки, и если IP MTU не подстроить — можно словить проблемы.

Влияние на MSS

Сам MSS — параметр, который согласуется между конечными узлами при установлении TCP-соединения. Жёстко задать MSS на Cisco нельзя, но есть способ повлиять на него.

Для этого используется команда ip tcp adjust-mss, и применяется она к интерфейсу, через который идёт трафик.

Router(config)# interface GigabitEthernet0/1
Router(config-if)# ip tcp adjust-mss 1360

Что происходит: все TCP SYN-пакеты, проходящие через интерфейс, получают новое значение MSS — 1360 байт. Конечное устройство считает, что это предложение от другой стороны, и соглашается, отправляя ответный SYN-ACK с тем же MSS. Отправитель принимает это за честную игру и использует уменьшенное значение на весь сеанс.

Этот приём особенно выручает при работе с VPN и туннелями, где полезная нагрузка «ужимается» из-за дополнительных заголовков. Уменьшив MSS заранее, можно избежать фрагментации и странных сетевых глюков.

Заключение

Если ты серьёзно занимаешься сетями — будь добр, разбирайся в MTU, IP MTU и MSS. Это не просто «технические параметры», а основа надёжной, устойчивой и эффективной сети.

Понимание этих механизмов помогает не только строить правильную архитектуру, но и находить тонкие, подлые баги, которые на первый взгляд выглядят как «всё вроде работает, но не совсем».

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

Поделитесь Вашим мнением
Ваш комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Еще записи из этой же рубрики

Что будем искать? Например,Cisco

Минуту внимания
Мы используем файлы cookie и рекомендательные технологии. Пользуясь сайтом, вы соглашаетесь с Политикой обработки персональных данных.