Назад | Перейти на главную страницу

Существует ли минимальный максимальный размер сегмента TCP (MSS)?

У меня есть сетевое соединение OpenVPN VPN, куда по какой-то причине отправляется MSS размером 60 (пока не знаю, почему). РЕДАКТИРОВАТЬ: Причина: OpenVPN mssfix по ошибке был установлен на 1

36  92.064383   10.102.0.43 10.1.151.50 TCP 52  49991 → 63760 [SYN] Seq=0 Win=65535 Len=0 MSS=60 WS=128 SACK_PERM=1
37  92.064763   10.1.151.50 10.102.0.43 TCP 52  63760 → 49991 [SYN, ACK] Seq=0 Ack=1 Win=65535 Len=0 MSS=1460 WS=256 SACK_PERM=1

В этой сети есть два устройства, которые ведут себя по-разному.

ПК устанавливает размер MSS на 536, но ПЛК устанавливает его на 60, как и было запрошено.

41  92.171676   10.1.151.50 10.102.0.43 FTP-DATA    576 FTP Data: 536 bytes (PASV) (RETR TCData.br)
67  17.385576   10.1.151.1  10.102.0.43 FTP-DATA    100 FTP Data: 60 bytes (PASV) (RETR TCData.br)

Правильно ли это реализовано с обеих сторон?

Я знаю, что по умолчанию TCP MSS - 536, но есть ли минимальный размер?

Минимальный MSS контролируется минимальным MTU IP-дейтаграммы, равным 576 байтам. Поскольку TCP использует 40 байт служебных данных, минимальный размер MSS составляет 536 байт. Если используется больше байтов, скажем, для временных меток, то MSS будет меньше

Это можно найти в IP RFC 791, раздел 3.1. Формат заголовка Интернета -> Общая длина.

Общая длина - это длина дейтаграммы, измеряемая в октетах, включая Интернет-заголовок и данные. Это поле позволяет иметь длину дейтаграммы до 65 535 октетов. Такие длинные датаграммы непрактичны для большинства хостов и сетей. Все хосты должны быть готовы принять дейтаграммы до 576 октетов (независимо от того, прибывают ли они целыми или фрагментами). Рекомендуется, чтобы хосты отправляли дейтаграммы размером более 576 октетов только в том случае, если у них есть уверенность в том, что место назначения готово принять более крупные датаграммы.

The number 576 is selected to allow a reasonable sized data block to
be transmitted in addition to the required header information.  For
example, this size allows a data block of 512 octets plus 64 header
octets to fit in a datagram.  The maximal internet header is 60
octets, and a typical internet header is 20 octets, allowing a
margin for headers of higher level protocols.