Este artigo é unha tradución gratuíta dunha das entradas en .
Co permiso do autor (así como por claridade e interese), coloreino con ligazóns e complementei con algunha investigación persoal.
Introdución
Polo menos un usuario do par de conexión debe estar en modo activo neste momento. O mecanismo de atravesamento NAT será útil cando o modo activo non estea configurado a ningún lado. Isto xeralmente débese a que un firewall ou un dispositivo NAT bloquean as conexións entrantes.
Se ambos os clientes están en modo activo
O cliente iniciador envía un comando que contén o seu propio enderezo IP e porto a outro cliente. Usando estes datos, o cliente que recibiu o comando establece unha conexión co iniciador.
Se un dos clientes está en modo pasivo
A través do hub, un cliente pasivo A envía un comando cliente activo Bque entón responde co comando $ConnectToMe.

Como servidor S no caso anterior hai un concentrador de CC
Se ambos os clientes están en modo pasivo activado
Clientes detrás de diferentes NAT A и B uniuse ao centro S.

Así se ve a conexión ao concentrador desde o lado do cliente A
O concentrador acepta conexións no porto 1511. Cliente A realiza conexións de saída desde a súa rede privada a través do porto 50758. O concentrador, á súa vez, ve o enderezo do dispositivo NAT, traballa con el e remíteo aos clientes segundo os seus identificadores.
Cliente A envía ao servidor S mensaxe solicitando axuda para conectarse cun cliente B.
Hub: [Outgoing][178.79.159.147:1511] DRCM AAAA BBBB ADCS/0.10 1649612991
Tamén en modo pasivo, o cliente B, ao recibir este comando, debe informar do seu porto privado utilizado para conectarse ao concentrador mediante NAT.
Hub: [Incoming][178.79.159.147:1511] DNAT BBBB AAAA ADCS/0.10 59566 1649612991
Despois de recibir esta información o cliente A inmediatamente tenta establecer unha conexión co cliente B e informa do seu propio porto privado.
Hub: [Outgoing][178.79.159.147:1511] D<b>RNT</b> AAAA BBBB ADCS/0.10 <b>50758</b> 1649612991
Cal é o interese? O interese está en cambiar o punto final da mesma conexión creando unha nova conexión a un enderezo público a través dun porto privado xa usado.

Bingo!
Por suposto, neste caso o cliente NAT B ten todo o dereito a rexeitar a primeira solicitude de conexión dun cliente A, pero a súa propia solicitude apura ao "burato" creado por esta mesma conexión, e establécese a conexión.

Ilustración apta para todo o proceso coa advertencia de que non utiliza portos públicos abertos pola sesión NAT‒S, así como enderezos privados.
Epílogo
No momento de escribir o artigo (orixinal), aproximadamente a metade dos clientes de DC están traballando en modo pasivo. Isto significa que non se poden facer unha cuarta parte de todas as conexións posibles.
Ademais utilizando as conexións existentes A‒S и B‒S para establecer unha conexión directa cliente-cliente, aínda que A и B están en modo pasivo.
Fonte: www.habr.com
