Kiçik sorğular işləyir, böyük yükləmələr donur və kimsə MSS sıxılmasını təklif edir. Bu təklif düzgün ardıcıllıqla sınamağa dəyəcək qədər tez-tez haqlı, kor-koranə tətbiq etsəniz bir günorta itirməyə dəyəcək qədər tez-tez yanlışdır. Aşağıdakı üç yoxlama əsl TCP ölçü problemini UDP probleminə, pozulmuş path-MTU kəşfinə və yenidən yazmalı olduğu əl sıxışmanı heç vaxt görməyən sıxılmaya ayırır.

Uğursuzluğun formasından başlayın

Ölçü nasazlığının bir imzası var: bağlantı qurulur, autentifikasiya və kiçik cavablar uğur qazanır, sonra tam ölçülü seqmentə ehtiyac yarananda ötürmə qeyri-müəyyən müddət dayanır. Mətni yükləyib şəkli heç vaxt tamamlamayan səhifələr daha kiçik miqyasda eyni nasazlıqdır. Ümumiyyətlə heç nə bağlanmırsa, problem yolda daha erkən yerdədir və sıxma kömək etməyəcək. Sıxma heç vaxt gəlməyən əl sıxışmanı bərpa edə bilməz.

Bu imza ona görə mövcuddur ki, seqment ölçüsü məhz əl sıxışmada razılaşdırılır. Hər tərəf maksimum seqment ölçüsünü TCP opsiyası kimi elan edir və göndərənlər qarşı tərəfin elanına hörmət edir. Yol bu qədər böyük seqmenti daşıya bilmirsə, nasazlıq sonra, göndərən nəhayət onu sınayanda ortaya çıxır.

Bu simptomu oxuyarkən nəqliyyatı gözdən qaçırmayın. Sıxma TCP opsiyasının yenidən yazılmasıdır, ona görə eyni tunel altında donan səs və ya video zəng MSS problemi deyil və onunla yaxşılaşmayacaq. TCP opsiyasına toxunmazdan əvvəl nəqliyyatı yazın.

Yolu qiymətləndirin, sonra tunellə müqayisə edin

İki rəqəm vacibdir və çox vaxt qarışdırılır. path-MTU yolun fraqmentasiyasız daşıyacağı ən böyük paketdir, IPv4 üçün elan edilən MSS isə həmin dəyərdən IP və TCP başlıqlarının 40 baytı çıxılmış halıdır, IPv6 üçün isə 60 çıxılır. Tunel inkapsulyasiyası daxili paket hələ başlamamış büdcənin bir hissəsini yeyir.

ping -M do -s 1400 198.51.100.20
tracepath 198.51.100.20

Do-not-fragment biti ilə ping sizə o yük ölçüsündə paketin sağ qalıb-qalmadığını deyir; ölçünü uğursuz olana qədər dəyişin və yol limitini empirik olaraq tapmış olarsınız. tracepath çıxışı marşrut boyunca aşkar edilən MTU-nu bildirir; bu işləyəndə daha sürətli, aralıq hop zondları süzəndə isə daha az etibarlıdır.

İndi tunelin yükünü çıxın. Xarici IP başlığı, UDP başlığı və tunelə xas başlıq hamısı eyni 1500 baytdan çıxır, ona görə tipik Ethernet altlığında istifadə oluna bilən daxili MTU fiziki linkin təklif etdiyindən aşağıdır. Hesablanmış daxili MTU qarşı tərəflərin elan etdiyindən aşağıdırsa, təxmin deyil, əsl sıxma namizədi tapmısınız. Hesablanmış dəyər artıq qarşı tərəflərin elan etdiyindən yuxarıdırsa, burada dayanın və başqa yerdə axtarın.

Sıxmanı əl sıxışmanın keçdiyi yerə qoyun

Sıxma SYN və SYN-ACK paketlərindəki MSS opsiyasını onlar şlüzdən keçərkən yenidən yazmaqla işləyir. Qayda heç bir istiqamətin keçmədiyi interfeysdə oturursa, danışıqlar dəyişmədən tamamlanır və simptom qalır; buna görə nəticəni dəyərdən çox yerləşdirmə həll edir.

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

İstiqamət digər yarımdır. Bir istiqaməti sıxmaq axınların yarısını düzəldir və qalanını fasiləli görünən şəkildə uğursuz qoyur, ona görə ötürülən trafikin hər iki istiqamətinə tətbiq edin. Tunel interfeysi üçün klassik Linux forması SYN paketlərinə uyğun gələn mangle qaydası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 əslində nə etdiyinə diqqət yetirin: dəyəri marşrutun MTU-sundan götürür, bu isə həmişə tunelin həqiqi yük büdcəsi deyil. Daxili marşrutla xarici yolun fərqləndiyi marşruta əsaslanan tuneldə əvvəlki yoxlamada hesablanmış açıq dəyər avtomatik dəyərdən daha proqnozlaşdırıla biləndir.

Yeni bağlantı ilə yoxlayın və əlaqəni canlı saxlayın

Qurulmuş bağlantı razılaşdırdığı MSS-i saxlayır, buna görə eyni sessiyada sınamaq heç nə sübut etmir. Dəyişiklikdən sonra təzə bağlantı açın və razılaşdırılmış dəyəri bitən ötürmədən çıxarmaq əvəzinə birbaşa oxuyun.

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

Birinci əmr soketin MSS-ini tıxanma vəziyyəti ilə birlikdə bildirir; bu, sıxmanın qüvvəyə mindiyinin ən sürətli təsdiqidir. İkinci əmr isə hesab etdiyiniz qaydanın həqiqətən mövcud olduğunu, yerləşdirildiyi cədvəldə təsdiqləyir.

Sonra düzəltmədiyiniz mexanizmi qoruyun. path-MTU kəşfi ICMP fragmentation-needed mesajlarının göndərənə çatmasından asılıdır, buna görə onları atan firewall düzgün sıxma olsa belə böyük ötürmələri pozmağa davam edəcək. Bu mesajlara tunel yolu üçün icazə verin və ya sıxmanın seçdiyiniz siyasəti kompensasiya etdiyini qəbul edin.

Nəhayət, sıxmanı tənzimləmə düyməsi kimi görmək istəyinə qarşı durun. O, seqment ölçüsünü məhdudlaşdırır və buna heç vaxt ehtiyac duymayan yollarda ötürmə qabiliyyətini azaldır. Üç yoxlamadan sonra tətbiq olunanda hədəfli təmirdir; birinci tətbiq olunanda ilkin nasazlığı gizlədən və hər sonrakı sınağa ikinci dəyişən əlavə edən dəyişiklikdir. Bu mübadiləni qəsdən etməyə dəyər, susmaya görə deyil.

Ölçdüyünüz path-MTU-nu, çıxdığınız tunel yükünü, əlavə etdiyiniz qaydanı və sonra gördüyünüz MSS-i yazın. Dörd rəqəm növbəti hadisəni araşdırma yerinə qısa axtarışa çevirir.

Əlaqəli məqalələr