MTU qora tuynugi: nega kichik so'rovlar ishlaydi, lekin yuklashlar tiqilib qoladi
Kichik so'rovlar tugaydi, katta yuklash esa abadiy osilib qoladi va jo'natuvchi yo'l torroq ekanini hech qachon bilmaydi. Uziladigan aniq o'lchamni o'lchang.
Sahifa yuklanadi, kichik API chaqiruvi qaytadi, so'ngra fayl yuklash mijoz taslim bo'lguncha osilib qoladi. Server jurnalida buni tushuntiruvchi hech narsa yo'q, chunki paketlar yo'lning o'rtasida foydali javob qaytarmasdan tashlab yuborilgan. Bu naqsh MTU qora tuynugi: jo'natuvchi taxmin qilganidan torroq aloqa, ustiga buni aytishdan jim rad etish. Muvaffaqiyatsiz bo'ladigan o'lcham takrorlanadi va aynan shu uni diagnostika qilish mumkin bo'lishiga olib keladi.
Teshikni qora qiladigan narsa
Har bir aloqaning maksimal uzatish birligi bor va keyingi sakrash chegarasidan katta paket yo bo'laklanishi, yo buni aytuvchi ICMP xabari bilan rad etilishi kerak. Yo'l MTU aniqlash o'sha xabar yetib kelishi va unga rioya qilinishiga bog'liq. Uni filtrlash yoki e'tiborsiz qoldirish jo'natuvchini hech qachon sig'maydigan paketni takrorlashga qoldiradi.
Inkapsulyatsiya buni VPN atrofida odatiy qiladi, chunki tunnel jismoniy aloqa uchun o'lchangan paketga tashqi sarlavha qo'shadi. Ichki paket 1500 baytda qonuniy, inkapsulyatsiya qilingani esa emas, shuning uchun u chegarada o'ladi, kichik paketlar o'tib ketadi. Tugallangan qo'l siqish va ishlaydigan kirish sahifasi faqat kichik paketlar ishlashini isbotlaydi. Ilova yubormoqchi bo'lgan eng katta paket muhimdir.
Uziladigan o'lchamni toping
Bo'laklamaydigan sinov bilan foydali yuk o'lchamini ikkilik qidiruv orqali toping, tunnelning bir tomonidagi xostdan boshqa tomonidagi xostga. O'tadigan eng katta yuk sizning foydalanish mumkin bo'lgan yo'l MTU dan sarlavha xarajatini ayirgandan iborat.
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 baytlik yuk toza 1500 baytlik Ethernet yo'lida IPv4 va ICMP sarlavhalarining 28 bayti qo'shilganda o'tadi. Xuddi shu sinov tunnel ko'tarilgandan keyin faqat kichikroq yukda muvaffaqiyatli bo'lsa, farq inkapsulyatsiya xarajati, tunnel chegarasi esa rad xabari yaratilishi kerak bo'lgan joy. Ikkala raqamni ham, ulanishdan oldin va keyin yozib qo'ying, chunki o'sha juftlik dalildir. Ilova IPv6 ishlatsa, sinovni unga ham takrorlang, chunki sarlavha kattaroq va nosozlik chegarasi siljiydi.
Tunnelni ayblashdan oldin dalillarni o'qing
Uzoq ilovalar xatolari, tirbandlik va oddiy yo'qotish ham yuklashlarni to'xtatadi, shuning uchun bitta muvaffaqiyatsiz uzatish qora tuynukni aniqlamaydi. Ularni o'lcham nisbati ajratadi: 1200 baytda takrorlanadigan muvaffaqiyat va 1400 baytda takrorlanadigan to'xtash, xuddi shu yo'nalishda, xuddi shu oxirgi nuqta orqali.
Ikkala uchda yozib olish katta paketlar chiqib, hech qachon yetib kelmasligini, orasida hech qanday rad yo'qligini ko'rsatadi. Bu serverga emas, chegara qurilmasiga qarash kerak bo'lgan payt, chunki server haqiqatda olgan har bir so'rovga javob beryapti. Tirbandlik ham to'xtatadi, lekin u turli vaqtlarda turli o'lchamlarni to'xtatadi, bu esa boshqa imzo.
Tuzatishni ikkala transportda ham tekshiring
Qo'llab-quvvatlanadigan tuzatish chegara haqiqiy chegarani xabar qilishiga ruxsat berish yoki u yerda TCP ning maksimal segment o'lchamini qisish, shunda haddan tashqari katta segment sinab ko'rilmaydi. Tarmoqdagi har bir MTU ni pasaytirish yoki xavfsizlik devorini o'chirish simptomni yashiradi va keyin hech kim mulohaza yurita olmaydigan konfiguratsiyani qoldiradi.
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
Xuddi shu o'lcham sinovi bilan tekshiring, so'ng muvaffaqiyatsiz bo'lgan ilova bilan va ikkinchi protokolni tekshiring, chunki UDP ilovalari TCP ning segment o'lchami tuzatishini hech qachon olmaydi. Asl qiymatlarni biletda saqlang, chunki qaytarib bo'lmaydigan tuzatish sodir bo'lishini kutayotgan ikkinchi muammodir. Agar o'lcham sinovi o'tsa va yuklash hali ham tiqilib qolsa, qora tuynuk sabab emas edi va tekshiruv o'zgarishni kengaytirish o'rniga davom etishi kerak.