Как определить максимальный размер сегмента (mss) в Tcp/ip

Максимальный размер сегмента (MSS) в сетях TCP/IP

Максимальный размер сегмента (MSS) является параметром поля опций заголовка TCP, который определяет наибольшее количество данных, указанных в байтах, которые компьютер или устройство связи могут получать в одном сегменте TCP. Понимание и правильная настройка MSS имеет решающее значение для оптимизации производительности сети, предотвращения фрагментации пакетов и обеспечения надежной передачи данных по сетям TCP/IP. Это всеобъемлющее руководство исследует, что такое MSS, как она работает, а также различные методы и инструменты, которые вы можете использовать для определения и оптимизации значений MSS в вашей сетевой инфраструктуре.

Каков максимальный размер сегмента (MSS)?

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

MSS согласовывается во время рукопожатия TCP: оба устройства сообщают размер пакетов, которые они могут получить. Это согласование происходит в начале каждого соединения TCP и значение не может быть изменено после установления соединения. Каждая конечная точка объявляет о своем собственном значении MSS независимо, и связь использует соответствующую MSS для каждого направления потока данных.

MSS vs. MTU: понимание различий

Хотя MSS и Maximum Transmission Unit (MTU) являются тесно связанными концепциями, они работают на разных уровнях сетевого стека. MSS представляет собой слой 4, или транспортный слой, метрику. Он используется с протоколом транспортного уровня TCP. Однако он тесно связан с MTU, который применяется к слою 3 (сетевой слой).

Критическое различие в поведении заключается в том, что если пакет превышает MTU устройства, он разбивается на более мелкие части или «фрагментируется». Напротив, если пакет превышает MSS, он сбрасывается и не доставляется. Это делает правильную конфигурацию MSS необходимой для предотвращения потери пакета и обеспечения бесперебойной работы сети.

Как происходит ведение переговоров по MSS во время установки TCP-соединения

Переговорный процесс MSS происходит во время трехстороннего рукопожатия TCP, которое устанавливает соединение между двумя устройствами. Переговоры MSS происходят во время начальной фазы соединения TCP: SYN Packet: Инициирующее устройство отправляет SYN-пакет, содержащий его значение MSS. SYN-ACK Packet: Приемное устройство отвечает пакетом SYN-ACK, содержащим его значение MSS.

Если хост желает установить максимальный размер сегмента на значение, отличное от значения по умолчанию, максимальный размер сегмента указывается как опция TCP, первоначально в пакете TCP SYN во время рукопожатия TCP. Этот механизм объявления позволяет каждой конечной точке передавать свои возможности приема другой стороне.

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

Ценности MSS по умолчанию

Когда опция MSS не указана явно во время рукопожатия TCP, используются значения по умолчанию. Размер TCP Maximum Segment Size для IPv4 составляет 536. Для IPv6 он равен 1220. Эти консервативные значения по умолчанию обеспечивают базовую совместимость по различным сетевым путям, хотя они редко являются оптимальными для современных сетей.

Расчет MSS из MTU

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

Базовая формула расчета MSS

Значение MSS для отправки: MSS = MTU - TCPHdrLen - IPHdrLen Эта формула учитывает накладные расходы, вводимые как заголовками TCP, так и заголовками IP, которые должны быть включены в каждый пакет.

Заголовки TCP почти всегда имеют длину 20 байт. Заголовки IP включают в себя информацию, такую как IP-адрес источника и назначения, а также 20 байт. Поэтому для стандартных заголовков без опций общая накладная стоимость составляет 40 байт.

Стандартный расчет Ethernet MSS

Для стандартных сетей Ethernet сетевой маршрутизатор имеет MTU 1500, то есть принимает пакеты длиной до 1500 байт. MSS маршрутизатора должен быть установлен на 1460 байт. Этот расчет следует формуле: 1500 (MTU) - 20 (заголовок IP) - 20 (заголовок TCP) = 1460 байт MSS.

С MTU 1500 байт и 40 байт для заголовков IP и TCP типичный MSS для Ethernet составляет 1460 байт. Это наиболее распространенное значение MSS, с которым вы столкнетесь в современных сетях TCP/IP.

Учет опций TCP

В то время как основной расчет предполагает 20-байтовые заголовки, реальные сценарии могут быть более сложными. Размер опций TCP (переменная 0-320 бит, в единицах 32 бит) должен быть вычтен из размера MSS, если включены опции TCP. Например, теги времени TCP включены по умолчанию на платформах Linux. Когда используются временные метки TCP, максимальное значение MSS должно быть 1460. Однако это значение может быть снижено до 1448 из-за использования меток времени TCP.

Методы определения MSS в вашей сети

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

Метод 1: Использование Wireshark для анализа пакетов

Wireshark — один из самых мощных инструментов анализа TCP-соединений и определения значений MSS. Опция MSS встречается только в пакетах SYN и SYN/ACK установления соединения TCP трёхсторонним рукопожатием. Это позволяет легко идентифицировать значения MSS в захваченном трафике.

Для определения MSS с помощью Wireshark:

  1. Запустите захват пакетов в сетевом интерфейсе, который вы хотите проанализировать.
  2. Инициировать соединение TCP (например, переход на веб-сайт или начало передачи файлов)
  3. Остановите захват и фильтр для трафика TCP с помощью фильтра: tcp.flags.syn == 1
  4. Проверить пакеты SYN и SYN-ACK в трехстороннем рукопожатии
  5. Расширить раздел опций TCP в панели деталей пакета
  6. Ищите опцию «Максимальный размер сегмента», которая будет отображать значение MSS в байтах.

MSS расшифровывается как Maximum Segment Size, который определяет наибольший объем данных, которые устройство может получать в одном сегменте TCP. TCP MSS не включает в себя заголовок IP или заголовок TCP. MSS обсуждается в трех направлениях рукопожатия между клиентом и сервером в начале соединения TCP.

Метод 2: Анализ значений MSS в производительности сети

Вы можете проанализировать значение MSS для понимания производительности сети и увидеть, насколько эффективно передаются данные. При устранении проблем производительности стоит исследовать что-то меньше 1000 байт. Сервер отвечает MSS 512, что намного меньше, чем 1460, чем мы ожидали. Это означает, что вам придется отправить три 512-байтовых сегмента вместо одного 1460-байтного сегмента.

Небольшие значения MSS могут значительно повлиять на эффективность сети, требуя большего количества пакетов для передачи того же объема данных, увеличивая накладные расходы и потенциально снижая пропускную способность.

Метод 3: Использование тестов Ping для определения пути MTU

Хотя пинг не показывает MSS напрямую, он может помочь вам определить Path MTU, из которого вы можете вычислить соответствующую MSS. Вы можете пинговать конечное устройство с набором битов «не фрагментировать». Это будет работать только в том случае, если ICMP поддерживается всеми промежуточными устройствами.

Чтобы найти оптимальное значение MSS/MTU сети, проведите «пинг-тест» для поиска MTU, а затем уменьшите 40 от этого значения и установите его как tcp-mss в политике брандмауэра. Для 1500-байтного MTU 1500-28 (20 байт = IP-заголовок и 8 байт = ICMP-заголовок) = 1472.

В Windows вы можете использовать следующую команду:

ping -f -l 1472 destination_address

Linux или macOS:

ping -M do -s 1472 destination_address

Если пакет должен быть фрагментирован, но установлен бит DF, то MTU составляет менее 1500 байт. Предположим, что можно пинговать размером 1400, но не размером 1401, это означает, что значение MTU составляет 1400+28=1428 байт. Решение состоит либо в том, чтобы зафиксировать MTU в сетевом устройстве, либо в том, чтобы установить TCP MSS в политике брандмауэра до 1428-40=1388 байт.

Способ 4: Проверка конфигурации устройства и маршрутизатора

Многие сетевые устройства позволяют просматривать и настраивать настройки MSS напрямую.На маршрутизаторах Cisco, например, можно просматривать MTU интерфейса, используя:

show interface [interface-name]

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

Метод 5: Использование средств диагностики сети

Несколько специализированных инструментов сетевой диагностики могут сообщать о значениях MSS и помогать с Path MTU Discovery. Вы можете проверять значения PMTU и MSS, которые каждый агент использует при подключении к цели. Такие инструменты, как ThousandEyes, PathPing и tracepath, могут обеспечить ценную информацию о характеристиках MSS и MTU сетевых путей.

MSS в специальных сетевых сценариях

Различные конфигурации и технологии сети требуют особого внимания при определении и настройке значений MSS.

Сети PPPoE

Стандарт PPP over Ethernet (PPPoE) поддерживает MTU всего 1492 байт.Разница между размером хоста и PPPoE MTU может привести к тому, что маршрутизатор между хостом и сервером сбросит 1500-байтовые пакеты и прекратит сеансы TCP по сети PPPoE.

Оптимальное значение для аргумента размера максимального сегмента составляет 1452 байта. Это значение плюс 20-байтный IP-заголовок, 20-байтный TCP-заголовок и 8-байтный PPPoE-заголовок составляют 1500-байтовый пакет, который соответствует размеру MTU для Ethernet-ссылки.

VPN и IPsec туннели

VPN-соединения добавляют дополнительные заголовки, уменьшающие доступное пространство для данных. В VPN MSS настраивается на учет дополнительных заголовков инкапсуляции, предотвращая фрагментацию. Точные накладные расходы зависят от используемых алгоритмов шифрования и аутентификации.

Существует дополнительный заголовок IPSec. Он зависит от алгоритма шифрования и аутентификации. AES-256 и SHA1 имеют максимум 73 байта, а другой алгоритм может иметь несколько разные байты. Для 1500-байтного MTU MSS для TCP над туннелем IPSec составляет 1500-20 (заголовок IP) -20 (заголовок TCP)-73 (заголовок IPsec) = 1387.

Туннели GRE

В случае туннелирования GRE в оригинальный пакет добавляется 24-байтовый заголовок, чтобы отправить его в новое место назначения. Если исходный пакет был больше 1476 байт, это может сделать новый пакет более типичным 1500-байтным MTU.

Для туннелей GRE рекомендуемая MSS обычно составляет 1436 байт (1500 МТУ - 40 байт заголовков TCP/IP - 24 байта заголовка GRE = 1436 байт).

Рамки Jumbo

Для Ethernet v2 MTU составляет 1500 байт, но если используются Jumbo Frames, MTU может доходить до 9000 байт.При включении рамок jumbo по всему сетевому пути MSS может быть увеличен пропорционально, что позволяет более эффективно передавать данные за счет уменьшения количества пакетов, необходимых для передачи больших объемов данных.

Понимание и внедрение MSS Clamping

Зажим MSS - это метод, используемый для предотвращения фрагментации и потери пакетов путем корректировки значения MSS, рекламируемого во время установления соединения TCP.

Что такое MSS Clamping?

Зажим MSS может быть достигнут путем настройки сервера для применения зажима MSS: во время рукопожатия TCP сервер может сигнализировать MSS для пакетов, которые он готов принять, «зажимая» максимальный размер полезной нагрузки с другого сервера. Этот метод особенно полезен, когда промежуточные устройства добавляют заголовки инкапсуляции, которые уменьшают эффективный MTU.

Зажим TCP MSS позволяет уменьшить максимальный размер сегмента (MSS), используемый сеансом TCP во время установления соединения через туннель VPN. Сетевые устройства, такие как маршрутизаторы и брандмауэры, могут перехватывать пакеты TCP SYN и изменять опцию MSS до более низкого значения, которое учитывает фактические ограничения пути.

Почему хлорирование необходимо

Иногда маршрутизатор вдоль сетевого пути имеет значение MTU ниже, чем типичные 1500 байт. Это может привести к потере пакетов и может быть трудно обнаружить. Зажим MSS обеспечивает проактивное решение этой проблемы.

Когда трафик TCP проходит через любой вид VPN-туннеля, в исходный пакет добавляются дополнительные заголовки, чтобы сохранить его в безопасности. Для туннельного режима IPSec используются дополнительные заголовки IP, ESP и необязательно UDP (если в сети присутствует перевод порта). Из-за этих дополнительных заголовков размер инкапсулированного пакета выходит за рамки MTU интерфейса VPN.

Конфигурация MSS-зажима на разных платформах

Cisco IOS Routers:

Используйте команду ip tcp adjust-mss в режиме конфигурации интерфейса, чтобы указать значение MSS на промежуточном маршрутизаторе пакетов SYN, чтобы избежать усечения. Команда применяется в режиме конфигурации интерфейса:

interface GigabitEthernet0/0
ip tcp adjust-mss 1452

Команда ip tcp adjust-mss эффективна только для TCP-соединений, проходящих через маршрутизатор. Это означает, что она работает двунаправленно на трафик, проходящий через интерфейс.

Linux с iptables:

Для зажима MSS для прохождения MTU (динамический, рекомендованный), используйте: iptables -t mangle -A FORWARD -p tcp -tcp-flags SYN,RST SYN -j TCPMSS -clamp-mss-to-pmtu Это автоматически регулирует MSS на основе интерфейса MTU.

Для конкретного значения MSS:

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1380

Юнипер Сети:

Чтобы уменьшить вероятность фрагментации и защитить от потери пакетов, можно уменьшить размер TCP MSS с помощью tcp-mss-заявления.Конфигурация выполняется на уровне интерфейса или маршрутизации в зависимости от платформы.

Лучшие практики для MSS Clamping

Путь MTU Discovery (PMTUD) и его связь с MSS

Path MTU Discovery — это механизм, позволяющий хостам определять максимальный MTU по сетевому пути, что напрямую влияет на оптимальное значение MSS.

Как работает PMTUD

Чтобы избежать фрагментации, конечные хосты обычно запускают PMTUD для каждого пункта назначения или могут обрабатывать сообщения ICMP «Packet too big» (по умолчанию в Linux) и соответствующим образом настраивать максимальный размер сегмента TCP (MSS). Процесс включает в себя отправку пакетов с битовым набором Don't Fragment (DF) и прослушивание сообщений об ошибках ICMP, которые указывают, когда пакет слишком велик для ссылки в пути.

Проблемы и ограничения ПМТУД

К сожалению, PMTUD не всегда надежно работает в реальных сетях. Многие брандмауэры и устройства безопасности блокируют сообщения ICMP, в том числе сообщения «Packet Too Big», на которые опирается PMTUD. Это может создать «черные дыры», где пакеты бесшумно сбрасываются без какого-либо уведомления отправителя.

Когда PMTUD не может быть выполнен, вы в конечном итоге либо фрагментированные пакеты, либо упаковка, либо оба. Вместо того, чтобы пытаться изменить MTU на самом хосте, что утомительно и подвержено ошибкам, промежуточное устройство может проверить TCP-пакеты и изменить MSS, который сигнализируется на значение, которое соответствует MTU пути. Например, если есть шифрование и туннелирование, вы можете потерять около 100 байтов в некоторых сценариях, и многие люди настраивают MTU 1400 и MSS 1360 в таких сценариях.

MSS Clamping как альтернатива PMTUD

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

Устранение проблем, связанных с MSS

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

Общие проблемы MSS

Симптом: соединения устанавливаются, но передача данных не удается или происходит очень медленно

Этот классический симптом часто указывает на несоответствие MSS или MTU. Рукопожатие TCP успешно завершается (с использованием небольших пакетов), но при отправке больших пакетов данных они превышают путь MTU и сбрасываются. Если установлен бит DF (не фрагментировать), то пакет может быть сброшен, что может вызвать задержки или медлительность в сети.

Симптом: некоторые веб-сайты работают, а другие нет

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

Симптом: VPN-соединения нестабильны или медленны

VPN-туннели добавляют накладные расходы, что снижает эффективность MTU. Если MSS не будет скорректирована с учетом этих накладных расходов, пакеты будут фрагментированы или утеряны, что приведет к плохой производительности или сбоям соединения.

Диагностические шаги

  1. Захват и анализ рукопожатий TCP: Используйте Wireshark для изучения обсуждаемых значений MSS. Ищите необычно маленькие значения MSS или несоответствия между двумя направлениями.
  2. Испытание с различными размерами пакетов: Используйте пинг с набором битов DF и различными размерами пакетов для определения фактического пути MTU.
  3. Проверка фильтрации ICMP: Убедитесь, что сообщения ICMP, особенно сообщения «Packet Too Big», могут достигать конечных точек.
  4. Обзор промежуточных конфигураций устройств: Проверка маршрутизаторов, брандмауэров и шлюзов VPN для настроек MTU и MSS. Ищите неправильные конфигурации или отсутствующие правила зажима MSS.
  5. Испытание с зажимом MSS: Временно реализуйте зажим MSS с консервативным значением (например, 1360 байт), чтобы увидеть, решает ли он проблему.

Использование Wireshark для устранения неполадок MSS

Wireshark предоставляет мощные возможности для диагностики проблем, связанных с MSS. Ключевые вещи, которые нужно искать, включают:

Стратегии оптимизации MSS

Оптимизация значений MSS может значительно повысить производительность и надежность сети. Вот ключевые стратегии, которые следует учитывать.

Баланс между эффективностью и совместимостью

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

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

Рекомендации, касающиеся окружающей среды

Стандартные интернет-соединения: Используйте MSS 1460 байт (для 1500-байтного MTU)

PPPoE соединения: Используйте MSS 1452 байт (для 1492-байтного MTU)

IPsec VPN: Используйте MSS 1360-1400 байтов в зависимости от накладных расходов на шифрование

GRE туннели: Используйте MSS 1436 байт (для 1476-байтного эффективного MTU)

Множественные инкапсуляции: Вычислите совокупные накладные расходы и вычтите из базы MTU

Тестирование и валидация

Тестирование с помощью Path MTU Discovery (PMTUD): PMTUD помогает определить наименьший размер MTU по пути, обеспечивая согласование MSS с возможностями сети. Настройка MSS Clamping: маршрутизаторы и брандмауэры могут использовать MSS-зажим для динамической настройки значений MSS, приспосабливая сетевые ограничения.

После внедрения изменений MSS тщательно тестируйте различные сценарии, в том числе:

Продвинутые концепции MSS

Асимметричные значения MSS

MSS может иметь различное значение в любом направлении, и что кадры, превышающие MTU, могут привести к фрагментации пакетов (которые инкапсулируют сегменты) сетевым слоем, в то время как сегменты, превышающие MSS, просто отбрасываются.

На практике асимметричные значения MSS являются общими при подключении устройств с различными сетевыми характеристиками, например, мобильного устройства в сотовой сети, взаимодействующего с сервером в высокоскоростной сети ЦОД.

MSS и производительность сети

Значение MSS напрямую влияет на эффективность передачи данных, ограничивая количество данных в каждом сегменте TCP, что особенно важно для сетей с ограничениями по размеру пакетов.Взаимосвязь между MSS, пропускной способностью и эффективностью сети сложна и зависит от множества факторов, включая время в оба конца, скорость потери пакетов и алгоритмы управления перегрузками.

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

MSS в сложных сетевых топологиях

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

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

Рассмотрение вопросов безопасности

Хотя MSS является главным параметром производительности и совместимости, он также имеет последствия для безопасности, о которых должны знать сетевые администраторы.

Атаки на основе MSS

Злоумышленники могут использовать MSS для различных целей:

Защитные меры

  • Внедрение минимальных значений MSS на периферийных устройствах для предотвращения чрезвычайно малых значений
  • Мониторинг необычных шаблонов MSS, которые могут указывать на атаки или неверные конфигурации
  • Используйте государственные брандмауэры, которые могут проверять значения MSS в ожидаемых диапазонах
  • Убедитесь, что фильтрация ICMP не полностью блокирует законные сообщения PMTUD, сохраняя при этом защиту от атак на основе ICMP.

Будущие события и соображения

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

  • Принятие IPv6: IPv6 имеет различные значения MSS по умолчанию и размеры заголовков, требующие обновленных вычислений и конфигураций
  • Увеличение шифрования: Более широкое использование шифрования добавляет накладные расходы, которые должны учитываться в расчетах MSS
  • Программно-определяемые сетевые технологии: SDN позволяют более динамичную и автоматизированную оптимизацию MSS
  • Облачные и граничные вычисления: Разные сетевые пути и различная поддержка MTU требуют гибкой обработки MSS
  • 5G и мобильные сети: Мобильные сети часто имеют разные характеристики MTU, которые влияют на оптимальные значения MSS

Заключение

Определение и оптимизация максимального размера сегмента (MSS) является критическим аспектом управления сетью TCP/IP. Правильная конфигурация MSS предотвращает фрагментацию, уменьшает потерю пакетов и обеспечивает эффективную передачу данных в различных сетевых средах. Понимая взаимосвязь между MSS и MTU, используя соответствующие диагностические инструменты, такие как Wireshark и пинг-тесты, и внедряя MSS, зажимая, где это необходимо, сетевые администраторы могут значительно улучшить производительность и надежность сети.

Whether you're managing a simple network or a complex infrastructure with multiple layers of encapsulation, the principles outlined in this guide w