Maximum segment size
MSS (англ. Maximum segment size) является параметром протокола TCP и определяет максимальный размер полезного блока данных в байтах для TCP-пакета (сегмента). Таким образом этот параметр не учитывает длину заголовков TCP и IP[1].
Для установления корректной TCP-сессии с удалённым хостом должно соблюдаться следующее условие:
- MSS + заголовок TCP + заголовок IP ≤ MTU
Таким образом, максимальный размер MSS = MTU − размер заголовка IP − размер заголовка TCP.
Так каждый хост требует доступности для MSS:
Обычно конкретное значение MSS определяется операционной системой во время «TCP-рукопожатия» с целевым хостом исходя из значений MTU или PMTUD[en] (англ. Path MTU Discovery)[2].
Однако промежуточный маршрутизатор (например, имея линк с малым MTU) может подслушивать TCP SYN пакеты и подменять значения MSS, анонсируемые конечными устройствами. В результате конечные узлы "договорятся" о меньших MSS и пакеты не придётся фрагментировать.
ПримечанияПравить
- ↑ RFC 879 Архивная копия от 11 ноября 2020 на Wayback Machine, page 2, Section 3, «The MSS counts only data octets in the segment, it does not count the TCP header or the IP header».
- ↑ PMTUD Архивная копия от 11 июля 2018 на Wayback Machine, «О PPPoE, MTU и проблеме Path MTU Discovery Black Hole».