cisco — Решение проблем, связанных с фрагментацией IP, а также с MTU, MSS и PMTUD, при помощи протоколов GRE и IPSEC

(например устройства распределения нагрузки – Content Switch Engines) распределяют пакеты на основе данных с 4-го по 7-й уровень. Соответственно, если пакет разбит на множественные фрагменты, у получающего устройства могут возникнуть проблемы с реализацией политик. Как избежать использования IP-фрагментации: что такое максимальный размер сегмента протокола TCP и как это работает Максимальный размер сегмента TCP (MSS) определяет максимальный объем данных, который узел намеревается принять в одной TCP/IP-датаграмме. Эта TCP/IP-датаграмма может быть фрагментирована на уровне IP. Значение MSS может передаваться в качестве опции TCP-заголовка только в сегментах SYN.

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

Размер данного сегмента TCP мог достигать 64 кбайт (максимальный размер IP- датаграммы) и мог фрагментироваться на уровне IP для последующей передачи через сеть принимающему узлу. Перед передачей полного сегмента TCP на уровень TCP узел-получатель пересобирал IP-датаграмму. Ниже приводятся несколько примеров, демонстрирующих, каким образом используются значения MSS для того, чтобы ограничить размер TCP-сегментов и, соответственно, размер IP-датаграмм. Пример 1 иллюстрирует первоначальное применение MSS. Размер буфера узла А составляет 16 кбайт, а размер буфера узла В – 8 кбайт. Узлы отправляют и получают значения MSS и настраивают собственные отправляемые MSS для передачи данных друг другу.

Обратите внимание, что узла А и узла В придется фрагментировать IP-датаграммы, размер которых больше размера блока MTU на интерфейсе, но меньше отправленного значения MSS, потому что TCP-стек может передавать данные размеров в 16 кбайт или 8 кбайт вниз на стек IP. В случае узла В пакеты придется фрагментировать дважды: один раз – перед передачей в сеть Token Ring и второй раз – перед передачей в сеть Ethernet. Сценарий 1 Узел A отправляет свое значение MSS (16 кбайт) узлу B. 1. Узел B получает от узла А значение MSS равное 16 кбайт. 2. Узел B устанавливает значение MSS для отправки равное 16 кбайт. 3. Узел B отправляет узлу А значение MSS равное 8 кбайт. 4.

Узел А получает от узла В значение MSS равное 8 кбайт. 5. Узел А устанавливает значение MSS для отправки равное 8 кбайт. 6. Для того чтобы избежать IP-фрагментации на конечных точках TCP-соединения, значение MSS было установлено равным минимальному размеру буфера и размеру MTU исходящего интерфейса (-40). Числовые значения MSS обычно на 40 байт меньше