El TCP MSS en Linux debe tener al menos 88 (incluir / net / tcp.h):
/* Minimal accepted MSS. It is (60+60+8) - (20+20). */
#define TCP_MIN_MSS 88U
Mi pregunta es: ¿dónde se les ocurrió "60 + 60 + 8" y por qué? Entiendo que 20 + 20 proviene del encabezado IP + encabezado TCP.
EDITAR: después de mirar más de cerca los encabezados, la fórmula me busca así:
(MAX_IP_HDR + MAX_TCP_HDR + MIN_IP_FRAG) - (MIN_IP_HDR + MIN_TCP_HDR)
La pregunta sigue en pie: ¿por qué ? ¿Por qué el kernel de Linux utiliza esta fórmula, prohibiendo (un flujo forzado de) segmentos TCP de, digamos, 20 bytes? Piensa iperf aquí.
EDIT2: Aquí está mi caso de uso. Al forzar un MSS bajo en el socket / conexión, todos los paquetes enviados por la pila tendrán un tamaño pequeño. Quiero establecer un MSS bajo cuando trabajo con iperf para paquetes / segunda prueba. ¡No puedo obtener paquetes IP de menos de 128 bytes (tramas Ethernet de 142 bytes) en el cable debido a este límite inferior para el MSS! Me gustaría acercarme al tamaño de trama de Ethernet de 64 bytes según RFC 2544. Teóricamente esto debería ser posible: 18 + 20 + 20 <64.
TCP_MIN_MSS
.
TCP_MIN_MSS
. ¿Por qué no puede ser 1? ¿Qué RFC se rompería? ¿Qué problema teórico / práctico causaría? ¿Estás seguro de que está "fuera de las especificaciones"? ¿"Mínimos diferentes"? Aquí solo hay un mínimo de interés: el MSS más pequeño permitido por el núcleo.