TCP MSS в Linux має бути не менше 88 (включати / net / tcp.h):
/* Minimal accepted MSS. It is (60+60+8) - (20+20). */
#define TCP_MIN_MSS 88U
Моє запитання: звідки вони придумали "60 + 60 + 8" і чому? Я розумію, що 20 + 20 походить із заголовка IP + заголовка TCP.
EDIT: Після більш детального розгляду заголовків, формула шукає мене так:
(MAX_IP_HDR + MAX_TCP_HDR + MIN_IP_FRAG) - (MIN_IP_HDR + MIN_TCP_HDR)
Все ще стоїть питання: чому ? Чому ядро Linux використовує цю формулу, тим самим забороняючи (примусовий потік) сегментів TCP, скажімо, 20 байт? Подумайте тут iperf.
EDIT2: Ось мій випадок використання. Примушуючи низький MSS на сокет / з'єднання, всі пакети, надіслані стеком, матимуть невеликий розмір. Я хочу встановити низький рівень MSS при роботі з iperf для тестування пакетів / секунди. Я не можу отримати пакети IP розміром менше 128 байт (Ethernet кадри 142 байти) через цей нижній межа для MSS! Я хотів би максимально наблизитись до розміру кадру Ethernet у 64 байти на RFC 2544. Теоретично це повинно бути можливим: 18 + 20 + 20 <64.
TCP_MIN_MSS
.
TCP_MIN_MSS
. Чому не може бути 1? Який RFC він би зламав? Яку теоретичну / практичну проблему це спричинило б? Ви впевнені, що це "поза специфікацією"? "Різні мінімуми"? Тут є лише один мінімум інтересів: найменший MSS, дозволений ядром.