Das TCP-MSS unter Linux muss mindestens 88 sein (include / net / tcp.h):
/* Minimal accepted MSS. It is (60+60+8) - (20+20). */
#define TCP_MIN_MSS 88U
Meine Frage ist: Wo haben sie "60 + 60 + 8" gefunden und warum? Ich bekomme, dass 20 + 20 vom IP-Header + TCP-Header kommt.
EDIT: Nach einem genaueren Blick auf die Überschriften sieht die Formel für mich so aus:
(MAX_IP_HDR + MAX_TCP_HDR + MIN_IP_FRAG) - (MIN_IP_HDR + MIN_TCP_HDR)
Die Frage bleibt noch: Warum ? Warum verwendet der Linux-Kernel diese Formel und verhindert so (einen erzwungenen Fluss von) TCP-Segmenten von beispielsweise 20 Bytes? Denken Sie hier iperf.
EDIT2: Hier ist mein Anwendungsfall. Durch Erzwingen eines niedrigen MSS für Socket / Verbindung haben alle vom Stapel gesendeten Pakete eine geringe Größe. Ich möchte ein niedriges MSS einstellen, wenn ich mit iperf für Pakete / zweite Tests arbeite. Ich kann keine IP-Pakete erhalten, die kleiner als 128 Bytes (Ethernet-Frames von 142 Bytes) sind, da diese Untergrenze für das MSS liegt! Ich möchte einer Ethernet-Frame-Größe von 64 Bytes gemäß RFC 2544 so nahe kommen. Theoretisch sollte dies möglich sein: 18 + 20 + 20 <64.
TCP_MIN_MSS
.
TCP_MIN_MSS
. Warum kann es nicht 1 sein? Welchen RFC würde es brechen? Welches theoretische / praktische Problem würde es verursachen? Sind Sie sicher, dass es "außerhalb der Spezifikation" ist? "Unterschiedliche Minima"? Hier gibt es nur ein Minimum an Interesse: das kleinste vom Kernel zugelassene MSS.