Laba calaamadood ayaa ka muuqda isla wareegga VpnService oo labadaba waxaa lagu eedeeyaa isla shay: akhriye aan waligiis soo noqon, iyo qoris ku guuldareysta ENOBUFS. Kuwani ma aha noocyo kala duwan oo hal khalad ah. Akhris xanniban waa ismaandhaaf ku saabsan xakamaynta qulqulka peer-ka; qoris guuldareystay waa baakad ay interface-ku aanu aqbali doonin. Haddii aad u tixgeliso hal dhibaato, maalin ayaad ku qaadan doontaa hagaajinta buffer-yo aan waligood ku lug lahayn. Qaybta hoose waa sida aan go'aansado qaybta wareegga ee aan marka hore cabbiro.

Hal wareeg, laba goobood oo guul-darrooyin madax-bannaan

Adeeggaagu wuxuu ka akhriyaa baakad IP descriptor-ka faylka TUN, wuu baadhaa, kadibna jawaab ku qoraa isla descriptor-kaas. Wax kasta oo jidkaas ku jabta waxay ka muuqataa mid ka mid ah labada wicid, taas ayaa sababta labadaba loo soo sheegayo tunnel jabtay. Wicidadu waxay leeyihiin heshiisyo kala duwan. Akhrisku wuxuu sugayaa in kernel-ku baakad kuu dhiibo, qoristuna waxay kernel-ka siisaa baakad uu xaq u leeyahay inuu diido.

Akhrisku waa qaybta fudud ee laga fikiro. Akhris aan waxba soo celin ama wuxuu sugayaa taraafik aan waligiis imanayn ama wuxuu sugayaa sababtoo ah peer-ku wuu joojiyay dirista.

Akhris xanniban waa ismaandhaaf xakamaynta qulqulka

Akhriska qalabka TUN wuu xannibmaa ilaa baakad la helo. Taasi waa dhaqan la qorsheeyay, taasna waa sababta dunta ku hakata read ay caadi ugu muuqato xiriir shaqo la'aan ah. Waxay noqotaa hakin marka stack-gaaga TCP uu sii wado qaadashada xogta app-ka maxalliga ah laakiin uusan waligiis ku dhawaaqin daaqad ku filan in peer-ka fog uu wax dheeraad ah diro. Peer-ku wuxuu buuxiyaa daaqadda aad ku dhawaaqday, wuxuu sugayaa ACK iyo cusboonaysiinta daaqadda, kadibna wuu istaagaa. Markaas akhriyahaagu waxba ma hayo uu soo celiyo, app-kuna wuxuu arkaa xiriir furan oo aamusan.

Sababaha caadiga ah waa stack ku qora socket-ka isagoon la socon daaqadda la dhawaaqay, iyo mid ilaaway inuu diro cusboonaysiinta daaqadda kadib markuu buffer-kiisa madhiyay. Dibadda waxay u muuqdaan isku mid: bytes baa baxa, waxba soo noqon maayaan, khalad lama kiciyo. Xannibidda dunta akhriska ee parsing, xallinta DNS ama disk I/O waxay soo saartaa isla qaabka calaamadda sabab aan xiriir lahayn, marka hubi in dunta dhab ahaan ku jirto read ka hor inta aanad eedayn xakamaynta qulqulka.

Hubi safka dirista peer-ka iyo daaqadda uu markii ugu dambeysay arkay. Haddii peer-ku xogta haysto sababtoo ah daaqaddaadu waa eber, sixitaanku wuxuu ku jiraa jidkaaga ACK, ma aha akhriska TUN.

ENOBUFS waa dhibaato cabbir, ma aha yaraan buffer

Qoris ku soo celisa ENOBUFS interface TUN ayaa inta badan diida dhererka baakadda. Interface-ku wuxuu leeyahay MTU, baakad ka weyn lama safi karo, iyo isku dayga baakad isku mid ah wuu ku guuldareystaa si isku mid ah mar kasta. Go'aannimadaas waa tilmaanta. Yaraan buffer dhab ah wuu caddaystaa marka cadaadiska hoos u dhaco, halka diidmada cabbirku aanay danayn inta aad sugto.

TCP waxay leedahay farsamo tan loogu talagalay, waana tallaabada dadku boodaan: xaddidaadda MSS. Marka aad ka samaysato segment-yo meelaha isticmaalaha waxaad dooratayaa cabbirka payload-ka, haddii aad ka qaadato MTU interface-ka maxalliga ah halkii MTU tunnel-ka waxaad soo saaraysaa segment-yo aan tunnel-ku qaadi karin. Ku xaddid tan ugu yar labada. Xaddidaaddu waxay daboolaysaa TCP oo keliya, marka datagram UDP aad u weyn waa in koodkaagu kala gooyo ama tuuro.

Diiwaangeli dhererka baakad kasta oo aad qorto inta aad debugaynayso. Dhererka ku guuldareysta waa jawaabta, kamana dhaqaaqo inta u dhaxaysa isku dayo.

Saddex cabbir oo kala sooca kiisaska

Uma baahnid debugger mid ka mid ah labada guul-darro. Saddex indho-indheyn ayaa ku filan in laguu hago qaybta saxda ah, waxayna qaataan waqti ka yar dib-u-dhis.

What you seeWhere to look
Reader parked, peer send queue empty, last advertised window zeroWindow updates in your ACK path
Write fails on one length and succeeds on a smaller oneMSS clamp and tunnel MTU
Both directions look fine, app still sees no dataProtected socket and routing loop

Haddii safka saddexaad uu u dhigmaado, wareegga laftiisu wuu fiican yahay dhibaataduna waxay ku taal meel tunnel-ku aanu arki karin: socket gaadiid aan la ilaalin oo taraafikgaaga VPN dib ugu celiya tunnel-ka, taasoo inta badan u muuqata xiriir guuleysta kadibna aan waxba gaarsiin.

Hagaaji tuubooyinka labada jid ku tiirsan yihiin

Calaamad keliya ma mudan in la eryado ilaa interface-ka si sax ah loo dhiso. Wicidda builder ee muhiimka ah waa cinwaanka, jidka, MTU iyo oggolaanshaha, isla nidaamkaas:

Builder()
  .addAddress(10.8.0.2, 32)
  .addRoute(0.0.0.0, 0)
  .setMtu(1400)
  .establish()

U dhig MTU qiimaha dhabta ah ee tunnel-ka halkii aad kaga tegi lahayd wixii tusaalaha isticmaalay. Wax kasta oo aad hadhow qorto waxaa xaddidaya lambarkaas, iyo ismaandhaafka u dhexeeya MTU aad dhigto iyo MSS aad ku xaddidto waa habka ugu caansan ee dib loogu soo celiyo qaladka qorista kadib sixitaan. Kadib ilaali socket-ka taraafikga u qaada server-ka VPN laftiisa. protect la'aan baakadahaas waxaa dib loogu jiheeyaa tunnel-kaaga, xiriirkuna waligiis ma dhammaado, taasoo u eg akhris xanniban laakiin ah wareeg jiheyn.

Oggolaanshaha lama gudbi karo. Adeeg la bilaabay iyada oo prepare aanu soo celin null ma helo interface, establish-na wuxuu soo celiyaa null halkii uu tuuri lahaa, marka hubi descriptor-ka ka hor inta aanad bilaabin wareegga. Tixraaca VpnService waa goobta aad ku xaqiijiso heshiiska builder halkii aad koobi lahayd tusaale.

Xaqiiji hal jiho markiiba

Ka hor inta aanad taaban TCP, u dir UDP echo tunnel-ka dhexdiisa oo fiiri dhererka baakadaha. Kadib fur gacan-qabasho oo xaqiiji in segment-yadu ay ka hooseeyaan MSS aad xisaabisay. Tiri baakadaha halkii xiriirada, si istaaggu ugu muuqdo sida god ku jira tirsadaha halkii uu ahaan lahaa socket daldalan. Haddii akhrisku istaago kadib duufaan qoris, daaqaddu waa tuhmanka; haddii qoristu isla markiiba guuldareysto, waa dhererka.

Kadib dib u kici qalabka oo hal mar ku celi, maxaa yeelay VpnService ku shaqeeya oo keliya ilaa isbeddelka shabakadda ugu horreeya waa dhibaato jiheyn, ma aha xakamaynta qulqulka.

Maqaallo la xiriira