via por peliculas online now eztv español descargar java tcp bittorrent

java - por - eztv español



¿Qué utilizan BitTorrent y Gnutella para omitir NAT al transferir archivos? (3)

Creo que Universal Plug and Play (UPnP) es un protocolo que le permite configurar el reenvío de puertos en el enrutador mediante programación. Sin embargo, no estoy seguro de si ese es el único método que usan esos programas.

Eche un vistazo al proyecto UPnP PortMapper para una implementación de Java.

Este artículo de CodeProject también se ve bien, aunque no es Java: uso de UPnP para los reenvíos de puertos programáticos y NAT Traversal .

Estoy tratando de hacer un proto / software para compartir archivos p2p en Java. Estoy interesado en aprender a usar socket, así que no usaré JXTA ni ningún tipo de API.

Leí sobre perforaciones TCP, y puede que no funcione en todos los tipos de NAT. Pero puedo ver que Gnutella y BitTorrent siempre funcionan en todas las máquinas / NAT que intento. Entonces, ¿usan TCP Hole Punching para iniciar una conexión entre hosts?

Además, un código como este haría el TCP Hole Punching?

final ServerSocket s = new ServerSocket(7777); Thread t = new Thread(new Runnable(){ public void run() { try { s.accept(); } catch(Exception ex) { } } }); Socket sock = new Socket(); sock.connect(new InetSocketAddress("IP ADDRESS", 7777), 50000);


Deberías haber leído NAT transversal en Wikipedia primero.

Sin embargo, en realidad, las formas más utilizadas son UPnP, STUN, TURN, así como ICE, que es una combinación de STUN y TURN.

Como TCP es un protocolo orientado a la conexión, los NAT pueden controlarlo para cada conexión y eliminar todos los paquetes cuando finaliza la conexión.
Pero UDP no tiene conexión, y la respuesta puede provenir de un puerto diferente o direcciones diferentes (en comparación con su destino original). Además, no hay un tiempo de espera exacto para un mensaje UDP. Así que usualmente existen menos limitaciones para UDP en los NAT.
Como resultado, muchos de estos implementos P2P utilizan UDP o algunos tipos de protocolos basados ​​en UDP, como microTP, RUDP, UDT o incluso SCTP sobre UDP (WebRTC se basa en ello).

También puede aprender de los artículos sobre recorridos de NAT, RFC y BEP (documentos de BitTorrent).

Edición: hay incluso una forma más interesante: el recorrido ICMP. De hecho, ICMP (especialmente el mensaje de superación TTL) tiene incluso menos limitaciones que UDP en NAT, ya que el mensaje de error puede enviarse desde todos los rincones de Internet, y los enrutadores con NAT no pueden ser conscientes de que estos mensajes no son los verdaderos. Sin embargo, el envío de paquetes ICMP requiere un permiso de root en sistemas similares a Unix y el permiso de los administradores en Windows.


Después de mi investigación, descubrí que TCP no es bueno para omitir NAT y TCP Pole Punching no es una técnica 100% exitosa.

La mejor manera es usar UDP e implementar una capa de tolerancia a errores sobre él para que funcione como TCP.

También hay algunas API como UDT para Java. Pero no lo intenté todavía http://sourceforge.net/projects/udt-java/