Tuneli yana tashi, alamar maɓalli tana bayyana, amma kowace buƙata a mai bincike tana ƙarewa da lokaci. A cikin manhajar VpnService wannan haɗin yawanci yana nufin madaukin karatu yana raye kuma rabin fitarwa ya karye, ba wai uwar garken ya ƙi musafaha ba. Android ya riga ya ƙirƙiri hanyar, ya matsar da zirga-zirgar manhajar cikinta kuma ya ba tsarinka bayanin fayil. Duk abin da ke bayan wannan bayanin naka ne, kuma kira ɗaya da ya ɓace ya isa ya haɗiye dukan kwararar.

Abin da tsarin ke ba ka, da abin da ba ya bayarwa

establish() yana mayar da ParcelFileDescriptor don hanyar tun. Tsarin yana rubuta fakiti na IP masu fita cikinta kuma yana tsammanin tsarinka ya karanta su, ya yanke shawarar inda za su je kuma ya aika su ta socket na yau da kullum. Babu watsawa a cikin kernel a ƙasa, don haka idan babu wanda ya karanta, ana watsar da fakiti kuma masu lissafin hanyar ba sa motsi.

Fara da lissafi maimakon hasashe. Ƙara lissafi a kowane nasarar karatu kuma rubuta inda fakiti na farko suka nufa da ka'idarsu. Idan lissafin ya tsaya a sifili yayin da ake samar da zirga-zirga, kuskuren yana sama da kodinka na watsawa, wanda ke taƙaita bincike ga tsarin builder da yanayin karatu. Idan lissafin ya motsa amma mai bincike ya ci gaba da gazawa, kuskuren yana cikin hanyar aikawa ko hanyar dawowa.

Karatun toshewa yana yanke shawarar ko madaukin yana motsi

setBlocking(true) yana sanya bayanin a yanayin toshewa kuma yana wanzuwa tun API 21. A tsoffin sigogi maganin shine ƙaramin mataimakin JNI wanda ke share O_NONBLOCK da fcntl akan bayanin danye. Yanayin yana da muhimmanci domin shine ke yanke shawarar abin da karatu ba tare da fakiti mai jira ba zai iya yi.

A yanayin da ba ya toshewa wannan karatun yana dawowa nan take da ƙima mara kyau, kuma madaukin da ya yi watsi da sakamakon yana juya core ba tare da motsa ko ɗaya ba. A yanayin toshewa karatun yana jira, wanda shine abin da zaren watsawa ke so, amma sannan ba za a iya katse zaren ba. Rufe bayanin shine hanyar da aka goyi bayan da za ta sa karatun ya kasa domin madaukin ya fita. Kashe tsari ko katse zaren a maimako na iya barin farawa ta gaba da bayanin da bai dace da hanyar ba.

Karanta fakiti ɗaya a kowane kira cikin buffer mai girman MTU na hanyar, kuma ɗauki sifili ko dawowa mara kyau a matsayin kuskure ba fakiti fanko ba.

protect() kafin aikawa ta farko, ba bayan ba

Kowane socket da ke ɗaukar fakiti da aka lulluɓe dole a fara kare shi. Socket da ba a kare shi ba yana bin ka'idojin hanya da ka girka yanzu, don haka fakitinsa suna komawa cikin tuneli kuma madaukin karatunka ya sake ɗaukar su. Sannan tunelin yana watsa fitarwarsa har abada, kuma daga waje yana kama da haɗin da ke buɗewa kuma ba ya amsawa.

Tsari shine protect, sannan connect ko bind, sannan send. Kira protect bayan connect na iya barin shawarar hanyar da ta gabata a wurin, don haka socket ɗin yana ci gaba da amfani da hanyar da ba daidai ba ko da kiran ya mayar da true. Duba boolean ɗin da yake mayarwa kuma ka kasa da ƙarfi idan ya zama false maimakon shiga aikawa da ba za ta iya aiki ba.

Kuskuren izini daga sendto akan socket da bai taɓa protect() ba shine alamar yau da kullum ta wannan kuskure.

Misalin UDP baya ɗaukar HTTPS

Misalin watsawa da yawancin koyarwa ke kwafa yana sarrafa UDP kawai. TCP yana buƙatar musafaha, lambobin jeri, tabbatarwa da sake aikawa, kuma madaukin da ke kwafin kaya tsakanin bayanin tun da socket ba ya bayar da ɗaya daga cikinsu. Shi ya sa binciken DNS ta UDP zai iya wucewa yayin da kowace buƙatar HTTPS ta tsaya. Ko ka gudanar da tarin TCP a sararin mai amfani ko ka ba da haɗin ga wakili na gida wanda ke ƙare TCP a na'urar kuma ya watsa kwararar.

Gwada rabuwa kafin ka sake rubuta wani abu: aika binciken UDP ɗaya kuma buɗe haɗin TCP ɗaya zuwa wannan mai masauki. Idan hanyar UDP tana aiki kuma hanyar TCP ta rataye a SYN na farko, kodinka na watsawa ne matsalar ba uwar garken ba. Wannan kwatancen ɗaya yana ceton lokaci mai yawa da ake kashewa wajen karanta rajistan uwar garken da ba su da wani abu mai amfani.

Jerin hanyoyi da matatun kowane manhaja sun iyakance abin da kake gani

addAddress, addRoute da addDns suna bayyana abin da tsarin ke aikawa cikin tuneli. Inda aka nufa a wajen jerin hanyoyi ba ya taɓa isa bayaninka, don haka babu adadin dabarun watsawa da zai gyara shi. Rubuta kiran builder da kake yi kuma kwatanta su da adiresoshin da manhajar take ƙoƙarin isa.

Zaɓin kowane manhaja yana da nasa ƙasa: addAllowedApplication da addDisallowedApplication suna buƙatar API 21, kuma a tsoffin sigogi hanyoyin ba su wanzu. Ƙirar da ke tace ta fakiti ba za ta iya aiki a can kwata-kwata.

Sake kafawa yana barin tsoffin bayanai

Sake kiran establish() yana mayar da sabon bayani kuma yana rufe hanyar da ta gabata. Tsohon bayanin yanzu ba shi da inganci, don haka zaren da ke toshewa akansa yana samun kuskure, kuma sockets da aka ƙirƙira don tsohuwar hanya na iya buƙatar maye gurbinsu. onRevoke shine kira na baya don tunelin da mai amfani ko tsarin ya ɗauka. Riƙe tsarin rayuwa a hannun mai shi ɗaya, wanda ke dakatar da mai karatu kafin sake kafawa, yana hana yawancin yanayin haɗe-amma-matattu.

Karanta kowane kuskure bisa matakin da ya shafi. Sake saitin haɗi daga recvfrom yana nufin ƙarshen nesa ya rufe yayin da kodinka ke karatu. Kuskuren adireshin da ba daidai ba yana nuna binciken kan rubutu ko kuskuren offset, ba hanyar sadarwa ba.

Tsarin aiki: yanayin toshewa a kunne, fakiti ɗaya a kowane karatu, an bincika kan rubutu, an kare socket, an aika kaya, tsaftataccen rufewa a lokacin miƙa, da jerin hanyoyi da ke rufe inda aka nufa.

Labarai masu alaƙa