Максимальный размер сегмента ( MSS ) — это параметр поля Options заголовка TCP , который определяет наибольший объем данных, указанный в байтах , который компьютер или коммуникационное устройство может получить в одном сегменте TCP . Он не учитывает заголовок TCP или заголовок IP (в отличие, например, от MTU для датаграмм IP). [1] : §3.7.1 Датаграмма IP , содержащая сегмент TCP, может быть самодостаточной в пределах одного пакета или может быть восстановлена из нескольких фрагментированных частей; в любом случае ограничение MSS применяется к общему объему данных, содержащихся в конечном, восстановленном сегменте TCP.
Чтобы избежать фрагментации на уровне IP , хост должен указать максимальный размер сегмента, равный наибольшей IP-дейтаграмме, которую хост может обработать, за вычетом размеров заголовков IP и TCP. Поэтому хосты IPv4 должны иметь возможность обрабатывать MSS в 536 октетов (= 576 − 20 − 20), а хосты IPv6 должны иметь возможность обрабатывать MSS в 1220 октетов (= 1280 − 40 − 20). [1] : §3.7.1
Небольшие значения MSS уменьшат или устранят фрагментацию IP, но приведут к более высоким накладным расходам . [2]
Каждое направление потока данных может использовать свой MSS.
Для большинства пользователей компьютеров опция MSS устанавливается операционной системой .
Размер опций TCP (переменная 0–320 бит, в единицах по 32 бита) должен быть вычтен из размера MSS, если опции TCP включены. Например, временные метки TCP включены по умолчанию на платформах Linux.
По умолчанию максимальный размер сегмента TCP для IPv4 равен 536. Для IPv6 он равен 1220. [1] : §3.7.1 Если хост хочет установить максимальный размер сегмента на значение, отличное от значения по умолчанию, максимальный размер сегмента указывается как опция TCP, изначально в пакете TCP SYN во время установления соединения TCP . Значение не может быть изменено после установления соединения.
Для того чтобы уведомить MSS на другом конце, межуровневое взаимодействие осуществляется следующим образом: [3] : §11
При отправке сегментов TCP на другой конец межуровневое взаимодействие осуществляется следующим образом: [3] : §11
MSS иногда путают с MTU/PMTU , что является характеристикой базового уровня связи , в то время как MSS применяется конкретно к TCP и, следовательно, к транспортному уровню . Эти два понятия схожи тем, что ограничивают максимальный размер полезной нагрузки, переносимой соответствующей им единицей данных протокола (кадром для MTU, сегментом TCP для MSS), и связаны между собой, поскольку MSS не может превышать MTU для своего базового канала (принимая во внимание накладные расходы любых заголовков, добавленных уровнями ниже TCP). Однако разница, помимо применения к разным уровням, заключается в том, что MSS может иметь разное значение в любом направлении, а также в том, что кадры, превышающие MTU, могут привести к фрагментации пакетов (которые инкапсулируют сегменты) сетевым уровнем , в то время как сегменты, превышающие MSS, просто отбрасываются.