Cén fáth a ngabhann Android VpnService cuid den trácht agus ní a bhfuil uile
Cinneann bealaí, iontrálacha DNS agus scóip in aghaidh an aip cé na paicéid a shroicheann an gléas tun, cén fáth a n-imíonn gléasanna áitiúla agus cad a dhiúltaíonn an tógálaí.
Ní thrasnaíonn aon rud i VpnService trácht as a stuaim féin. Iarrann sé comhéadan tun ar an gcóras, tugann sé sraith seoltaí agus bealaí don chomhéadan sin, agus ón nóiméad sin déanann an eithne cóip de gach paicéad a mheaitseálann na bealaí sin i dtuairisceoir comhaid is féidir leis an aip a léamh. Ní fheiceann cód na haipe riamh na paicéid nár roghnaigh na bealaí, mar sin is ceist tábla ródaithe í scóip tolláin sula bhfuil sí ina ceist cláraithe. Sin é an fáth ar féidir leis an bhfeidhmiú seirbhíse céanna gach sruth a shlogadh ar fhón amháin agus gan ach píosa ar fhón eile, agus an fáth a ndeisíonn bealach breise uaireanta tollán a raibh cuma bhriste air. Is é a gheobhaidh tú an rud a dhearbhaigh tú, lúide gach a ndiúltaigh an tógálaí go ciúin.
Cinneann bealaí cé na paicéid a thagann
Suiteálann Builder.addRoute(prefix, prefixLength) réimír i dtábla ródaithe líonra VPN. Measann an córas an líonra sin mar an ceann réamhshocraithe do na haipeanna sa scóip, mar sin féachtar ar a iontrálacha roimh bhealach réamhshocraithe an líonra fhisiciúil agus is leor réimír mheaitseálach chun sruth a atreorú. Mar sin tógann bealach do 0.0.0.0/0 IPv4 ina iomláine, an printéir, sprioc cast agus leathanach riaracháin an ródaire san áireamh.
Úsáideann cliaint a theastaíonn an clúdach sin gan an iontráil réamhshocraithe fhisiciúil a scriosadh an péire 0.0.0.0/1 agus 128.0.0.0/1 ina ionad. Buann dhá bhealach níos sainiúla ar bhealach réamhshocraithe, le chéile clúdaíonn siad an spás seoladh ar fad, agus fanann iontráil réamhshocraithe an fhóin féin sa tábla do na soicéid atá fós ceangailte leis an líonra fisiciúil.
Tagann seoltaí agus iontrálacha DNS ón tógálaí céanna agus freagraíonn siad ceist eile. Tugann addAddress seoladh don chomhéadan le fad réimíre, agus suiteálann addDnsServer réiteoir a cheisteoidh aipeanna sa scóip tríd an gcomhéadan. Féadann an dá mhuintir suí ar chomhéadan amháin, mar sin is cumraíocht í sraith bealaí IPv4 amháin in aice le seoladh IPv6 a léitear i gceart agus a sceitheann fós. Má ródálann tú muintir nach bhfuil seoladh sa chomhéadan di, níl seoladh foinse ag an eithne do na paicéid sin agus ní thagann siad chun solais sa tuairisceoir choíche.
Cad a thugann establish() ar ais
Tugann establish() ParcelFileDescriptor ar ais, nó null nuair nach bhfuil an aip údaraithe. Is staid toilithe é null seachas earráid líonra: caithfidh VpnService.prepare() a bheith tar éis null a thabhairt ar ais cheana, nó caithfidh an t-úsáideoir dialóg an chórais a cheadú roimh an nglao. Is féidir toiliú a tharraingt siar agus an tseirbhís ag rith, agus dúnann an comhéadan fút gan aon aisghlao isteach i do lúb léitheoireachta.
Níl an tuairisceoir blocála mura ndeir tú a mhalairt, mar sin filleann léamh láithreach gan sonraí in ionad an snáithe a pháirceáil. Dónn lúb a scríobhadh do shoc ó blocála croí amháin, agus stróiceann lúb a mheasann léamh folamh mar rud marfach an tollán le linn soicind díomhaoin. Athraíonn Builder.setBlocking(true) an t-iompar sin, agus is é an praghas snáithe a fhanann taobh istigh den léamh.
Bailíochtaítear argóintí bealaigh agus seoltaí mar luachanna LinkAddress, agus diúltaítear go huile do chinn scríbe multicast ar nós 224.0.0.0/4. Níl fearann craolacháin ag comhéadan tun pointe le pointe ach an oiread, mar sin teastaíonn dearadh difriúil ó fhionnachtain multicast tríd seachas bealach amháin eile. Tá treoir VpnService.Builder ar an liosta le seiceáil sula gcríochnaíonn tú gur tugadh neamhaird ar ghlao.
Cúngaíonn scóip in aghaidh an aip an tacar, ní an tollán
Ó API 21 glacann an tógálaí le addAllowedApplication agus addDisallowedApplication, agus tá an dá liosta comheisiatach laistigh d'aon tógálaí amháin. Cuireann liosta ceadaithe an tollán ar fáil do na paicéid sin agus coinníonn gach aon rud eile an líonra fisiciúil; gabhann liosta diúltaithe gach rud seach na paicéid ainmnithe, rud a thairgeann cliant mar thollán scoilte. Roimh API 21 níl aon mheicníocht ardáin ann ar chor ar bith, agus tháinig iompar in aghaidh an aip ó chliaint tríú páirtí a rinne scagadh de réir UID laistigh dá n-aistritheoir féin. Tá tábhacht leis an idirdhealú agus tú ag dífhabhtú, mar is ar éigean a tháirgeann tollán in aghaidh an aip le liosta ceadaithe d'aon phaicéad amháin trácht ar bith, agus is iompar ceart é sin, ní bealach briste.
Cibé an scóip é, ní féidir leis an soc a osclaíonn d'aip chuig freastalaí VPN taisteal tríd an tollán atá á thógáil aige. Ceanglaíonn VpnService.protect(socket) an soc sin leis an líonra bunúsach ionas go scipeálann a phaicéid an gléas tun. Má scipeálann tú an glaoch, slogtar an croitheadh lámh ag an gcomhéadan ar cheart dó é a ardú.
Dúnann VpnService.setUnderlyingNetworks an lúb trí insint don chóras cé an líonra fisiciúil a iompraíonn an tollán. Cinneann an luach sin conas a thuairiscíonn an VPN nascacht d'aipeanna eile, agus is cúis rialta le tollán nasctha a mheasann an chuid eile den fhón a bheith as líne é luach null nó sean. Nuashonraigh é nuair a athraíonn an líonra bunúsach, ní hamháin ag an am tosaithe.
Suimeanna seiceála agus MTU: áit a dteipeann ar bhealach ceart fós
Nuair a shroicheann paicéid, cinneann dhá mhionsonra ag leibhéal an phaicéid an n-oibríonn rud ar bith ó cheann go ceann. Is é an chéad cheann an seoladh foinse: le roinnt seoltaí comhéadain féadfaidh an eithne paicéid a astú a iompraíonn an chéad cheann, mar sin caithfidh aistritheoir a athscríobhann ceanntáisc an seoladh agus an tsuim seiceála a chlúdaíonn é a cheartú.
Is é an dara ceann scóip na suime seiceála. Nuair a thógann an aip paicéid TCP nó UDP í féin, clúdaíonn an tsuim seiceála feas ar bhréige a bhfuil an seoladh foinse, an seoladh sprice, uimhir an phrótacail agus fad an iompair ann, agus má fhágtar aon cheann acu ar lár faightear paicéid a shroicheann agus a chaitear. Breathnaíonn an teip sin mar amadam tar éis freagra nach dtagann choíche, rud a chuirfidh formhór na ndaoine ar ais chuig na bealaí. Socraíonn setMtu MTU an chomhéadain, agus filleann gach léamh go díreach aon phaicéad IP iomlán amháin, mar sin déanfaidh maolán a scríobhadh do shruth beart do pharsáil a ilroinnt, ní an paicéad.
Pas seiceála a scarann na sraitheanna
Chun a fháil amach cá ndeachaigh an scóip amú, tástáil na sraitheanna in ord. Fiafraigh den ghléas cé na bealaí atá ag líonra VPN i ndáiríre, ansin seiceáil an dtagann sruth chuig seoladh aitheanta chun solais mar léamh ar an tuairisceoir, ansin seiceáil an bhfuil an paicéad a astaíonn d'aistritheoir dea-chumtha. Ní thaispeánann fadhb bhealaigh aon rud ag an tuairisceoir, agus taispeánann fadhb suime seiceála paicéad a shroicheann agus a imíonn.
Mura sroicheann aon rud an tuairisceoir, is é an tsraith bhealaí an t-amhrastach seachas an léitheoir: deimhnigh na réimírí, deimhnigh go bhfuil seoladh sa mhuintir chéanna, agus deimhnigh go bhfuil an aip laistigh den scóip a shocraigh tú. Má shroicheann paicéid an tuairisceoir ach nach dtagann aon rud ar ais, scrúdaigh protect() agus luach an líonra bhunúsaigh sula dteagmhálann tú le bealach arís. Má thuairiscíonn an taobh i bhfad paicéid mhífhoirmithe, is iad an tsuim seiceála agus an MTU na háiteanna le breathnú. Coigilann aon phromhadh in aghaidh na sraithe tráthnóna tomhas.