Максимальный размер сегмента
Максимальный размер сегмента ( MSS ) — это параметр «Параметры» поля заголовка 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 размером 1 220 октетов (= 1 280 – 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
- Сетевой драйвер (ND) или интерфейс должен знать максимальную единицу передачи (MTU) напрямую подключенной сети.
- IP-адрес должен запросить у сетевого драйвера максимальную единицу передачи.
- TCP должен запросить у IP максимальный размер данных дейтаграммы (MDDS). Это MTU минус длина IP-заголовка (MDDS = MTU – IPHdrLen).
- При открытии соединения TCP может отправить опцию MSS со значением, равным: MDDS — TCPHdrLen. Другими словами, значение MSS для отправки: MSS = MTU - TCPHdrLen - IPHdrLen.
При отправке TCP-сегментов на другой конец межуровневая связь осуществляется следующим образом: [3] : §11
- TCP должен определить максимальный размер данных сегмента (MSDS) либо на основе значения по умолчанию, либо на основе полученного значения параметра MSS.
- TCP должен определить, возможна ли фрагментация источника (путем запроса IP) и желательна ли она.
- Если это так, TCP может передать сегменты IP (включая заголовок TCP) до MSDS + TCPHdrLen.
- В противном случае TCP может передать сегменты IP (включая заголовок TCP) вплоть до меньшего из (MSDS + TCPHdrLen) и MDDS.
- IP проверяет длину данных, передаваемых ему по TCP. Если длина меньше или равна MDDS, IP присоединяет заголовок IP и передает его ND. В противном случае IP должен выполнить фрагментацию источника.
МСС и МТУ
[ редактировать ]MSS иногда путают с MTU/PMTU , который является характеристикой нижележащего канального уровня , тогда как MSS применяется конкретно к TCP и, следовательно, к транспортному уровню . Они схожи тем, что ограничивают максимальный размер полезной нагрузки, переносимой соответствующим блоком данных протокола (кадр для MTU, сегмент TCP для MSS), и связаны между собой, поскольку MSS не может превышать MTU для своего базового канала (с учетом служебных данных). любых заголовков, добавленных уровнями ниже TCP). Однако разница, помимо применения к разным уровням, заключается в том, что MSS может иметь разное значение в любом направлении, а также в том, что кадры, превышающие MTU, могут привести к фрагментации пакетов (которые инкапсулируют сегменты) на MTU, могут быть фрагментированы на сетевом уровне сетевом уровне , в то время как сегменты, превышающие . MSS просто отбрасываются.
Дальнейшее чтение
[ редактировать ]- Комер, Дуглас Э. (2006). Межсетевое взаимодействие с TCP/IP . Том. 1 (5/Е изд.). Река Аппер-Сэддл, Нью-Джерси, США: Прентис-Холл.
- Козерок, Чарльз М. (20 сентября 2005 г.). Руководство TCP/IP (изд. 3.0) . Проверено 8 сентября 2011 г.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б с В. Эдди, изд. (август 2022 г.). Протокол управления передачей (TCP) . Рабочая группа по интернет-инжинирингу . дои : 10.17487/RFC9293 . ISSN 2070-1721 . СТД 7. RFC 9293 . Интернет-стандарт 7. Устарел. RFC 793, 879, 2873, 6093, 6429, 6528 and 6691. Updates RFC 1011 , 1122 и 5961 .
- ^ Руководство TCP/IP , Максимальный размер сегмента TCP (MSS) и связь с размером IP-дейтаграммы
- ^ Jump up to: а б Дж. Постель (ноябрь 1983 г.). Максимальный размер сегмента TCP и связанные темы . Сетевая рабочая группа. дои : 10.17487/RFC0879 . РФК 879 . Устаревший. Устарело RFC 7805 and 9293. Updated by РФК 6691 .