RSS

Archivo de la categoría: Ftp

FTP activo vs. FTP pasivo

El FTP es un servicio TCP que usa un puerto de datos y uno de control o comando. Comúnmente esos puertos son el 20 y el 21, respectivamente. Pero no es siempre es de esa forma…especialmente si estás detrás de un cortafuegos (firewall).

FTP Activo

Veamos como funcionan las conexiones ftp normalmente:

  • El cliente se conecta desde un puerto aleatorio no privilegiado (N > 1024) al puerto de control del servidor (21)
  • El cliente comienza a escuchar en el puerto N+1 y envía este puerto de control al servidor.
  • El servidor se conectará al cliente en el puerto N+1 desde su puerto de datos (20)
activeftp

FTP Activo

Aquí tenemos un ejemplo de conexión:

  1. El puerto de control del cliente (1026) se conecta al puerto de control del servidor (21) y envía el número del puerto de datos (1027)
  2. El servidor responde con un ACK al puerto de control del cliente
  3. El servidor inicia una conexión entre su puerto de datos (20) y el puerto de datos del cliente (1027)
  4. El cliente responde con un ACK al servidor

FTP Pasivo

El modo activo tiene un inconveniente, si estás detrás de un cortafuegos (firewall) el servidor no podrá establecer una conexión al puerto de datos aleatorio del cliente (el que está por encima de 1024). Para solucionar este detalle, hay otra forma de conexión llamada FTP pasiva:

  • El cliente abre dos puertos aleatorios no privilegiados (N > 1024 y N+1)
  • El primer puerto (puerto de control) se conecta al puerto 21 del lado del servidor (puerto de control) y envía el comando PASV
  • Luego, el servidor abre un puerto aleatorio no privilegiado (P > 1024) y envía el comando PORT P al cliente
  • Finalmente, el cliente inicia una conexión desde el puerto N+1 al puerto P en el servidor para transferir datos
passiveftp

FTP Pasivo

Aquí tenemos un ejemplo:

  1. El puerto de control del cliente (1026) se conecta al servidor al puerto de control (21) y envía el comando PASV
  2. El servidor responde al cliente con el puerto 2024, el pueto aleatorio de datos abierto para conexiones de datos
  3. El cliente inicia una conexión desde su puerto de datos (1027) al puerto de datos del servidor (2024)
  4. Finalmente, el servidor envía de vuelta un ACK al puerto de datos del cliente

Referencia

 
Deja un comentario

Publicado por en septiembre 30, 2011 en Ftp, Programación, Servidor Web