Кратко

  • Опция MSS с Kind 2 и длиной 4 передаётся в SYN и указывает максимальный объём данных TCP, который отправитель опции готов принять в одном сегменте.
  • Направления независимы. Значение не включает заголовки IP и TCP; отправитель дополнительно учитывает фактические заголовки и ограничения маршрута.

Два SYN, два предела приёма

Слово «переговоры» вводит в заблуждение. Значение от A описывает приём у A, а значение от B — приём у B. Поэтому различие значений нормально: они ограничивают противоположные потоки.

Формат определён точно: Kind 2, Length 4 и 16-битное значение MSS. RFC 9293 разрешает передавать опцию в первоначальном запросе с SYN и запрещает её в последующих сегментах. Это ограничение устанавливается при открытии соединения, а не обновляется непрерывно.

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

RFC 879 ещё в 1983 году отмечал, что MSS часто ошибочно называют переговорами. Получатель сообщает, что может принять, а отправитель формирует пакет.

Почему значением по умолчанию было 536

В описанном RFC 879 случае IPv4 хост должен был уметь собрать дейтаграмму размером 576 октетов. После вычитания минимальных 20 октетов заголовка IPv4 и 20 октетов заголовка TCP оставалось 536 октетов данных TCP.

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

MSS также не является обнаружением MTU маршрута. PMTUD исследует свойство пути, которое может измениться; MSS передаётся при открытии и описывает приёмную способность конечной точки.

Исправление, касающееся опций

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

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

Что может изменить промежуточное устройство

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

Захват трафика подтверждает значение, видимое в конкретной точке. Он не обязательно показывает исходное объявление, MTU всех переходов или причину выбора меньшей нагрузки.

Исторический вывод прост: получатель объявляет предел, отправитель строит пакет, а маршрут остаётся внешним ограничением.

Источники