Iată o schiță și justificarea pentru o WWW proxy app minime pentru utilizarea cu I2P.
Functionarea HTTP peste I2P folosind I2PTunnel. În cazul în care SocketLibrary de bază este afară, singura diferență semnificativă va fi "wrapRequest" și 'unwrapRequest "va fi funcțional plasate în socketLibrary, nu în router (dar mai târziu versiuni ale SocketLibrary va putea utilizează ACK selective și ferestre de mari dimensiuni, care să permită mai multe ACK-uri pentru a fi ignorate)
---BROWSER--->-I2PTUNNEL--->-ROUTERA--->-ROUTERB--->-I2PTUNNEL--->-HTTPD---------- 1: openCon 2: requestCon 3: wrapRequest 4: unwrapRequest 5: receiveACK receiveCon 6: sentSuccess sendSYN 7: wrapRequest 8: unwrapRequest 9: receiveSYN receiveACK 10: "GET /" sentSuccess 11: sendData 12: wrapRequest 13: unwrapRequest 14: receiveACK receiveData 15: sentSuccess "GET /" 16: "HTTP 200\n\nHi" 17: sendData 18: wrapRequest 19: unwrapRequest 20: receiveData receiveACK 21: "HTTP 200\n\nHi" sentSuccess 22: closeCon 23: sendClose 24: wrapRequest 25: unwrapRequest 26: receiveACK receiveClose 27: sentSuccess
O formă optimizată, proiectat să se ocupe doar 128KB de [1] fișiere și pagini, poate funcționează mult mai rapid:
BROWSER --> MinWWW --> ROUTERA --> ROUTERB --> MinWWW --> HTTPD 1: openCon 2: opened 3: "GET /" 4: sendData 5: forward 6: receive 7: receiveData 8: "GET /" 9: "HTTP 200\n\nHi" 10: sendData 11: forward 12: receive 13: receiveData 14: "HTTP 200\n\nHi" 15: closeCon 16: closed
Diferența de încărcare a rețelei și de latență este semnificativ - acesta este în esență, o versiune UDP de HTTP. Pe web normal, nu putem într-adevăr că, deoarece cele mai multe cereri HTTP și răspunsuri sunt ordine de mărime mai mari decât UDP pachete sprijine funcțional, dar în I2P, mesajele pot fi mari. economiile pentru sarcina de rețea vine de la faptul că nu avem nevoie pentru a trimite orice ACK mesaje - mai degrabă decât folie / cererea desface mai devreme (ce include un DataMessage cu o DeliveryStatusMessage de a asigura livrarea garantat), MinWWW ocupă proxy cu retransmite (dacă este necesar - în I2PTunnel de astăzi, nu există retransmite).
Datele pe care proxy MinWWW și serverul trebuie să-și încheie este banal - în cazul în care proxy vrea să trimită "GET /", ea, adauga inaintea cu destinație I2P trimiterea cererea, urmate de o solicitare ID 4 octeți. Serverul MinWWW primește cele cereri, contacte httpd adecvat, trimite cererea, așteaptă răspuns, și trimite un răspuns la proxy MinWWW conține răspunsul, prefix cererea ID-ul original. Că răspunsul este preluat și a trecut înapoi la browser și conexiunea este închisă.
În plus, proxy-ul MinWWW poate alege serverul MinWWW pentru folosirea din lista, trece printr-un round robin sau alt algoritm, astfel încât există mai multe outproxies fuzionate transparent. Lățimea de bandă necesară pentru rularea unului dintre aceste outproxies este, de asemenea, redusa foarte mult, deoarece acesta se va ocupa doar 128KB fișiere (aka nimeni nu e de gând să descărce filme porno, warez, etc).
Funcționalitatea /este/ limitata, dar 128KB de date este mult pentru o singura cerere sau răspuns HTTP. Diagramele de mai sus sunt, de asemenea, nerealiste în sectorul hameiului lor - ROUTERA într-adevăr nu va vorbi direct la ROUTERB. ROUTERA va trimite fiecare din mesaje prin două routere de ieșire suplimentare, apoi înaintat două routere de intrare suplimentare ROUTERB, astfel încât decalajul nu este semnificativ - în timp ce cele de mai sus salvează numai 11 pași, 8 dintre aceste măsuri trebuie să traverseze întreaga cale tunel (4 + hamei la distanță de fiecare dată când tuneluri sunt 2 hamei de la distanță în fiecare întindere), lăsând MinWWW cu doar doua traversari complete (una pentru cerere, unul pentru răspunsul), în loc de 10.
Punerea în aplicare a proxy MinWWW și serverului ar trebui să fie destul de usoara - citit o HTTP cerere complet din partea clientului (poate începe numai cu HTTP GET, lăsând POST HTTP pentru mai târziu), înfășurați mesajul, și așteptați răspunsul. serverul la rândul său, pur și simplu are nevoie pentru a analiza cererea fie a deschide un socket sau URL-ul, trimiteti cererea, așteptați răspunsul, și trimite-l înapoi prin intermediul rețelei. Dacă cineva a fost să pună în aplicare acest lucru, ar fi bine :)
[1] De ce fișiere 128KB? În prezent, I2CP funcțional permite mesaje dimensiune arbitrara , dar care va fi merge departe, deoarece aceasta implică memorie excesiva pe routere intermediare, sau detalii suplimentare de punere în aplicare . I2PTunnel este în prezent limitat la 128KB și nu a fost o povară,așa că, probabil, ar putea fi crescută la 256KB când spec. I2CP va fi actualizata)