Linux'taki TCP MSS en az 88 olmalıdır (include / net / tcp.h):
/* Minimal accepted MSS. It is (60+60+8) - (20+20). */
#define TCP_MIN_MSS 88U
Sorum şu: "60 + 60 + 8" i nereden buldular ve neden? 20 + 20 IP üstbilgisi + TCP üstbilgisinden geliyor.
DÜZENLEME: Başlıklara daha yakından baktıktan sonra formül beni şöyle arar:
(MAX_IP_HDR + MAX_TCP_HDR + MIN_IP_FRAG) - (MIN_IP_HDR + MIN_TCP_HDR)
Soru hala duruyor: neden ? Linux çekirdeği neden bu formülü kullanıyor, dolayısıyla 20 baytlık TCP segmentlerini (zorunlu bir şekilde akışını) yasaklıyor? Burada iperf düşünün.
EDIT2: İşte benim kullanım durumum. Soket / bağlantıda düşük bir MSS zorlayarak , yığın tarafından gönderilen tüm paketlerin küçük bir boyutu olacaktır. Paket / saniye testi için iperf ile çalışırken düşük bir MSS ayarlamak istiyorum. MSS için bu alt sınır nedeniyle telde 128 bayttan (142 bayt Ethernet çerçeveleri) daha küçük IP paketleri alamıyorum! Ethernet çerçeve boyutuna RFC 2544'e göre 64 bayt kadar yaklaşmak istiyorum. Teorik olarak bu mümkün olmalı: 18 + 20 + 20 <64.
TCP_MIN_MSS
.
TCP_MIN_MSS
. Neden 1 olamaz? Hangi RFC kırılır? Hangi teorik / pratik soruna neden olur? Bunun "teknik özelliklerin dışında" olduğundan emin misiniz? "Farklı minima" mı? Burada yalnızca bir minimum ilgi vardır: çekirdek tarafından izin verilen en küçük MSS.