Uso de NAT Traversal para conectar usuarios en modo pasivo

Este artículo es una traducción libre de una de las entradas en Blog para desarrolladores de DC++.

Con el permiso del autor (así como para mayor claridad e interés), lo coloreé con enlaces y lo complementé con algunas investigaciones personales.

introducción

Al menos un usuario del par de conexión debe estar en modo activo en este momento. El mecanismo transversal de NAT será útil cuando el modo activo no esté configurado en ninguno de los lados. Esto generalmente se debe a que un firewall o un dispositivo NAT bloquea las conexiones entrantes.

Si ambos clientes están en modo activo

El cliente iniciador envía un comando que contiene su propia dirección IP y puerto. $Conectarme a otro cliente. Utilizando estos datos, el cliente que recibió el comando establece una conexión con el iniciador.

Si uno de los clientes está en modo pasivo

A través del hub, un cliente pasivo A envía un comando $RevConectarme cliente activo Bque luego responde con el comando $ConnectToMe.

Uso de NAT Traversal para conectar usuarios en modo pasivo
como servidor S en el caso anterior hay un concentrador de CC

Si ambos clientes están en modo pasivo en Centro ADC

Clientes detrás de diferentes NAT A и B se unió al centro S.

Uso de NAT Traversal para conectar usuarios en modo pasivo
Así es como se ve la conexión al hub desde el lado del cliente A

El concentrador acepta conexiones en el puerto 1511. Cliente A realiza conexiones salientes desde su red privada a través del puerto 50758. El hub, a su vez, ve la dirección del dispositivo NAT, trabaja con él y la transmite a los clientes según sus identificadores.

Cliente A envía al servidor S mensaje pidiendo ayuda para conectarse con un cliente B.

Hub: [Outgoing][178.79.159.147:1511] DRCM AAAA BBBB ADCS/0.10 1649612991

También en modo pasivo, el cliente B, habiendo recibido este comando, debe informar su puerto privado utilizado para conectarse al concentrador a través de NAT.

Hub: [Incoming][178.79.159.147:1511] DNAT BBBB AAAA ADCS/0.10 59566 1649612991

Después de recibir esta información el cliente A inmediatamente intenta establecer una conexión con el cliente B y reporta su propio puerto privado.

Hub:		[Outgoing][178.79.159.147:1511]	 	D<b>RNT</b> AAAA BBBB ADCS/0.10 <b>50758</b> 1649612991

¿Cuál es el interés? El interés está en cambiar el punto final de la misma conexión creando una nueva conexión a una dirección pública a través de un puerto privado ya utilizado.

Uso de NAT Traversal para conectar usuarios en modo pasivo
Bingo

Por supuesto, en este caso el cliente NAT B tiene todo el derecho a rechazar la primera solicitud de conexión de un cliente A, pero su propia petición se precipita en el “agujero” creado por esta misma conexión, y la conexión se establece.

Uso de NAT Traversal para conectar usuarios en modo pasivo
Ilustración adecuada para todo el proceso con la salvedad de que protocolo no utiliza puertos públicos abiertos por la sesión NAT-S, así como direcciones privadas.

El acto final

Al momento de escribir el artículo (original), aproximadamente la mitad de los clientes de DC están trabajando en modo pasivo. Esto significa que no se puede establecer una cuarta parte de todas las conexiones posibles.

En el futuro DC++ podrá evitar NATusando conexiones existentes A-S и B-S para establecer una conexión directa cliente-cliente, incluso si A и B están en modo pasivo.

Fuente: habr.com

Añadir un comentario