TCP MSS in Linux deve essere almeno 88 (include / net / tcp.h):
/* Minimal accepted MSS. It is (60+60+8) - (20+20). */
#define TCP_MIN_MSS 88U
La mia domanda è: dove sono venuti fuori con "60 + 60 + 8" e perché? Ho capito che 20 + 20 provengono dall'intestazione IP + dall'intestazione TCP.
EDIT: Dopo aver dato un'occhiata più da vicino alle intestazioni, la formula mi cerca così:
(MAX_IP_HDR + MAX_TCP_HDR + MIN_IP_FRAG) - (MIN_IP_HDR + MIN_TCP_HDR)
La domanda è ancora valida: perché ? Perché il kernel Linux usa questa formula, proibendo così (un flusso forzato di) segmenti TCP, diciamo, di 20 byte? Pensa iperf qui.
EDIT2: ecco il mio caso d'uso. Forzando un MSS basso su socket / connessione, tutti i pacchetti inviati dallo stack avranno dimensioni ridotte. Voglio impostare un MSS basso quando lavoro con iperf per pacchetti / secondo test. Non riesco a ottenere pacchetti IP più piccoli di 128 byte (frame Ethernet di 142 byte) sul cavo a causa di questo limite inferiore per MSS! Vorrei avvicinarmi a una dimensione di frame Ethernet di 64 byte secondo RFC 2544. Teoricamente questo dovrebbe essere possibile: 18 + 20 + 20 <64.
TCP_MIN_MSS
.
TCP_MIN_MSS
. Perché non può essere 1? Quale RFC si romperebbe? Quale problema teorico / pratico provocherebbe? Sei sicuro che sia "fuori dalle specifiche"? "Minimi diversi"? C'è solo un minimo di interesse qui: il più piccolo MSS consentito dal kernel.