Sto provando a sperimentare con alcune reti p2p. Dopo aver fatto qualche ricerca, uno dei maggiori ostacoli che ho imparato è "Cosa succede se un cliente è dietro un NAT/Firewall", in seguito ho scoperto di Hole Punching ma non è sempre garantito il funzionamento.
Per quanto un ho capito, non capisco il motivo per cui potrebbe non riuscire, questo è quello che so finora: Che cosa c'è di così difficile nella perforatura con p2p?
![enter image description here](https://i.stack.imgur.com/MlnEe.jpg)
Sulla base del diagramma qui sopra, questo è come ho capito come una connessione può essere stabilito
- Alice si unisce alla rete (1) creando il collegamento a una directory server. Quando ciò accade, il NAT di Alice crea una mappatura dal suo IP pubblico al suo ip locale.
- Il server di directory riceve la connessione e negozio di Alice pubblico
ip:port
nella directory - Bob fa la stessa (2), si unisce alla rete e pubblica il suo
ip:port
nella directory - Alice vuole comunicare con bob. Quindi cerca di Bob
ip:port
dalla directory. (3) - Alice invia i dati relativi Bob
ip:port
, che ha ottenuto dal server. (5) - Dal Bob ha anche una mappatura da è
ip:port
al suo localeip:port
, il NAT inoltra semplicemente i dati ricevuti su di Bob pubblicoip:port
al suo computer. - stesse opere per Alice
Spero di essere stato chiaro nella mia spiegazione di quello che ho capito. La mia domanda è, cosa c'è di così difficile o inaffidabile a riguardo? mi deve essere chiaramente manca qualcosa. Puoi spiegarmi di cosa si tratta?
grazie per la tua risposta! Solo una domanda riguardante: "Un problema è che i mapping NAT nel server NAT di Alice scadono". Non potresti risolvere questo problema facendo in modo che il server di directory esegua il ping di Alice in modo costante? In caso contrario, in che modo il tipico client p2p risolve questo problema? – Krimson
1) Potrebbe funzionare. 2) Non lo so. Non ho mai provato a leggere il codice sorgente di un sistema P2P compatibile con NAT. (Ma si potrebbe.) 3) Questa intera domanda è off-topic per StackOverflow. –