Бет жүктеледі, шағын API шақыруы қайтады, содан кейін файл жүктеу клиент бас тартқанша ілініп тұрады. Сервер журналында мұны түсіндіретін ештеңе жоқ, өйткені пакеттер жолдың ортасында пайдалы жауап қайтармай-ақ тасталған. Бұл үлгі — MTU қара құрдымы: жіберуші ойлағаннан тар байланыс, үстіне оны айтудан үнсіз бас тарту. Сәтсіз болатын өлшем қайталанады, дәл сол оны диагностикалауға болатын етеді.

Құрдымды қара ететін не

Әр байланыстың ең үлкен тасымалдау бірлігі бар, ал келесі секірістің шегінен үлкен пакет не бөлшектенуі, не соны айтатын ICMP хабарламасымен қабылданбауы керек. Жол MTU-ын анықтау сол хабарламаның жетуіне және оның сақталуына байланысты. Оны сүзгілеу немесе елемеу жіберушіні ешқашан сыймайтын пакетті қайталауға қалдырады.

Инкапсуляция мұны VPN айналасында жиі етеді, өйткені туннель физикалық байланысқа өлшенген пакетке сыртқы тақырыпша қосады. Ішкі пакет 1500 байтта заңды, ал инкапсуляцияланған емес, сондықтан ол шекарада өледі, шағын пакеттер өтіп кетеді. Аяқталған қол алысу мен жұмыс істейтін кіру беті шағын пакеттердің жұмыс істейтінін ғана дәлелдейді. Қолданба жіберуге тырысатын ең үлкен пакет — маңыздысы сол.

Сынған өлшемді табыңыз

Бөлшектеусіз сынақпен пайдалы жүктеме өлшемін екілік іздеумен табыңыз, туннельдің бір жағындағы хосттан екінші жағындағы хостқа. Өтетін ең үлкен жүктеме — пайдалануға болатын жол MTU-ыңыз минус тақырыпша шығыны.

ping -M do -s 1400 -c 2 192.0.2.20
ping -M do -s 1200 -c 2 192.0.2.20
ping -f -l 1372 192.0.2.20

1472 байт жүктеме IPv4 және ICMP тақырыпшаларының 28 байты қосылғанда таза 1500 байт Ethernet жолынан өтеді. Туннель көтерілгеннен кейін сол сынақ тек кішірек жүктемеде сәтті болса, айырмашылық — инкапсуляция шығыны, ал туннель шекарасы бас тарту хабарламасы жасалуы тиіс жер. Екі санды да, қосылудың алдында және кейін жазып алыңыз, өйткені сол жұп — дәлел. Қолданба IPv6 қолданса, сынақты оған қайталаңыз, өйткені тақырыпша үлкенірек және сәтсіздік шегі жылжиды.

Туннельді кінәламас бұрын дәлелдерді оқыңыз

Қашықтағы қолданба қателері, кептеліс және қарапайым жоғалту да жүктеулерді тоқтатады, сондықтан бір сәтсіз тасымал қара құрдымды анықтамайды. Оларды өлшем қатынасы ажыратады: 1200 байтта қайталанатын сәттілік және 1400 байтта қайталанатын тоқырау, сол бағытта, сол соңғы нүкте арқылы.

Екі ұшта түсірілген жазба үлкен пакеттердің шығып, ешқашан жетпейтінін, арасында ешқандай бас тарту жоқтығын көрсетеді. Бұл — серверге емес, шекара құрылғысына қарау керек сәт, өйткені сервер өзі шынымен алған әрбір сұрауға жауап береді. Кептеліс те тоқтатады, бірақ ол әр уақытта әртүрлі өлшемдерді тоқтатады, бұл басқа қолтаңба.

Жөндеуді екі тасымалда да тексеріңіз

Қолдау көрсетілетін жөндеу — шекараның нақты шекті хабарлауына жол беру немесе сол жерде TCP-нің ең үлкен сегмент өлшемін қысу, сонда тым үлкен сегмент талпынылмайды. Желідегі әрбір MTU-ды төмендету немесе файрволды өшіру симптомды жасырады және кейін ешкім пайымдай алмайтын конфигурация қалдырады.

ip link show dev tun0
sudo nft list ruleset | grep -i -E 'mtu|mss'
sysctl net.ipv4.tcp_mtu_probing
ping -M do -s 1400 -c 2 192.0.2.20

Сол өлшем сынағымен тексеріңіз, содан кейін сәтсіз болған қолданбамен, және екінші протоколды тексеріңіз, өйткені UDP қолданбалары TCP-нің сегмент өлшемі түзетуін ешқашан алмайды. Бастапқы мәндерді тикетте сақтаңыз, өйткені кері қайтарылмайтын жөндеу — болуын күтіп тұрған екінші мәселе. Егер өлшем сынағы өтсе де жүктеу әлі тоқтап тұрса, қара құрдым себеп емес еді, зерттеу өзгерісті кеңейтудің орнына әрі қарай жүруі керек.

Қатысты мақалалар