OpenVPN kupitia TCP: rto_min haitatui kizuizi cha mwanzo wa foleni
Mtiririko wa baiti wa nje unawasilisha kwa mpangilio, kwa hiyo sehemu moja inayokosekana inaweza kusimamisha kila mtiririko wa ndani. Kipima muda cha ndani kilichorefushwa hubadilisha saa, si kizuizi hicho.
Ganda la maingiliano juu ya handaki huganda kwa sekunde kadhaa wakati nakala ya faili inaendesha, kisha huendelea kana kwamba hakuna kilichotokea. Tatizo liko kwenye upakuaji pekee, lakini ganda pia husubiri, na zote mbili hupona kwa wakati mmoja. Mchoro huo ni saini ya mtiririko mmoja wa kuaminika unaobeba mazungumzo mengi, na hustahimili karibu kila marekebisho ambayo watu hujaribu kwanza.
Dalili inafaa kusomwa kwa makini kwa sababu inaelekeza kwenye utaratibu na si kwenye mpangilio: kusimama kunashirikiwa, kwa hiyo sababu inashirikiwa, na kitu kinachoshirikiwa ni muunganisho wa nje. Kila kitu kingine kwenye kumbukumbu huonekana kawaida wakati hilo likitokea.
Dalili: kila kitu kinasimama kwa pamoja
Muunganisho miwili ya ndani inayokwama pamoja ni kidokezo. Upakuaji wa polepole na ganda la polepole ni mazungumzo tofauti ya TCP yenye namba za mfuatano tofauti na hali tofauti ya msongamano, kwa hiyo hitilafu katika moja haipaswi kugusa nyingine. Zinaposimama kwa mdundo mmoja, kuna kitu juu yao kinapanga baiti zao.
Kitu hicho ni tabaka la usafirishaji la handaki. Katika hali ya TCP, OpenVPN huandika pakiti zilizofungwa kwenye muunganisho mmoja wa TCP kuelekea mwenzake, na mkataba wa TCP ni uwasilishaji kwa mpangilio wa mtiririko mmoja wa baiti. Baiti za baadaye hazitolewi kwa programu kabla ya zile zilizokosekana, bila kujali ni mazungumzo gani ya ndani zinahusika.
Angalia kile dalili haisemi. Haisemi kwamba njia imevunjika, kwamba seva imelemewa, au kwamba usimbaji fiche ni wa polepole. Hivyo huzalisha maumbo mengine: upitishaji wa chini kwa usawa, kuisha muda, au kushindwa kunakoathiri upande mmoja. Kusimama kunakoshirikiwa kunakoisha sehemu iliyopotea inapotumwa tena ni hasa athari ya mpangilio.
Mtiririko mmoja wa baiti wa nje, mazungumzo mengi ya ndani
Fikiria handaki likibeba upakuaji na ganda kwa wakati mmoja. Sehemu moja ya muunganisho wa nje inapotea. Sehemu zinazofuata zinaweza kufika kwa mwenyeji anayepokea, na tabaka la TCP linalopokea litazithibitisha, lakini haliwezi kuzipeleka juu hadi pengo lijazwe. Kwa hiyo OpenVPN haina chochote cha kusoma kwa ajili ya ganda, ingawa baiti za ganda lenyewe zilifika zamani.
Hii ni kizuizi cha mwanzo wa foleni ndani ya muunganisho mmoja, na haihitaji programu mbili kushiriki muunganisho wa ndani. Zinashiriki ule wa nje, na hiyo inatosha.
Athari ya daraja la pili inaifanya kuwa mbaya zaidi. Mtumaji wa ndani asiyekiona uthibitisho anaweza kutuma tena data ambayo tabaka la nje linajaribu kuiwasilisha tayari. Utumaji huo upya unakuwa trafiki ya ziada ya handaki kwenye njia iliyothibitisha hivi punde kwamba inaweza kupoteza sehemu, kwa hiyo kazi ya urejeshaji inashindana na urejeshaji unaojaliza.
Hakuna kitu katika haya kinachohakikisha kuanguka. Kwenye njia safi yenye safari fupi za kwenda na kurudi na foleni pana, mpango huu unaweza kutumika kikamilifu kwa miaka. Hitilafu huonekana wakati upotevu, ucheleweshaji na kina cha foleni vinapokutana, na ndiyo sababu ripoti hukusanyika kuzunguka viungo vya juu vilivyojaa na viungo vya simu badala ya ofisi zilizo na vifaa vya kutosha.
Kwa nini kipima muda cha ndani kilichorefushwa hakiwezi kusaidia
Kupandisha muda wa chini wa kusubiri utumaji upya kwenye njia kwa rto_min huchelewesha utumaji upya unaotegemea kipima muda kwa trafiki ya TCP inayozalishwa ndani inayotumia njia hiyo. Ni kitufe halisi chenye athari halisi, na kinashughulikia tatizo la daraja la pili badala ya la kwanza.
ip route show
ip route show cache 2>/dev/null | head
ss -tin dst 10.70.0.1
Kile hakiwezi ni kuachilia baiti za nje nje ya mpangilio, kurejesha sehemu iliyokosekana haraka zaidi, au kufanya seva ya programu ya mbali ichukue kipima muda hicho hicho. Tabaka linalopokea bado huwasilisha kwa mpangilio, na mtumaji wa upande wa mbali bado anatumia vipimo vyake vya safari ya kwenda na kurudi.
Pia hazizimi kila utaratibu mwingine wa urejeshaji wa upotevu. Palipo na upotevu halisi unaohitaji urejeshaji unaotegemea kipima muda, kiwango cha chini kikubwa hufanya programu isubiri muda mrefu zaidi kabla ya kuchukua hatua, kinyume na kile kikao kinachohitaji kucheleweshwa kidogo kinahitaji.
Kiwango cha chini kisichobadilika cha sekunde kumi na mbili huonekana katika ushauri kuhusu mada hii kana kwamba kuwepo kwa handaki la TCP kunakilazimisha. Kipima muda cha utumaji upya kilichoelezwa katika RFC 6298 hutokana na muda wa safari ya kwenda na kurudi uliopimwa pamoja na kurudi nyuma kwa kielelezo, kwa hiyo kiwango cha chini kisichobadilika ni uchaguzi wa sera kwa njia maalum na si hitaji la itifaki. Kinapotumika kwa upana, huficha dalili huku kikibadilisha urejeshaji kwa kila mtiririko unaofunikwa na njia hiyo.
tcp-nodelay hufanya nini na haifanyi nini
Chaguo la handaki linalozima uwekaji akiba wa mtindo wa Nagle kwenye soketi ya usafirishaji lina madhumuni nyembamba: huzuia maandishi madogo kusubiri data zaidi kabla ya kutumwa. Hilo husaidia trafiki ya maingiliano kuepuka ucheleweshaji wa ziada kwenye njia iliyo na afya kwa mambo mengine.
Haifanyi usafirishaji kuwa usio na mpangilio, na haifupishi urejeshaji baada ya sehemu iliyopotea. Ganda linalosimama kwa sababu ya muda wa utumaji upya bado litasimama hata chaguo hilo likiwa limewashwa, kwa sababu chaguo hilo halikugusa kamwe kanuni ya mpangilio.
Ni rahisi kuchanganya mawili kwa sababu yote mawili yanaelezwa kama marekebisho ya ucheleweshaji. Moja huondoa kusubiri kwa bandia kulikoletwa na uwekaji akiba, lingine lingehitaji kubadilisha kile usafirishaji unahakikisha, na hakuna chaguo la soketi linalofanya hivyo.
Jinsi ya kulinganisha usafirishaji kwa haki
Ikiwa mwendeshaji anaruhusu na huduma zote mbili zipo, linganisha huduma ya UDP na huduma ya TCP zinazobeba mzigo sawa wa kazi kwenye njia hiyo hiyo ya ufikiaji kuelekea seva hiyo hiyo. Kubadilisha nchi, mtoa huduma au kizazi cha seva kati ya majaribio mawili huleta kigezo kitakachotawala matokeo.
Angalia kusimama kunakoshirikiwa badala ya namba ya upitishaji. Programu kadhaa za ndani kukwama pamoja wakati wa upotevu wa nje ni uchunguzi unaotambua kizuizi cha mwanzo wa foleni; namba moja ya chini kwenye jaribio la kasi haifanyi hivyo.
Unasa ulioidhinishwa kwenye kiolesura cha handaki na kwenye kiolesura cha kimwili hutenganisha tabaka mbili kwa usafi, kwa sababu utumaji upya wa ndani na wa nje unahusiana na muunganisho tofauti wenye nafasi tofauti za mfuatano. Kuona utumaji upya wa ndani wakati mtiririko wa nje unaonyesha pengo ni ushahidi wa moja kwa moja.
Kuhamia UDP huondoa mtiririko wa ziada wa kuaminika na kuacha TCP ya ndani ifanye urejeshaji wake yenyewe. Haiahidi upotevu sifuri au ucheleweshaji mdogo, na kiungo cha juu kilichojaa, foleni kubwa kupita kiasi au tatizo la MTU bado vitahitaji kurekebishwa. Trafiki nje ya handaki haizuiliwi kamwe nyuma ya pengo la mfuatano la handaki, ingawa bado inaweza kuteseka wakati njia zote mbili zinashiriki kiungo kimoja kilichojaa, na kizuizi hicho kinachoshirikiwa kinastahili uchunguzi wake yenyewe badala ya kukunjwa ndani ya huu.