L'esempio comune di un protocollo P2P è Bittorrent. In questo protocollo le comunicazioni sono spesso gestite da un tracker. Questo significa che per il trasferimento dei dati sono necessari almeno tre nodi:
+-----+ +---------+ +------+
| | 1.1.1.1:500 | | | |
| You |<------------->| Tracker |<---->| Peer |
| | | | | |
+-----+ +---------+ +------+
La connessione inizia con il dire al tracker il tuo indirizzo IP e la porta su cui puoi collegarti. Il tracker lo memorizza in una tabella di stato:
+--------------+------------+
| Nodes | Completion |
| 1.1.1.1:500 | 0% |
| 2.2.2.2:1000 | 100% |
+--------------+------------|
Peer
ha stabilito che è collegabile alla porta 1000. Torneremo su questo.
Indirizzi 1.1.1.1
e 2.2.2.2
rappresentano gli indirizzi esterni dei dispositivi NAT. Questi dispositivi sono ubiquitari nell'odierno Internet poiché quasi ogni utente ha un router installato per fornire l'accesso a diversi computer, cellulari, console di gioco ecc.
Ciò significa che dietro questi indirizzi ci sono più indirizzi, uno per ciascuno di questi dispositivi.
Tuttavia, poiché un indirizzo può essere collegato solo a una porta nell'intervallo 1-65535
, in che modo il router sa se connettere una richiesta di porta 500 al computer con il client torrent in esecuzione? Lo istruisci fornendogli una regola chiamata port forwarding per dire "qualsiasi connessione ricevuta sulla porta 500, voglio essere inoltrata a me" - dove me
è il tuo indirizzo interno (uno di 10.x.x.x
, 192.168.x.x
o 172.16.x.x
).
Come ti sei appena unito allo "sciame" annunciando al tracker, il tracker ti manda la tabella di stato sopra. Sai che ti sei appena iscritto e hai completato lo 0%, ma che Peer
ha il completamento al 100%, il che significa che se ti connetti a lui sarai in grado di iniziare a ricevere i dati.
Se Peer
non ha "inoltrato" la sua porta (1000, come ha riferito al tracker quando ha annunciato), tuttavia non sarà possibile connettersi e iniziare a ricevere dati. Questo ovviamente non è desiderabile dato che ora non puoi completare il torrent perché nessuno è disponibile per condividerlo.
Se Peer
non ha annunciato da quando ti sei connesso, non sa che tu esisti ancora. Tuttavia, se hai configurato correttamente il port forwarding, quando ti annuncia e ricevi la nuova tabella di stato con te, può iniziare la connessione con te. Questo funzionerà da quando la tua porta viene inoltrata.
Se entrambi di te non hanno abilitato il port forwarding, allora nonostante stavi annunciando al tracker, perché le porte che hai detto al tracker non tornano effettivamente alla tua macchina , tutte le possibili connessioni dati sono bloccate dai tuoi router / dispositivi NAT.
Quindi in breve: il port forwarding aiuta a migliorare lo scambio di dati P2P rendendo più semplice la creazione di connessioni e, a meno che ogni membro non abiliti il port forwarding di qualche tipo, è impossibile scambiare dati in modo P2P.