Come funziona peer-to-peer su Internet?


15

Da quanto ho capito, non c'è modo di inviare un pacchetto a un computer in una rete locale dall'esterno della rete, a meno che non conosciamo il meccanismo di routing utilizzato dal router.

Supponendo che abbiamo un set-up simile a questo:

  1. Computer-A, IP 192.168.1.2 (gateway predefinito 192.168.1.1)

  2. Computer-B, IP 192.168.1.3 (gateway predefinito 192.168.1.1)

  3. Router-C, IP 192.168.1.1 (IP esterno 1.1.1.1)

  4. Router-D (IP esterno 2.2.2.2)

Computer-A, Computer-B e Router-C appartiene alla stessa rete locale. Il router-D vuole inviare dati al computer-A, ma non può farlo senza passare attraverso il router-C.

Ora Router-C inoltrerà i pacchetti a Computer-A se la porta di destinazione è 1000 e inoltrerà i pacchetti a Computer-B se la porta di destinazione è 2000. Ma sicuramente, l'unico dispositivo che conosce questo meccanismo di routing è lo stesso Router-C! Nemmeno Computer-A né Computer-B lo sapranno, giusto?

Quindi il Router-D può inviare un pacchetto al Computer-A se invia un pacchetto al Router-C attraverso la porta 1000, ma come fa il Router-D a sapere di inviare i pacchetti attraverso la porta 1000 e non dire la porta 1001?

In che modo i programmi peer-to-peer come Bittorrent riescono a superare questo problema? L'unica soluzione che mi viene in mente è che Router-D invii il pacchetto al Router-C attraverso tutte le porte, in modo tale che venga inoltrato al Computer-A, ma esiste una soluzione migliore?

Risposte:


9

La tua confusione deriva da alcune ipotesi errate.

Ma sicuramente, l'unico dispositivo che conosce questo meccanismo di routing è lo stesso Router-C! Nemmeno Computer-A né Computer-B lo sapranno, giusto?

Cosa, perché? Allora perché il router è stato configurato per inoltrare quelle porte a quegli IP? È necessario configurare il client P2P per utilizzare una porta specifica e quindi configurare il router in modo che corrisponda.

ma come fa il router-D a sapere di inviare pacchetti attraverso la porta 1000 e non dire la porta 1001?

Perché si configura il client P2P per utilizzare una porta specifica (standard o non standard per quel protocollo).

L'unica soluzione che mi viene in mente è che Router-D invii il pacchetto al Router-C attraverso tutte le porte, in modo tale che venga inoltrato al Computer-A, ma esiste una soluzione migliore?

È molto più semplice di così. Quando il client stabilisce una connessione a un peer, specifica quale porta desidera utilizzare, quindi il peer invia i dati su quella porta.

Hmm, ma Bittorrent non cambia il comportamento del router giusto? Dato che alcuni meccanismi di routing avrebbero potuto essere dinamici, come dimostrato in superuser.com/a/187190/78897, come fa Computer-A a saperlo?

Il client non influenza direttamente il router, ma il router può essere configurato / abbastanza intelligente da adattarsi al comportamento del client. È possibile abilitare UPnP sia nel router che nel client per configurare automaticamente la connessione e la maggior parte dei router ha capacità di ispezione stateful come parte del loro meccanismo di port forwarding .

Nel complesso, ciò significa che è possibile stabilire dinamicamente una connessione su una porta casuale, quindi il router può tenere traccia di ciò che sta accadendo invece di visualizzare tutto come connessioni casuali e prive di significato. In questo modo, può inoltrare una connessione secondo necessità perché, ad esempio, è una risposta a questa altra connessione appena avvenuta .

Il problema si presenta quando si hanno più sistemi che utilizzano lo stesso programma. Avere più sistemi collegati allo stesso router, condividere lo stesso IP e utilizzare porte dinamiche diventa rapidamente ingestibile e anche con un'ispezione stateful, è difficile se non impossibile farlo funzionare correttamente. In tal caso, dovranno essere utilizzate porte statiche (predefinite o di altro tipo).


Se utilizzi un programma come SmartSniff o TCPView per monitorare le tue connessioni, noterai che le connessioni P2P avranno di solito la porta che hai configurato (o il valore predefinito per il client) come destinazione per le connessioni in entrata e il valore predefinito o personalizzato / porta casuale per l'origine e viceversa per le connessioni in uscita.


Hmm, ma Bittorrent non cambia il comportamento del router giusto? Dato che alcuni meccanismi di routing avrebbero potuto essere dinamici, come dimostrato in superuser.com/a/187190/78897 , come può Computer-A saperlo?
Pacerier,

Port forwarding. L'hai impostato in anticipo.
UtahJarhead,

@Pacerier Se sia il router che l'app p2p utilizzano UPnP , il port forwarding può essere eseguito in modo dinamico. In questo caso, sì Bittorrent fa cambiare il comportamento del router.
zero2cx

@ zero2cx, c'è comunque da fare peer-to-peer senza cambiare il comportamento del router?
Pacerier,

@Pacerier, se si vuole avere il NAT (più sistemi che condividono una connessione), quindi è necessario configurare in qualche modo il router per sapere dove fare i collegamenti (beh, tecnicamente si potrebbe semplicemente avere tutti vomitare ogni connessione a tutte le porte come da te suggerito, ma sarebbe al massimo orribile). Puoi farlo staticamente (configurare IP e porte) o dinamicamente (UPnP).
Synetech,

4

La tua domanda tocca il cuore di Internet e la definizione stessa di routing. Nel tuo esempio, il router D invia i dati al computer A in base a due premesse:

  • È stato detto di inviare dati al computer A.
  • Ha già elaborato i dati dal computer A.

Il tuo scenario sembra assumere la prima opzione: il router D vuole inviare al computer A. Ma come ci arriva? Lo fa attraverso l'uso di tabelle di routing condivise tra router.

Il router C invia regolarmente aggiornamenti a tutti i router di cui è a conoscenza, incluso il router D, che "conosce" la rete "192.168. *" (In realtà - ciò non accadrà perché tale rete non è instradata - è considerata privata. Ma ignoralo.) Quindi, il router D sa già che il router C conosce quella rete.

Pertanto, quando i dati sono destinati al computer A, vengono prima indirizzati dalla rete. Quindi, il router D chiede: "Devo trovare la rete 192.168. *. Lo so? No. Conosco qualcun altro che lo fa? Sì. Il router C fa. Come posso accedere al router C? Attraverso il mio 2.2. 2.2. "

Il router D invia quindi i dati al router C. Il router C li riceve e dice "Oh, ho i dati dal router D ma è per la rete 192.168. Conosco quella rete? Sì, attraverso la mia rete 192.168.1.1" E poi lo inoltra.

C'è altro lavoro da fare per risolvere l'indirizzamento IP e MAC, ma sto coprendo il routing, di per sé, non l'ARP e le reti locali.

Noterai che il tuo primo presupposto - il router remoto deve conoscere il meccanismo di routing - non entra in gioco qui. Al router D non importa se il router C utilizza EIGRP, RIP, RIPv2, OSPF o altro. Tutto ciò che importa è che abbia ricevuto un aggiornamento. (Naturalmente, come è stato ottenuto un aggiornamento è importante per garantire che i due rimangano sincronizzati. Ma ancora una volta, questo è un problema diverso.)

Anche la seconda ipotesi, ovvero che il numero di porta sia un fattore nel routing, è errata. I router (in genere) non necessitano delle informazioni sulla porta per prendere le decisioni di routing. (Ciò è leggermente cambiato, a causa di alcune nuove tecnologie di rete e si applica principalmente ai firewall e ai proxy, ma il presupposto più ampio si applica ancora ai router "veri".)

Continuando con il tuo esempio, il router C inoltrerà i dati sulla porta 1000 (per il tuo scenario) perché è possibile che ci sia un servizio sul Computer A in attesa di dati su quella porta specifica. Ma lo sa solo perché il router D lo ha inviato sulla porta 1000. E il router D lo invia solo su quella porta perché l'originatore dei dati lo ha inviato al router D su quella porta.

Non capisco che la tua inclusione di programmi bittorrent o P2P rifletta la domanda che poni. Si applicherebbero le stesse spiegazioni. I router possono anche essere configurati con il trigger di porta che associa un determinato dispositivo (o IP) a una determinata porta. In modo tale che quando il traffico arriva nella porta 1234, i router sanno di inviare dati al dispositivo ABCD. Questo è solitamente associato a una porta TCP in uscita. cioè se invio traffico sulla porta 7890, il router sa che il traffico in entrata sarà sulla porta 1234 e me lo invierà.

Ma il trigger delle porte non è associato alle decisioni di routing (remoto), ma si riferisce alla tabella MAC / IP interna utilizzata dal router per la LAN.

Aggiorna / modifica : per rispondere ulteriormente ed elaborare dopo il tuo commento. Il router D conosce il computer A solo per il suo indirizzo IP (192.168.2.2). Ma il router C conosce il computer A per il suo indirizzo IP e per il suo indirizzo MAC. Il MAC (Media Access Control) è un identificatore univoco (di solito ...) a 48 bit definito dallo standard internazionale. Ogni dispositivo collegato a una LAN (cablata e wireless) dovrebbe avere un indirizzo MAC univoco.

Il router (router C) associa l'indirizzo IP e l'indirizzo MAC insieme in una tabella (la tabella degli indirizzi MAC). Pertanto, quando il traffico arriva al router C e il router si rende "locale", esegue una ricerca nella tabella degli indirizzi MAC. Il router quindi cambia letteralmente le informazioni di indirizzamento del frame.

Ricostruisce (riscrive) le informazioni di destinazione del Livello 2 per avere l'indirizzo MAC di destinazione del Computer A ma mantiene le informazioni dell'indirizzo IP (Livello 3) uguali.

Se il percorso NON conosce l'indirizzo MAC. O non ha una relazione IP-MAC nella sua tabella, fa qualcosa chiamato ARP (protocollo di risoluzione dell'indirizzo) per chiedere "HEY, tutti su questa rete. Hai questo indirizzo MAC?" O a volte - "Tutti, qual è il tuo indirizzo MAC?"). Il dispositivo / i dispositivi appropriati risponde e il router crea la sua tabella IP-MAC.


Quindi Router-D invia un pacchetto a Router-C attraverso la porta 60000 (preconfigurata), Router-C riceve il pacchetto, ma come fa a sapere che questo pacchetto deve essere inoltrato a Computer-A?
Pacerier,

1
Il router D conosce già la destinazione finale - Computer A. It (router D) conosce il computer A solo tramite il suo indirizzo IP: 192.168.2.2. Ma il router C conosce il computer A con due metodi: l'indirizzo IP (192.168.2.2) e qualcosa chiamato il suo indirizzo MAC. Aggiornerò la risposta con maggiori informazioni.
John,

2

Port Triggering. In che modo un server Web ti invia una pagina Web dopo averla richiesta? Perché l'hai richiesto. Quando lo richiedi, il router sa di aspettarsi una risposta e quando lo riceve, lo inoltra al PC appropriato. Alcuni programmi sono scritti per innescare un'apertura in previsione di un segnale da un PC specifico, anche se uno non è realmente sulla sua strada.

Alcuni modelli hanno un server centrale utilizzato per le comunicazioni di base. Per esempio:

  • Client1 accede con Server per comunicazioni a 2 vie.
  • Client2 accede per la stessa cosa.

Il server ora conosce tutti i file di Client1 e Client2.

  • Client2 dice "Voglio il file X da Client1" al server.
  • Il server dice a Client1 "Client2 vuole il file X."
  • Il client 1 invia un immondizia di dati all'IP pubblico di Client2, impostando il trigger porta in modo da aprire la porta per una risposta da Client2.
  • Client2 invia il suo segnale iniziale all'IP pubblico di Client1.

Client1 ha appena ingannato il router per aprire quella porta per Client2.

In alcuni casi, come BitTorrent o Napster originale (iirc), è necessario inoltrare una porta sul router affinché funzioni in modo ottimale.

Per quanto riguarda gli altri client che sanno a quale porta connettersi inizialmente, è perché il tuo cliente ha detto allo sciame o al server quale porta usi. BitTorrent utilizza spesso un tracker e tiene traccia di quali porte sono utilizzate da quali client.


Per quanto loro sappiano quali porte usare ... si configura il client per l'ascolto su una porta specifica. Il tuo client dice allo sciame (come nel caso di BitTorrent) a quale porta sei in modo che gli altri client sappiano a cosa connettersi. Il tuo PC ha detto loro.
UtahJarhead,

Penso che tu abbia risposto mentre il mio primo addendum veniva scritto. Corretta?
UtahJarhead,

ma come fa il PC a conoscere il meccanismo di routing quando è il router a farlo? Alcuni meccanismi avrebbero potuto essere dinamici, come dimostrato in superuser.com/a/187190/78897
Pacerier,

No, non è necessario conoscere il routing. Perché la maggior parte dei client P2P funzioni correttamente, è necessario che Port Forwarding sia configurato correttamente sul router. Senza di essa, puoi comunicare solo con altri clienti con cui parli per la prima volta. Non possono iniziare la conversazione. Ho brevemente toccato questo
aspetto

Ma il port forwarding è possibile solo se l'amministratore lo ha preconfigurato. Intendi dire che Bittorrent riconfigura i nostri router?
Pacerier,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.