파일 전송 프로토콜(File Transfer Protocol, FTP)은 TCP/IP 프로토콜을 가지고 서버와 클라이언트 사이의 파일을 전송 하기 위한 프로토콜 이다.


파일 전송 프로토콜의 사용은 굉장히 오랫동안 사용해 오고 있고, HTTP와 같이 지금도 자주 사용되고 있는 프로토콜 이다.


FTP는 HTTP에서 사용하는 1개의 포트 와는 달리 2개의 포트를 활용하여 사용 된다.


첫번째는 연결을 위한 포트 이고, 두번째로는 데이터 전송을 위한 포트 이다.


명령 연결: 먼저 제어 포트인 서버 21번 포트로 사용자 인증, 명령을 위한 연결이 만들어지고, 여기를 통해 클라이언트에서 지시하는 명령어가 전달된다.


데이터 전송용 연결: 실제의 파일 전송은 필요할 때 새로운 연결이 만들어진다.


     데이터 전송을 위해서 연결을 할 경우에는 다음과 같은 모드를 통하여 데이터를 송수신 할 수 있게 된다.


     능동 모드(포토 모드): 서버가 자신의 데이터 포트인 20번 포트에서부터 클라이언트가 지정한 지점으로의 데이터 연결을 만든다. 클라이언트가 지정하는 포트는 주로 1023 보다 큰 번호가 매겨진 포트이다. 클라이언트가 방화벽, NAT(IP 마스킹) 등을 사용하는 환경일 때에 잘 동작하지 않을 수 있는데, 이때 수동 모드를 이용하면 된다.


    수동 모드: 클라이언트가 서버가 지정한 서버 포트로 연결할 수 있게 한다. 이 때에는 보통 양쪽 포트 모두 1023 보다 큰 포트를 사용한다.


어느 모드에서도 2개의 연결을 만드는 점은 다르지 않다. 하지만 FTP 포트를 변경하게 되고 방화벽이 있는 경우, 방화벽 Inspection 모드 설정에 따라 FTP 통신은 정상적이지만, get 명령이나 ls 명령 등 FTP-DATA포트를 이용한 통신은 정상적으로 이루어지지 않을 수 있다.