La perforación de agujeros UDP es una técnica comúnmente utilizada en aplicaciones de traducción de direcciones de red (NAT) para mantener flujos de paquetes de Protocolo de datagramas de usuario (UDP) que atraviesan el NAT. Las técnicas de cruce de NAT suelen ser necesarias para aplicaciones de redes cliente a cliente en Internet que involucran hosts conectados en redes privadas , especialmente en implementaciones de punto a punto , de cliente a cliente directo (DCC) y de voz sobre protocolo de Internet (VoIP). [1]
La perforación de puertos 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 utilizarse para comunicaciones directas entre los hosts que se comunican. Una vez que se ha establecido correctamente el estado del puerto y los hosts se están comunicando, el estado del puerto puede mantenerse mediante el tráfico de comunicaciones normal o, en su ausencia prolongada, mediante paquetes de mantenimiento de conexión , que suelen consistir en paquetes UDP vacíos o paquetes con un contenido mínimo y no intrusivo.
La perforación de agujeros UDP es un método para establecer conexiones UDP bidireccionales entre hosts de Internet en redes privadas mediante 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 un NAT a Internet normalmente utilizan el método de utilidades de recorrido de sesión para NAT (STUN) o el establecimiento de conectividad interactiva (ICE) para determinar la dirección pública del NAT que requieren sus pares de comunicaciones. En este proceso, se utiliza otro host en la red pública para establecer la asignación de puertos y otro estado de puerto UDP que se supone que es válido para la comunicación directa entre los hosts de la aplicación. Dado que el estado UDP normalmente expira después de breves 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 de agujeros UDP emplea la transmisión de paquetes periódicos de mantenimiento de conexión , cada uno de los cuales renueva los contadores de tiempo de vida en la máquina de estado UDP del NAT.
La perforación de orificios UDP no funcionará con dispositivos NAT simétricos (también conocidos como NAT bidireccional) que suelen encontrarse en redes corporativas de gran tamaño. En NAT simétrico, la asignación de NAT asociada con la conexión al servidor STUN conocido se limita a recibir datos del servidor conocido y, por lo tanto, la asignación de NAT que ve el servidor conocido no es información útil para el punto final.
En un enfoque un poco más elaborado, ambos hosts comenzarán a enviarse mensajes entre sí, utilizando múltiples intentos. En un 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 que provenga de esta dirección IP y número de puerto. Esta técnica se usa ampliamente en software peer to peer y telefonía de voz sobre protocolo de Internet . También se puede usar para ayudar al establecimiento de redes privadas virtuales que operan sobre UDP. La misma técnica a veces se extiende a las conexiones de 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 del host, no por la aplicación, y los números de secuencia se seleccionan aleatoriamente; por lo tanto, cualquier dispositivo NAT que realice una verificación de número 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 y 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.