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.
РЕДАКТИРОВАТЬ: После более пристального взгляда на заголовки, формула выглядит для меня следующим образом:
(MAX_IP_HDR + MAX_TCP_HDR + MIN_IP_FRAG) - (MIN_IP_HDR + MIN_TCP_HDR)
Вопрос все еще стоит: почему ? Почему ядро Linux использует эту формулу, тем самым запрещая (принудительный поток) сегменты TCP, скажем, 20 байтов? Подумайте, что здесь.
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, разрешенный ядром.