La perforación UDP es una técnica comúnmente utilizada en aplicaciones de traducción de direcciones de red (NAT) para mantener flujos de paquetes del Protocolo de datagramas de usuario (UDP) que atraviesan la NAT. Las técnicas transversales de NAT suelen ser necesarias para aplicaciones de red de cliente a cliente en Internet que involucran hosts conectados en redes privadas , especialmente en implementaciones de igual a igual , de cliente directo a cliente (DCC) y de voz sobre protocolo de Internet (VoIP). . [1]
La perforación UDP establece la conectividad entre dos hosts que se comunican a través de uno o más traductores de direcciones de red. Normalmente, se utilizan hosts de terceros en la red de transporte público para establecer estados de puerto UDP que pueden usarse para comunicaciones directas entre los hosts que se comunican. Una vez que el estado del puerto se ha establecido con éxito y los hosts se están comunicando, el estado del puerto puede mantenerse mediante el tráfico de comunicaciones normal o, en ausencia prolongada del mismo, mediante paquetes de mantenimiento de actividad , que generalmente consisten en paquetes UDP vacíos o paquetes con un mínimo de no-transmisión. Contenido intrusivo.
La perforación UDP es un método para establecer conexiones UDP bidireccionales entre hosts de Internet en redes privadas utilizando traductores de direcciones de red. La técnica no es aplicable en todos los escenarios ni con todos los tipos de NAT, ya que las características operativas de NAT no están estandarizadas.
Los hosts con conectividad de red dentro de una red privada conectada a través de NAT a Internet generalmente usan el método Session Traversal Utilities for NAT (STUN) o Interactive Connectivity Establishment (ICE) para determinar la dirección pública de NAT que sus pares de comunicaciones requieren. En este proceso, se utiliza otro host en la red pública para establecer el mapeo de puertos y otros estados de puertos UDP que se supone que son válidos para la comunicación directa entre los hosts de la aplicación. Dado que el estado UDP generalmente expira después de cortos períodos de tiempo en el rango de decenas de segundos a unos pocos minutos, [2] y el puerto UDP se cierra en el proceso, la perforación UDP emplea la transmisión de paquetes periódicos de mantenimiento de actividad , cada uno de los cuales se renueva. los contadores de vida útil en la máquina de estado UDP del NAT.
La perforación UDP no funcionará con dispositivos NAT simétricos (también conocidos como NAT bidireccional) que tienden a encontrarse en grandes redes corporativas. En NAT simétrica, el mapeo de NAT asociado con la conexión al servidor STUN conocido está restringido a recibir datos del servidor conocido y, por lo tanto, el mapeo de NAT que ve el servidor conocido no es información útil para el punto final.
En un enfoque algo más elaborado, ambos hosts comenzarán a enviarse mensajes entre sí mediante múltiples intentos. En una NAT de cono restringido , se bloqueará el primer paquete del otro host. Después de eso, el dispositivo NAT tiene un registro de haber enviado un paquete a la otra máquina y dejará pasar cualquier paquete proveniente de esta dirección IP y número de puerto. Esta técnica se utiliza ampliamente en software peer-to-peer y telefonía de voz sobre protocolo de Internet . También se puede utilizar para ayudar al establecimiento de redes privadas virtuales que operan sobre UDP. La misma técnica a veces se extiende a las conexiones del Protocolo de control de transmisión (TCP), aunque con menos éxito porque los flujos de conexión TCP están controlados por el sistema operativo host, no por la aplicación, y los números de secuencia se seleccionan al azar; por lo tanto, cualquier dispositivo NAT que realice una verificación de números de secuencia no considerará que los paquetes estén asociados con una conexión existente y los descartará.
Sean A y B los dos hosts con direcciones IP internas iAddr A e iAddr B respectivamente, cada uno en su propia red privada; N A y N B son los dos dispositivos NAT con direcciones IP externas eAddr A y eAddr B respectivamente; S es un servidor público con una dirección IP conocida.