INTEGRITY Документация

Максимальный размер передаваемого блока данных и максимальный размер сегмента

Поскольку Cloudflare WAN оборачивает трафик в дополнительные заголовки (инкапсуляция), эффективный объём места для исходных данных в каждом пакете сокращается. Если не учитывать эти накладные расходы, пакеты могут оказаться слишком большими для сетевого пути и будут отброшены или фрагментированы, что приведёт к снижению производительности или обрыву соединений. На этой странице описаны два ключевых параметра, которые необходимо настроить: максимальный размер передаваемого блока (MTU) и максимальный размер сегмента (MSS).

MTU и MSS

максимальная единица передачи (MTU) это показатель, обозначающий наибольший пакет данных, который примет устройство, подключённое к сети. MTU почти всегда относится к уровню 3 модели OSI (Open Systems Interconnection) в сетевых технологиях и включает весь пакет целиком, в том числе все заголовки (Transmission Control Protocol (TCP), Internet Protocol (IP) и так далее) и сами данные (полезную нагрузку). Например, пакеты не должны превышать 1,500 байт, чтобы маршрутизироваться через интернет.

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

Распространённое заблуждение о MSS/MTU состоит в том, что настройка этих значений якобы негативно влияет на производительность. Хотя небольшое снижение производительности действительно возможно, гораздо хуже не настраивать эти значения с учётом особенностей вашей сети.

Инкапсуляция

Поскольку Cloudflare WAN использует инкапсуляцию для предоставления своих услуг, важно понимать, почему в этом случае имеют значение MTU и MSS.

Инкапсуляция добавляет байты к пакету, потому что Cloudflare добавляет новый IP-заголовок и (часто) какой-либо инкапсулирующий заголовок к каждому пакету. Например, в случае Generic Routing Encapsulation (GRE) для Internet Protocol version 4 (IPv4) инкапсуляция добавляет 24 байта: 20 байт на заголовок IPv4 и 4 байта на заголовок туннеля GRE.

Сетевому интерфейсу, выполняющему инкапсуляцию GRE, необходимо учитывать дополнительные накладные расходы, уменьшая значение MTU. Поскольку максимальный размер MTU составляет 1,500 байт, для IPv4 это означает, что MTU становится равным 1,476 байт (исходные 1,500 байт минус 24 байта на инкапсуляцию GRE). Этот уменьшенный MTU определяет максимальный размер IP-пакета, который может инкапсулировать GRE.

Фрагментация

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

Установка бита DF (do not fragment) в заголовке TCP в значение 1 означает, что сеть должна отбросить пакет, а не фрагментировать его, если пакет больше значения MTU, которое могут принять промежуточные сетевые устройства. Большинство реализаций TCP устанавливают бит DF в 1 чтобы избежать возможных проблем, вызванных фрагментацией.

Если у вас возникают проблемы с фрагментацией и вы не можете задать MSS clamp, Cloudflare может сбрасывать бит DF за вас. При включении этой опции Cloudflare фрагментирует пакеты размером более 1,500 байт, а ваша инфраструктура собирает их заново после декапсуляции. Используйте эту опцию только в крайнем случае. За дополнительной информацией обратитесь в свою команду по работе с аккаунтом.

Фрагментация в Cloudflare WAN

Рассмотрим датаграмму UDP размером 3,000 байт (8 байт для заголовка UDP + 2,992 байт для данных UDP). Чтобы уместиться в стандартный MTU размером 1,500 байт, эта датаграмма UDP будет фрагментирована на три IP-пакета следующим образом:

Диаграмма, показывающая UDP-дейтаграмму и её различные компоненты.

Предположим, что UDP-дейтаграмма имеет исходный порт 389 и предназначен для IP-адреса клиента Cloudflare WAN. Предположим также, что у клиента Cloudflare WAN настроено правило межсетевого экрана, которое отбрасывает UDP-трафик с исходным портом 389, общий Lightweight Directory Access Protocol (CLDAP) без установления соединения вектор атаки с отражением.

Все три предыдущих фрагмента пакета поступят в Cloudflare, но только первый фрагмент содержит заголовок UDP с информацией об исходном порте. Второй и третий фрагменты содержат данные UDP, но не содержат информации заголовка UDP.

Итак, вопрос в следующем: какие из этих фрагментов Cloudflare отбрасывает, а какие доставляет клиенту? Если Cloudflare отбрасывает только первые части фрагментированных пакетов, оставшиеся части все равно могут создавать большой объем трафика во время атаки типа «отказ в обслуживании» (DoS).

Как Cloudflare обрабатывает фрагменты

На следующей схеме показано, как три фрагмента UDP из предыдущего примера проходят через Cloudflare и Cloudflare WAN. Основные выводы:

Во всех случаях Cloudflare отправляет клиенту все фрагменты.

Диаграмма, показывающая, как Cloudflare обрабатывает фрагментацию.

MSS clamping

Maximum segment size (MSS) представляет собой параметр TCP, который ограничивает размер TCP-сегментов. Пакеты SYN устанавливают этот параметр в ходе трёхэтапного рукопожатия.

По умолчанию конечная точка TCP задает значение MSS на основе MTU своего локального сетевого интерфейса. Например, для IPv4 при MTU 1500 байт значение MSS составит 1460 байт (1500 байт минус 20 байт заголовка IPv4 минус 20 байт заголовка TCP).

MSS представляет собой инструмент, который можно использовать для настройки поведения размера пакетов TCP. Если конечная точка TCP находится за сетью с уменьшенным значением MTU, изменение значения MSS в соответствии с фактическим значением MTU пути вынуждает удалённые конечные точки отправлять пакеты, помещающиеся в указанный MTU. Так, если конечная точка TCP IPv4 находится за туннелем GRE с MTU 1,476 байт, значение MSS в её пакетах TCP SYN должно составлять 1,436 байт (1,476 байт минус 20 байт заголовка IPv4, минус 20 байт заголовка TCP).

Один из способов изменить настройку MSS: изменить MTU сетевого интерфейса в WAN-интерфейсе маршрутизатора так, чтобы он соответствовал path MTU. Другой способ изменить MSS: применить MSS clamp, при котором промежуточное сетевое устройство, например маршрутизатор, настраивается так, чтобы изменять опцию TCP MSS на лету при прохождении пакетов через него. Обратите внимание, что изменение MTU на интерфейсе промежуточного сетевого устройства не то же самое, что применение MSS clamp, и оно не изменяет значение TCP MSS.

См. рекомендации по MSS clamping с информацией о том, какое значение следует задать для MSS clamping в зависимости от типа туннеля.

рекомендации по MSS clamping

Туннели GRE как off-ramp

Значение MSS зависит от настройки вашей сети.

Туннели IPsec

Для туннелей IPsec нужное значение зависит от настройки вашей сети. Значение MSS clamping ниже, чем для туннелей GRE, поскольку физический интерфейс видит зашифрованные пакеты IPsec, а не TCP-пакеты, к которым MSS clamping не применяется.