Maximum segment size

MSS (англ. Maximum segment size) является параметром протокола TCP и определяет максимальный размер полезного блока данных в байтах для TCP-пакета (сегмента). Таким образом этот параметр не учитывает длину заголовков TCP и IP[1].

Для установления корректной TCP-сессии с удалённым хостом должно соблюдаться следующее условие:

  • MSS + заголовок TCP + заголовок IP ≤ MTU

Таким образом, максимальный размер MSS = MTU − размер заголовка IP − размер заголовка TCP.

Так каждый хост требует доступности для MSS:

  • IPv4 — последних 536 октетов (= 576 − 20 − 20)
  • IPv6 — последних 1220 октетов (= 1280 − 40 − 20).

Обычно конкретное значение MSS определяется операционной системой во время «TCP-рукопожатия» с целевым хостом исходя из значений MTU или PMTUD (англ. Path MTU Discovery)[2].

Однако промежуточный маршрутизатор (например, имея линк с малым MTU) может подслушивать TCP SYN пакеты и подменять значения MSS, анонсируемые конечными устройствами. В результате конечные узлы "договорятся" о меньших MSS и пакеты не придётся фрагментировать.

Примечания

  1. RFC 879, page 2, Section 3, «The MSS counts only data octets in the segment, it does not count the TCP header or the IP header».
  2. PMTUD, «О PPPoE, MTU и проблеме Path MTU Discovery Black Hole».
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.