TCP MSS di Linux minimal harus 88 (termasuk / net / tcp.h):
/* Minimal accepted MSS. It is (60+60+8) - (20+20). */
#define TCP_MIN_MSS 88U
Pertanyaan saya adalah: dari mana mereka datang dengan "60 + 60 + 8" dan mengapa? Saya mendapatkan bahwa 20 + 20 berasal dari header IP + header TCP.
EDIT: Setelah melihat lebih dekat pada header, rumusnya terlihat seperti ini:
(MAX_IP_HDR + MAX_TCP_HDR + MIN_IP_FRAG) - (MIN_IP_HDR + MIN_TCP_HDR)
Pertanyaannya masih ada: mengapa ? Mengapa kernel Linux menggunakan rumus ini, sehingga melarang (aliran paksa) segmen TCP, katakanlah, 20 byte? Pikirkan iperf di sini.
EDIT2: Ini kasus penggunaan saya. Dengan memaksa MSS rendah pada soket / koneksi, semua paket yang dikirim oleh stack akan memiliki ukuran kecil. Saya ingin menetapkan MSS rendah ketika bekerja dengan iperf untuk paket / pengujian kedua. Saya tidak bisa mendapatkan paket IP yang lebih kecil dari 128 byte (frame Ethernet 142 byte) pada kabel karena batas bawah ini untuk MSS! Saya ingin mendapatkan sedekat mungkin dengan ukuran frame Ethernet 64 byte seperti RFC 2544. Secara teoritis ini harus dimungkinkan: 18 + 20 + 20 <64.
TCP_MIN_MSS
.
TCP_MIN_MSS
. Kenapa tidak bisa 1? RFC apa yang akan pecah? Teori / masalah praktis apa yang akan ditimbulkannya? Apakah Anda yakin itu "di luar spesifikasi"? "Minima berbeda"? Hanya ada satu minimum minat di sini: MSS terkecil yang diizinkan oleh kernel.