stringtranslate.com

Perforación de orificios TCP

La travesía TCP NAT y la perforación de agujeros TCP (a veces NAT punch-through ) en redes informáticas se produce cuando dos hosts que se encuentran detrás de una traducción de direcciones de red (NAT) intentan conectarse entre sí con conexiones TCP salientes. Este escenario es particularmente importante en el caso de las comunicaciones entre pares , como la voz sobre IP (VoIP), el uso compartido de archivos, las teleconferencias, los sistemas de chat y aplicaciones similares.

La perforación de agujeros TCP es una técnica de cruce de NAT utilizada experimentalmente para establecer una conexión TCP entre dos pares en Internet detrás de dispositivos NAT. El cruce de NAT es un término general para las técnicas que establecen y mantienen conexiones TCP/IP y/o de red TCP atravesando puertas de enlace NAT.

Terminología

A continuación, los términos host, cliente y peer se utilizan casi indistintamente.

punto final local , punto final interno
la IP local:puerto como lo ve localmente el host y la parte interna del NAT.
punto final público , punto final externo
la IP externa: puerto mapeado por el NAT, como lo ve la red y la parte externa del NAT.
punto final remoto
la IP:puerto del otro par tal como lo ve la red, o las partes externas de ambos NAT.

Descripción

La travesía de NAT, a través de la perforación de agujeros TCP, establece conexiones TCP bidireccionales entre hosts de Internet en redes privadas que utilizan NAT. No funciona con todos los tipos de NAT, ya que su comportamiento no está estandarizado. Cuando dos hosts se conectan entre sí en TCP, ambos a través de conexiones salientes, se encuentran en el caso de "apertura simultánea de TCP" del diagrama de máquina de estados TCP. [1]

Dibujo de red

Tipos de NAT

La disponibilidad de la perforación de agujeros TCP depende del tipo de asignación de puerto de computadora que utiliza el NAT. Para que dos pares detrás de un NAT se conecten entre sí a través de TCP abierto simultáneo [ aclarar ] , necesitan saber un poco el uno del otro. Una cosa que absolutamente necesitan saber es la "ubicación" del otro par, o el punto final remoto. El punto final remoto son los datos de la dirección IP y un puerto al que se conectará el par. Entonces, cuando dos pares, A y B, inician conexiones TCP al vincularse a los puertos locales Pa y Pb, respectivamente, necesitan saber el puerto del punto final remoto según lo asignado por el NAT para realizar la conexión. Cuando ambos pares están detrás de un NAT, cómo descubrir el punto final remoto público del otro par es un problema llamado predicción de puerto NAT . Todas las técnicas de perforación de agujeros y cruce de NAT TCP tienen que resolver el problema de predicción de puerto.

Una asignación de puerto NAT puede ser una de dos:

previsible
La puerta de enlace utiliza un algoritmo simple para asignar el puerto local al puerto NAT. La mayoría de las veces, un NAT utilizará la preservación de puerto , lo que significa que el puerto local se asigna al mismo puerto en el NAT.
no predecible
Las pasarelas utilizan un algoritmo que es aleatorio o demasiado impráctico para predecir.

Dependiendo de si los NAT presentan un comportamiento predecible o no predecible, será posible o no realizar la conexión TCP mediante una apertura simultánea de TCP, como lo muestra a continuación la matriz de conexión que representa los diferentes casos y su impacto en la comunicación de extremo a extremo: [ cita requerida ]

  • SÍ: la conexión funcionará todo el tiempo
  • NO: la conexión casi nunca funcionará

Técnicas

Métodos de predicción de puertos (con NAT predecibles)

A continuación se muestran algunos de los métodos utilizados por los NAT para permitir que los pares realicen predicciones de puertos:

Detalles de una instancia de conexión TCP típica con TCP Hole Punching

Suponemos aquí que la predicción de puertos ya se ha realizado a través de uno de los métodos descritos anteriormente y que cada par conoce el punto final remoto del par. Ambos pares realizan una llamada de conexión POSIX al otro punto final del par. La apertura simultánea de TCP se realizará de la siguiente manera:

    • El par A envía un SYN al par B
    • El par B envía un SYN al par A
    • Cuando NAT-a recibe el SYN saliente del Peer A, crea una asignación en su máquina de estados.
    • Cuando NAT-b recibe el SYN saliente del Peer B, crea una asignación en su máquina de estados.
  1. Ambos SYN se cruzan en algún lugar a lo largo de la ruta de la red, luego:
    • SYN del par A llega a NAT-b, SYN del par B llega a NAT-a
    • Dependiendo del momento en que se produzcan estos eventos (en qué punto de la red se cruzan los SYN),
    • Al menos uno de los NAT permitirá el paso del SYN entrante y lo asignará al par de destino interno.
  2. Al recibir el SYN, el par envía un SYN+ACK y se establece la conexión.

Requisitos de interoperabilidad en NAT para TCP Hole Punching

Otros requisitos del NAT para cumplir con la apertura simultánea de TCP

Para que el TCP simultáneo funcione, el NAT debe:

Esto es suficiente para garantizar que los NAT se comporten bien con respecto a la apertura simultánea de TCP.

Perforación de puertos TCP y NAT de nivel de operador (CGN)

La técnica descrita anteriormente funciona bien dentro de un CGN. Un CGN también puede hacer uso de un comportamiento de sobrecarga de puertos , lo que significa que los puntos finales internos distintos con el mismo valor de puerto se pueden asignar al mismo punto final público. Esto no rompe la unicidad del quíntuple {protocolo, dirección pública, puerto público, dirección remota, puerto remoto } y, como resultado, es aceptable. La preservación del puerto TCP también puede conducir a casos en los que los puertos CGN están sobrecargados y no es un problema para la solidez del protocolo. La sobrecarga de puertos para TCP permite que el CGN se adapte a más hosts internamente mientras se preservan las garantías de comunicación de extremo a extremo de TCP.

Véase también

Referencias

  1. ^ Information Sciences Institute (septiembre de 1981). "Transmission control protocol: DARPA internet program protocol Specification". IETF . Agencia de Proyectos de Investigación Avanzada de Defensa.