Küçük istekler çalışır, büyük indirmeler takılır ve biri MSS sıkıştırmayı önerir. Bu öneri doğru sırayla denemeye değecek kadar sık doğru, körü körüne uygulandığında bir öğleden sonrayı harcatacak kadar sık yanlıştır. Aşağıdaki üç denetim gerçek bir TCP boyut sorununu UDP sorunundan, bozuk path-MTU keşfinden ve yeniden yazması gereken el sıkışmayı asla görmeyen bir sıkıştırmadan ayırır.

Arızanın biçimiyle başlayın

Boyut arızasının bir imzası vardır: bağlantı kurulur, kimlik doğrulama ve küçük yanıtlar başarılı olur, ardından tam boyutlu segment gerektiğinde aktarım süresiz olarak durur. Metni yükleyip görseli asla tamamlamayan sayfalar aynı arızanın küçük ölçeğidir. Hiçbir şey bağlanmıyorsa sorun yolun daha öncesindedir ve sıkıştırma yardımcı olmaz. Bir sıkıştırma, hiç gelmeyen bir el sıkışmayı onaramaz.

Bu imza, segment boyutunun el sıkışmada kararlaştırılmasından doğar. Her taraf TCP seçeneği olarak en büyük segment boyutunu duyurur ve gönderenler karşı tarafın duyurusuna saygı gösterir. Yol bu kadar büyük bir segmenti taşıyamıyorsa arıza daha sonra, gönderen sonunda birini denediğinde ortaya çıkar.

Bu belirtiyi okurken taşımayı gözden kaybetmeyin. Sıkıştırma bir TCP seçeneğinin yeniden yazılmasıdır, bu yüzden aynı tünel altında takılan bir sesli veya görüntülü arama MSS sorunu değildir ve bundan iyileşmez. Bir TCP seçeneğine dokunmadan önce taşımayı yazın.

Yolun bedelini biçin, sonra tünelle karşılaştırın

İki sayı önemlidir ve sık sık karıştırılır. path-MTU, yolun parçalanma olmadan taşıdığı en büyük pakettir ve IPv4 için duyurulan MSS, bu değerden IP ve TCP başlıklarının 40 baytı çıkarılmış hâlidir, IPv6 için 60 çıkarılır. Tünel kapsüllemesi, iç paket başlamadan önce bütçenin bir kısmını tüketir.

ping -M do -s 1400 198.51.100.20
tracepath 198.51.100.20

Do-not-fragment bitiyle ping, o yük boyutundaki bir paketin hayatta kalıp kalmadığını söyler; başarısız olana kadar boyutu değiştirin ve yol sınırını deneysel olarak bulmuş olursunuz. tracepath çıktısı rota boyunca keşfedilen MTU'yu bildirir; bu, çalıştığında daha hızlı, ara bir atlama sondaları süzdüğünde daha az güvenilirdir.

Şimdi tünelin yükünü çıkarın. Dış IP başlığı, UDP başlığı ve tünele özgü başlık aynı 1500 bayttan gelir, bu yüzden tipik bir Ethernet alt katmanında kullanılabilir iç MTU fiziksel bağlantının ima ettiğinden düşüktür. Hesaplanan iç MTU eşlerinizin duyurduğundan düşükse tahmin değil, gerçek bir sıkıştırma adayı bulmuşsunuzdur. Hesaplanan değer zaten eşlerin duyurusunun üzerindeyse burada durun ve başka yere bakın.

Sıkıştırmayı el sıkışmanın geçtiği yere koyun

Sıkıştırma, ağ geçidini geçerken SYN ve SYN-ACK paketlerindeki MSS seçeneğini yeniden yazarak çalışır. Kural, iki yönün de asla geçmediği bir arayüzde duruyorsa görüşme değişmeden tamamlanır ve belirti sürer, bu yüzden sonucu değerden çok konum belirler.

SymptomWhat it points toNext check
Handshake completes, large transfer stallsSegment size larger than the path can carryPath MTU against the tunnel's effective MTU
Nothing connects, small or largeRouting, firewall or keying failureNot MSS; look at the tunnel state
Only UDP applications stallDatagram size or a dropped ICMP errorPlatform-specific UDP handling, not clamping
Fixed after reconnect, returns laterClamp applied to one direction or one interfaceRule placement and the handshake path

Yön diğer yarıdır. Tek yönü sıkıştırmak akışların yarısını düzeltir ve geri kalanını aralıklı görünen bir biçimde başarısız bırakır, bu yüzden iletilen trafiğin iki yönüne de uygulayın. Tünel arayüzü için klasik Linux biçimi SYN paketleriyle eşleşen bir mangle kuralıdır:

iptables -t mangle -A FORWARD -o tun0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

--clamp-mss-to-pmtu gerçekte ne yapar, dikkat edin: değeri rotanın MTU'sundan türetir, bu her zaman tünelin gerçek yük bütçesi değildir. İç rota ile dış yolun farklı olduğu rota tabanlı bir tünelde, önceki denetimde hesaplanan açık bir değer otomatik olandan daha öngörülebilirdir.

Yeni bir bağlantıyla doğrulayın ve geri bildirimi canlı tutun

Kurulmuş bir bağlantı anlaşılan MSS'yi korur, bu yüzden aynı oturumda test etmek hiçbir şey kanıtlamaz. Değişiklikten sonra yeni bir bağlantı açın ve anlaşılan değeri doğrudan okuyun, tesadüfen tamamlanan bir aktarımdan çıkarmak yerine.

ss -tin dst 198.51.100.20
iptables -t mangle -S | grep TCPMSS

İlk komut soketin MSS'sini tıkanıklık durumuyla birlikte bildirir; bu, sıkıştırmanın etkili olduğunun en hızlı onayıdır. İkincisi, eklediğinizi düşündüğünüz kuralın var olan kural olduğunu, yerleştirildiği tabloda doğrular.

Sonra düzeltmediğiniz mekanizmayı koruyun. path-MTU keşfi, ICMP fragmentation-needed mesajlarının gönderene ulaşmasına bağlıdır, bu yüzden onları düşüren bir güvenlik duvarı doğru sıkıştırma olsa bile büyük aktarımları bozmaya devam edecektir. Bu mesajlara tünel yolu için izin verin ya da sıkıştırmanın seçtiğiniz bir politikayı telafi ettiğini kabul edin.

Son olarak, sıkıştırmayı bir ayar düğmesi olarak görme cazibesine direnin. Segment boyutunu sınırlar ve hiç ihtiyaç duymayan yollarda iş hacmine mal olur. Üç denetimden sonra uygulanırsa hedefli bir onarımdır; ilk uygulanırsa özgün arızayı gizleyen ve sonraki her teste ikinci bir değişken ekleyen bir değişikliktir. Bu takas bilinçli yapılmalıdır, varsayılan olarak değil.

Ölçtüğünüz path-MTU'yu, çıkardığınız tünel yükünü, eklediğiniz kuralı ve sonrasında gördüğünüz MSS'yi yazın. Dört sayı bir sonraki olayı soruşturma yerine başvuru hâline getirir.

İlgili makaleler