P2P

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.

P2P (angl. Peer-to-peer) yra kompiuterinis tinklas, kuris remiasi tinklo dalyvių kompiuteriais, o ne sąlyginai nedideliu skaičiumi serverių. Tai priešingybė kliento-serverio modeliui. Gryname P2P tinkle nėra kliento ir serverio sąvokų – abu susijungę vartotojai yra lygiaverčiai, kiekvienas veikia ir kaip klientas ir kaip serveris.

Vienas iš P2P pavyzdžių yra IRC DCC pokalbis ar failo siuntimas. Centriniai serveriai šiuo atveju reikalingi tik tam, kad padėtų surastų kitą pusę, o paskui bendravimas jau vyksta tiesiogiai.

Pranašumai

  • Centriniam serveriui išėjus iš rikiuotės, susijungę vartotojai ir toliau gali bendrauti
  • Pasiekiami didesni greičiai, nes išvengiama tarpinės grandies – serverio
  • Serveris nežino, kokia informacija keičiasi vartotojai
  • Serveris papildomai neapkraunamas

Turinys

[taisyti] P2P tinklai

Tinklas Klientai
Ares Ares Galaxy, Warez P2P, Filecroc
BitTorrent Azureus, BitComet, BitTorrent, BitTornado, KTorrent, Morpheus, Opera, µTorrent
Direct Connect DC++, NeoModus Direct Connect, BCDC++, ApexDC++, StrongDC++
Gnutella LimeWire, Morpheus
Freenet
eD2K eDonkey, eMule, xMule, aMule
iMesh iMesh, Morpheus
Kademlia eMule
Napster
Kazaa Kazaa, Morpheus
Soulseek Soulseek
Grokster Morpheus

[taisyti] Daugiatinklė P2P programinė įranga

Programinė įranga/klientas Tinklai arba protokolai OS Licencija
aMule eD2K, Kad Tarpplatforminė GPL
eMule eD2K, Kad Windows GPL
FileScope eD2K, Gnutella, Gnutella2, OpenNAP Tarpplatforminė GPL
giFT eD2K, FastTrack, Gnutella Tarpplatforminė GPL
Gnucleus Gnutella, Gnutella2 Windows GPL
iMesh FastTrack, eD2K, Gnutella, Gnutella2 Windows
KCeasy Ares, FastTrack, Gnutella, OpenFT Windows GPL
Kiwi Alpha Gnutella, Gnutella2 Windows
MLDonkey BitTorrent, Direct Connect, eD2K, FastTrack, Gnutella, Gnutella2,
Kad, OpenNap, SoulSeek, HTTP/FTP
Tarpplatforminė GPL
Morpheus NEO tinklas, Gnutella, Gnutella2, BitTorrent Windows
Napshare Key network, MUTE tinklas Linux, Windows GPL
Shareaza BitTorrent, eD2K, Gnutella, Gnutella2 Windows GPL
Zultrax Gnutella, ZEPP Windows

[taisyti] Peer-to-peer architektūros modeliai

Egzistuoja du pagrindiniai architektūrų modelių tipai: Decentralizuoti:

  • Bet kuris mazgas veikia ir kaip klientas, ir kaip serveris.
  • Nėra centrinio serverio.

Hibridiniai:

  • Yra centrinis serveris, saugantis informaciją apie mazgus ir prireikus teikiantis informaciją.
  • Šis serveris nesaugo duomenų, kuriais mazgai nori dalintis tarpusavyje. Pavyzdžiui, mazgas informuoja serverį, kokius failus jis gali pateikti. Kitas mazgas kreipiasi į serverį, prašydamas šių duomenų. Serveris tiesiog nurodo, kur yra duomenis saugants mazgas.

Galimos ir mišrios sistemos, tuo pat metu naudojančios abu modelius. Kai kada kartu naudojamas ir kliento-serverio modelis.

Grynomis P2P laikomos tik decentralizuota architektūra paremtos sistemos. Galima išskriti dvi pagrindines tokių architektūrų klases: bestruktūrės (unstructured P2P systems), pvz., Gnutella ir struktūrizuotos sistemas (structured P2P systems), žymiausi iš kurių yra Chord, P-Grid, Pastry.

[taisyti] "Sveikas, pasauli!" pavyzdys

Žemiau pateikta labai paprasta [Java] programa įgalina bet kurį Interneto jungtį turintį kompiuterį teikti informaciją kitiems kompiuteriams be jokių tarpinių grandžių. Toks „anarchistinis serveris“ pasiekiamas bet kuria naršykle, tačiau (priklausomai nuo tinklo nuostatų) naujai įjungiant kompiuterį jo adresas gali ir keistis.

import java.io.*;
import java.net.*;

public class Pavyzdys
{
    public static void main(String[] args)
    {
        String musu_adresas = null;
        final int portas = 1200; // Ši konstanta nurodo, kurio porto mūsų serveris
                                 // klausys. Jei šis portas užimtas, jį pakeiskite.
        ServerSocket serveris = null;
        try
        {
            serveris = new ServerSocket(portas);
            System.out.println(„Kviečiame apsilankyti adresu:“);
            musu_adresas = "http://" + InetAddress.getLocalHost().getHostAddress() + „:“
                      + serveris.getLocalPort();
            System.out.println(musu_adresas);
        }
        catch (Exception ex)
        {
            System.out.println(„Portas “ + portas + „ naudojamas kažkam kitam!“);
            System.exit(1);
        }

        while (true)
        {
            try
            {
                Socket socket = serveris.accept();
                String atsakymas = "Sveikas, anarchistinis pasauli!";
                OutputStream out = socket.getOutputStream();
                int ilgis = atsakymas.length();
                // Rašome standartines HTTP antraštes naršyklei:
                StringBuffer atsakymo_buferis = new StringBuffer();
                atsakymo_buferis.append(„HTTP/1.0 200 OK\r\n“);
                atsakymo_buferis.append(„Content-Length: “ + ilgis + „\r\n“);
                atsakymo_buferis.append(„Connection: close\r\n“);
                atsakymo_buferis.append(„Content-Type: text/plain; charset=UTF-8\r\n“);
                atsakymo_buferis.append(„\r\n“);
                // Rašome atsakymą:
                atsakymo_buferis.append(atsakymas);
                out.write(atsakymo_buferis.toString().getBytes(„UTF-8“));
                socket.shutdownOutput();
                if (!socket.isClosed()) socket.close();
            }
            catch (Exception exc)
            {
                exc.printStackTrace();
            }
        }
    }
}

Paleista programa atspausdina adresą, kurio ji yra pasiekiama. Apsilankius šiuo adresu, naršyklei pateikiamas tekstas Sveikas, anarchistinis pasauli!. Tekstas matomas kaip ir bet kuris kitas tinklalapis.

Sudėtingesnėse (realiai naudojamose) P2P sistemose naudojama ne standartinė naršyklė, o „anarchistinis klientas“, kuris kartu yra ir serveris. Tokios sistemos (stalo žaidimas) aprašymas anglų kalba.