Cum funcționează I2P, de ce este lent și de ce nu folosește lățimea de bandă completă?

Probabil unul dintre cele mai frecvente lucruri pe care oamenii le întreabă este „cât de repede este I2P?”, și nimeni nu pare să-i placă răspunsul - „depinde”. După ce am încercat I2P, următorul lucru pe care îl întreabă este „se va face mai repede?”, iar răspunsul la acesta este cel mai mult empatic da.

I2P este o rețea dinamică completă. Fiecare client este cunoscut altor noduri și testează nodurile cunoscute locale pentru accesibilitate și capacitate. Doar nodurile accesibile și capabile sunt salvate într-un NetDB local (în general, este doar o porțiune a rețelei, aproximativ 500-1000). Când I2P construiește tuneluri, selectează cea mai bună resursă din acest pool. De exemplu, un mic subset de 20-50 de noduri sunt disponibile numai pentru a construi tunele cu. Deoarece testarea se întâmplă în fiecare minut, grupul de noduri folosite se schimbă în fiecare minut. Fiecare nod I2P cunoaște o parte diferită a plasei, ceea ce înseamnă că fiecare router are un set diferit de noduri I2P pentru a fi utilizate pentru tuneluri. Chiar dacă două routere au același subset de noduri cunoscute, testele privind accesibilitatea și capacitatea vor arăta probabil rezultate diferite, deoarece celelalte routere ar putea fi sub sarcină la fel ca testele unui router, dar să fie gratuite dacă al doilea test de router.

Cele de mai sus descriu de ce fiecare nod I2P are noduri diferite pentru a construi tuneluri. Deoarece fiecare nod I2P are o latență și o bandă diferită, tunelurile (care sunt construite prin acele noduri) au valori diferite de latență și de lățime de bandă. Și pentru că fiecare nod I2P are tuneluri diferite construite, nu există două noduri I2P nu au aceleași seturi de tunel.

Un server / client este cunoscut sub numele de „destinație” și fiecare destinație are cel puțin un tun de intrare și unul de ieșire. Valoarea implicită este de 3 hamei pe tunel. Aceasta adaugă până la 12 hamei (de asemenea 12 noduri I2P diferite) pentru un roundtrip complet client-server-client .

Fiecare pachet de date este trimis prin 6 alte noduri I2P până când ajunge la server:

client - hop1 - hop2 - hop3 - hopa1 - hopa2 - hopa3 - server

și la întoarcere 6 noduri I2P diferite:

server - hopb1 - hopb2 - hopb3 - hopc1 - hopc2 - hopc3 - client

Deoarece majoritatea traficului pe I2P (www, torrent, ...) au nevoie de pachete ack până când sunt trimise date noi, trebuie să aștepte până când un pachet ack se întoarce de pe server. În final: trimiteți date, așteptați ack, trimiteți mai multe date, așteptați ack, .. Pe măsură ce RTT (RoundTripTime) se adaugă din latența fiecărui nod I2P individual și a fiecărei conexiuni de pe acest roundtrip, durează de obicei 1-3 secunde până când un pachet ack revine clientului. Cu unele interne ale transportului TCP și I2P, un pachet de date are o dimensiune limitată și nu poate fi la fel de mare pe cât ne dorim. Împreună, aceste condiții stabilesc o limită de lățime de bandă maximă pe tunel de 20-50 kbyte / sec. Dar, dacă NUMAI UN singur salt în tunel are doar o lățime de bandă de 5 kb / sec pentru a cheltui, întregul tunel este limitat la 5 kb / sec, independent de latența și alte limitări.

Datorită criptării utilizate și a altor setări în I2P (cum să construiți tuneluri, latență, ...), este destul de scump în timpul procesorului să construiți un tunel. Aceasta este de ce o destinație este permisă doar să aibă maxim 6 tunele IN și 6 OUT pentru a transporta date. Cu un maxim de 50 kb / sec pe tunel, o destinație ar putea utilizați aproximativ 300 kb / sec trafic combinat (în realitate ar putea fi mai mult dacă sunt utilizate tuneluri mai scurte cu anonimat scăzut sau nu există). Tunelurile folosite sunt aruncate la fiecare 10 minute și sunt construite altele noi. Această schimbare a tunelurilor (și uneori a clienților care se închid din greu datorită utilizării „închise simultan” sau a situațiilor în care există pierderi de energie) uneori rupe tuneluri și conexiuni, așa cum se vede în rețeaua IRC2P în pierderea conexiunii (ping timeout) sau pornit atunci când utilizați eepget.

Cu un set limitat de destinații și un set limitat de tunele pe destinație, un nod I2P folosește doar un set limitat de tuneluri pe alte noduri I2P. De exemplu, dacă un nod I2P este "hop1" în exemplul mic de mai sus, vom vedea doar 1 tunel participant provenind de la client. Dacă însumăm întreaga rețea I2P, numai un număr destul de limitat de tunele participante ar putea fi construite cu o cantitate limitată de lățime de bandă împreună. Dacă se distribuie aceste numere limitate între numărul de noduri I2P, există doar o fracțiune de lățime de bandă / capacitate disponibilă pentru utilizare.

Pentru a rămâne anonim un router nu trebuie utilizat de întreaga rețea pentru construirea de tuneluri. Dacă un router acționează ca un router tunel pentru TOATE nodurile I2P, acesta devine un punct central de eșec foarte real, precum și un punct central pentru a apuca IP-uri și date de la clienți. Acest lucru nu este bun. I2P încearcă să răspândească încărcarea pe o mulțime de noduri I2P din acest motiv.

Un alt punct este rețeaua de plasă completă. Fiecare conexiune hop-hop utilizează o conexiune TCP sau UDP pe nodurile I2P. Cu 1000 de conexiuni, se vede 1000 de conexiuni TCP. Acest lucru este destul de mult, iar unele routere de birou pentru casă și pentru birouri mici (DSL, cablu, ..) permit doar un număr mic de conexiuni (sau pur și simplu înnebuniți dacă utilizați mai mult de conexiuni X). I2P încearcă să limiteze aceste conexiuni pentru a fi sub 1500 per UDP și per tip TCP. Acest lucru limitează și cantitatea de trafic parcursă pe nodul dvs. I2P.

În rezumat, I2P este foarte complex și nu există o modalitate ușoară de a identifica de ce nodul dvs. nu este utilizat. Dacă nodul dvs. este accesibil și are o setare de lățime de bandă> 128 kbyte / sec partajată și este accesibil 24/7, ar trebui să fie utilizat după ceva timp pentru traficul participant. Dacă este în intervalul intermediar, testarea nodului dvs. I2P efectuată de alți noduri le va spune: nu sunteți accesibil. Acest lucru vă blochează cel puțin nodul 24h pe alte noduri. Deci, celelalte noduri care v-au testat în jos nu vă vor folosi nodul pentru 24 de ore pentru construirea de tuneluri. Acesta este motivul pentru care traficul dvs. va fiți mai jos după o repornire / oprire pentru cel puțin 24 de ore.

De asemenea: alte noduri I2P trebuie să-ți cunoască routerul I2P pentru a-l testa pentru disponibilitate și capacitate. Este nevoie de timp pentru ca alte noduri să fie cunoscute de nodul dvs. Va fi mai rapid dacă utilizați I2P și construiți mai multe tuneluri, de ex. folosiți un torrent sau www de ceva timp.

Imbunatatiri ale performantei

Pentru posibile îmbunătățiri viitoare a performanței, a se vedea Îmbunătățirile viitoare ale performanței.

Pentru îmbunătățiri ale performanței anterioare, consultați secțiunea Istoricul performanțelor.