Туннель үстіндегі интерактивті shell файл көшірмесі жүріп жатқанда бірнеше секунд қатып қалады, содан кейін ештеңе болмағандай жалғасады. Мәселе тек жүктеуде, бірақ shell де күтеді, екеуі де бір сәтте қалпына келеді. Бұл үлгі көптеген әңгімені тасымалдайтын бір сенімді ағынның қолтаңбасы және адамдар бірінші кезекте қолданатын барлық дерлік реттеуге төтеп береді.

Симптомды мұқият оқыған жөн, өйткені ол параметрге емес, механизмге нұсқайды: үзіліс ортақ, сондықтан себеп те ортақ, ал ортақ нысан сыртқы қосылым. Осы кезде журналдағы қалғанның бәрі қалыпты көрінеді.

Симптом: бәрі бір уақытта тоқтайды

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

Сол бірдеңе туннельдің тасымалдау қабаты. TCP режимінде OpenVPN инкапсуляцияланған пакеттерді серіктеске баратын бір TCP қосылымына жазады, ал TCP келісімі бір байт ағынын ретімен жеткізу. Кейінгі байттар қай ішкі әңгімеге жатса да, жетіспейтіндерден бұрын қолданбаға берілмейді.

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

Бір сыртқы байт ағыны, көптеген ішкі әңгіме

Туннель бір уақытта жүктеуді де, shell-ді де тасымалдайды деп елестетіңіз. Сыртқы қосылымның бір сегменті жоғалады. Келесі сегменттер қабылдаушы хостқа жетуі мүмкін және қабылдаушы TCP стегі оларды растайды, бірақ олқылық толықпайынша оларды жоғарыға бере алмайды. Сондықтан OpenVPN-ге shell үшін оқитын ештеңе жоқ, shell-дің өз байттары әлдеқашан келгеніне қарамастан.

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

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

Бұлардың ешқайсысы күйреуге кепілдік бермейді. Қысқа барып-қайту уақыттары мен кең кезектері бар таза жолда бұл құрылым жылдар бойы толық жарамды болуы мүмкін. Ақау жоғалту, кідіріс және кезек тереңдігі бірге келгенде пайда болады, сондықтан есептер жақсы жабдықталған кеңселерге емес, кептелген жоғары арналар мен ұялы байланыс желілеріне шоғырланады.

Неге ұзынырақ ішкі таймер көмектесе алмайды

Жолда rto_min арқылы ең төменгі қайта жіберу мерзімін көтеру осы жолды қолданатын жергілікті өндірілген TCP трафигі үшін таймерге негізделген қайта жіберуді кейінге қалдырады. Бұл нақты әсері бар нақты түйме және ол бірінші емес, екінші ретті мәселені шешеді.

ip route show
ip route show cache 2>/dev/null | head
ss -tin dst 10.70.0.1

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

Ол басқа да барлық жоғалтуды қалпына келтіру механизмдерін өшірмейді. Нақты жоғалту таймерге негізделген қалпына келтіруді талап ететін жерде үлкенірек минимум қолданбаны әрекет етуден бұрын ұзағырақ күтуге мәжбүрлейді, бұл кідіріске сезімтал сессияға қажет нәрсенің керісі.

Он екі секундтық тұрақты төменгі шек бұл тақырыптағы кеңестерде TCP туннелінің болуы оны талап ететіндей көрінеді. RFC 6298-де сипатталған қайта жіберу таймері өлшенген барып-қайту уақытынан экспоненциалды шегінумен алынады, сондықтан тұрақты шек белгілі бір жол үшін саясат таңдауы, протокол талабы емес. Кеңінен қолданылса, ол симптомды жасырып, сол жол қамтитын әрбір ағынның қалпына келуін өзгертеді.

tcp-nodelay не істейді және не істемейді

Тасымалдау сокетінде Nagle үлгісіндегі буферлеуді өшіретін туннель опциясының мақсаты тар: кішкентай жазулардың жіберу алдында қосымша деректер күтуін тоқтатады. Бұл интерактивті трафикке басқа жағынан сау жолда қосымша кідірістен құтылуға көмектеседі.

Ол тасымалдауды ретсіз етпейді және жоғалған сегменттен кейінгі қалпына келтіруді қысқартпайды. Қайта жіберу мерзімі үшін тоқтаған shell сол опция қосулы болса да тоқтайды, өйткені опция реттілік ережесіне ешқашан тимеген.

Екеуін шатастыру оңай, өйткені екеуі де кідіріс түзетуі ретінде сипатталады. Бірі буферлеу әкелген жасанды күтуді жояды, екіншісі тасымалдау кепілдік беретін нәрсені өзгертуді талап етер еді, ал мұны ешбір сокет опциясы жасамайды.

Тасымалдау қабаттарын әділ салыстыру жолы

Егер оператор рұқсат етсе және екі қызмет те болса, бірдей жұмыс жүктемесін таситын UDP қызметі мен TCP қызметін сол серверге баратын сол қатынау жолында салыстырыңыз. Екі сынақ арасында елді, провайдерді немесе сервер буынын ауыстыру нәтижеге үстемдік ететін айнымалыны енгізеді.

Өткізу қабілетінің санына емес, ортақ үзіліске назар аударыңыз. Сыртқы жоғалту кезінде бірнеше ішкі қолданбаның бірге тұрып қалуы кезек басындағы блоктауды анықтайтын байқау; жылдамдық сынағының бір төмен саны оны жасамайды.

Туннель интерфейсіндегі және физикалық интерфейстегі рұқсат етілген ұсталымдар екі қабатты таза ажыратады, өйткені ішкі және сыртқы қайта жіберулер әртүрлі реттік кеңістігі бар әртүрлі қосылымдарға жатады. Сыртқы ағын олқылық көрсетіп тұрғанда ішкі қайта жіберулерді көру тікелей дәлел.

UDP-ге өту қосымша сенімді ағынды алып тастайды және ішкі TCP өз қалпына келтіруін өзі жасауына мүмкіндік береді. Ол нөлдік жоғалтуға немесе төмен кідіріске уәде бермейді, ал қаныққан жоғары арна, тым үлкен кезектер немесе MTU мәселесі әлі де түзетуді қажет етеді. Туннельден тыс трафик туннельдің реттік олқылығының артында ешқашан ұсталмайды, алайда екі жол бір кептелген байланыс арнасын бөліскенде ол әлі де зардап шегуі мүмкін, және бұл ортақ тар жер осында бүктелмей, өз зерттеуіне лайық.

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