Protocolo de transferencia de arquivos

O **protocolo de transferencia de arquivos** (en inglés **FTP**, **File Transfer Protocol**) é un método rápido e versátil de transferir ficheiros, sendo unha das máis usadas en Internet dende o 16 de abril do 1971.

Pode referirse tanto ao protocolo, encadrado na capa de aplicaión do modelo OSI, como ao programa que fai uso deste protocolo (neste caso, tradicionalmente aparece en letras minúsculas, por influencia do programa de transferencia de arquivos do Unix).

A transferencia de datos en redes de computadores inclúe normalmente a transferencia de ficheiros e acceso a sistemas de ficheiros remotos (coa mesma interface usada nos ficheiros locais). O FTP (RFC 959) baséase no TCP, mais é anterior ao conxunto de protocolos TCP/IP. É o estándar do conxunto de protocolos TCP/IP para transferir ficheiros, é un protocolo xenérico independente de hardware e do sistema operativo e transfire ficheiros por libre arbitrio, tendo en conta restricións de acceso e propiedades dos ficheiros.

## Funcionamento 
miniatura|400px|Diagrama dun servizo FTP.
A transferencia de ficheiros dase entre un computador chamado "cliente" (aquel que solicita a conexión para a transferencia de datos) e un servidor (aquel que recibe a solicitación de transferencia).
O usuario, a través de software específico, pode seleccionar que ficheiros enviar ao servidor. Para existir unha conexión ao servidor, o usuario informa un nome de usuario (ou username, en inglés) e un contrasinal (password), ben como o nome correcto do servidor ou o seu enderezo IP.

Se os datos foron informados correctamente, a conexión pode ser establecida, usándose unha "canle" de comunicación, o chamado porto de rede (port). Tales portos son conexións nas cales é posible trocar datos. No caso da comunicación FTP, os portos habituais son o 20 e o 21.

O porto 21 é utilizado para o envío bidireccional de mensaxes de control da comunicación (usando algunhas das funcións Telnet para o intercambio de mensaxes), mentres que a transferencia dos datos faise a través dunha segunda conexión no porto 20 do servidor (inda que realmente podería ser configurado calquera porto por encima do 1023 e debaixo do 65536).

## Acceso aos servidores FTP 
A conexión a un destes servidores faise utilizando programas chamados "clientes FTP". Estes programas poderemos atopalos na rede tanto gratuítos coma de pago.

Os navegadores web e mesmo os sistemas operativos tamén poden integrar nas súas funcionalidades servizo FTP.

O acceso a servidores FTP pode realizarse de dúas formas: a través dunha interface gráfica (GUI) ou a través da interface de liña de comandos (CLI), tanto usuarios UNIX como usuarios Windows poden acceder a través dos dous modos. A pesar de ser un pouco complicado, o modo liña de comandos está presente en calquera distribución de tipo UNIX e Windows, a través do programa Telnet.

## Modos e interfaces 
O protocolo subxacente ao FTP pode executarse nos modos interactivo ou por lotes (*batch*, sen interacción humana). O cliente FTP fornece unha interface interactiva, mentres que o MIME e o HTTP úsano internamente. O protocolo permite a gravación e obtención de ficheiros, a listaxe do cartafol e a alteración do cartafol de traballo.

Por outra banda, existen dous xeitos de conexión:

*Modo activo ou estándar. Chámase modo activo porque é o servidor FTP o que comeza a transmisión dos datos. Baséase en dúas conexións, a primeira delas establece unha comunicación para a transmisión de comandos a través dun porto aleatório maior que o 1024 do cliente cara o porto 21 do servidor, sedo nesta primeira comunicación onde se lle notifica ao servidor cal é o porto do cliente que vai permanecer aberto para a recepción dos datos (comando port). Despois iníciase a conexión de datos sendo o servidor o que comeza a tansmisión dende o seu porto 20 cara o porto indicado anteriormente polo cliente.

*Modo pasivo. Nesta modalidade de conexión, o cliente ten que enviar o comando pasv ao establecer a conexión de control utilizando os mesmos portos que para a conexión en modo activo. O cliente FTP pídelle ao servidor que abra un porto, o cal ten que ser aleatorio e maior ao 1024 e unha vez é recibida a confirmación disto, será o cliente o que estableza a conexión de datos ao servidor FTP.

O modo pasivo foi pensado para evitar problemas de conectividade, xa que no modo activo o host cliente debe aceptar conexións a portos para a transferencia de datos por encima dos portos ben coñecidos, o cal fai que os firewalls instalados no equipo ou na rede non permitan a conexión para previr ver comprometida seguridade.

No modo pasivo é o cliente quen inicia tanto a conexión de control coma a de datos, polo que o firewall non ten conexión entrante que frear, xa que o que ven do servidor son respostas a peticións propias da súa rede.

## Comandos do cliente FTP 
Os servidores de FTP só mudan moi raramente, pero novos clientes FTP aparecen con bastante regularidade. Estes clientes varían no número de comandos que utilizan, a maioría dos clientes FTP comerciais utilizan apenas un pequeno subgrupo de comandos FTP. Aínda que o FTP sexa un protocolo orientado á liña de comandos, a nova xeración dos clientes FTP esconde esta orientación nun ambiente gráfico, moitas veces, moi desenvolvido.

A interface cliente do FTP do BSD UNIX é un estándar por si mesma, posuíndo moitos comandos arcaicos: tenex ou carriage control que hoxe non teñen uso. Os comandos máis usados son o cd, dir, ls, get e put.

O FTP ten particularidades que son hoxe pouco comúns. Despois da activación do ftp, establécese unha conexión ao host remoto. Esta conexión implica o uso da conta do usuario no host remoto, o cal pode supoñer unha eiva na seguridade, polo que algúns servidores FTP engaden *anonymous FTP*.

Certos comandos son os que fan a transferencia bidireccional de ficheiros:
* get utilizado polo host cliente para descargar ficheiros do host servidor FTP (mget para máis que un ficheiro)
* put utilizado polo host cliente para engadir ficheiros do seu equipo ao servidor FTP (mput para máis que un ficheiro)

Nota: algúns comandos poden non funcionar co usuario *anonymous*, pois esa conta ten limitacións de dereitos a nivel do sistema operativo.

## Tradución de nomes de ficheiros 
A sintaxe dos nomes dos ficheiros pode ser incompatible entre diferentes Sistemas Operativos. O UNIX usa 128 caracteres, maiúsculas e minúsculas, mentres que DOS usa 8 + 3 caracteres e apenas maiúsculas. Nalgúns sistemas non se poden usar certos nomes. Debido a todo isto, o BSD ftp define regras para a tradución de nomes.

## Mensaxes FTP 
O FTP permite dous modos de transferencia de mensaxes FTP, 'ascii' (con traducións apropiadas) ou 'imaxe binaria' (sen tradución). Cada mensaxe do servidor inclúe un identificador decimal de 3 díxitos (exemplo:  226 Transfer complete). Estas mensaxes poden ser vistas ou non, usando para iso o modo 'verbose' ou 'quiet', respectivamente.

O modo ascii utilízase para a transferencia de arquivos de texto, aqueles que poderiamos abrir cun procesador de texto (.txt e .html entre outros). No modo ascii realízanse as conversións de caracteres precisas para se utilizar os caracteres estándar da rede.

Por utra banda, binary ou imaxe binaria, utilízase para a transferencia de arquivos executables, imaxes ou arquivos comprimidos sendo o contido do arquivo transferido byte a byte.

## Modo cliente-servidor do FTP 
O servidor remoto acepta unha *conexión de control* do cliente local. O cliente envía comandos para o servidor e a conexión persiste ao longo de toda a sesión (tratándose así dun protocolo que usa o TCP).

O servidor crea unha *conexión de datos* para a transferencia de datos, creandose unha conexión para cada ficheiro transferido. Estes datos son transferidos ben do servidor ao cliente, ou ben ao contrario.

Os comandos están separados dos datos (portos 20 e 21 do servidor) e o cliente pode enviar comandos durante a transferencia de datos. O peche da conexión indica o fin do ficheiro.

## Lista de Comandos FTPs 
Os comandos baixo poden ser corridos no FTP através da liña de comando. Os comandos do FTP poden ser abreviados, desde que non formen expresións ambíguas.

Podemos ver a seguir un conxunto típico de comandos do FTP obtidos directamente através do comando help.

ftp> help

Os comandos poden estar abreviados. Seguen os comandos:

## Lista de clientes FTP 
* SmartFTP
* Cute FTP
* FTP via Web
* Filezilla
* Core FTP
* WS FTP
* LeechFTP
* gFTP
* FireFTP

## Lista de servidores FTP 
* Filezilla Server (software libre)
* Pure-FTPd (software libre)
* vsftp (software libre, en liña de comandos)
* Microsoft Internet Information Services (IIS) (software propietario)
* WinSock File Transfer Protocol (software propietario)

## Notas 
## Véxase tamén 
* Servidor FTP