Skip to main content

FTP 동작 원리

FTP (File Transfer Protocol) FTP는 파일을 전송하기 위한 프로토콜이다. FTP 역시 일반적으로 TCP와 같이 사용하며 전송 제어를 하는 데는 21번 포트, 전송 데이터를 위해서는 20번 포트를 사용한다. FTP의 포트 번호가 두 개인 이유는 FTP가 동시에 두 개의 접속 방식을 사용하기 때문이다. 21번 포트는 전송을 제어하기 위해 20번 포트는 실제 데이터를 보내기 위해 사용한다. 이렇게 제어하기 접속을 독립시켜 놓으면 전송 도중에 중지시키는 등의 컨트롤을 하기 쉬워진다.

FTP 전송모드

FTP1

전송모드 기본 값은 Active 모드이고 클라이언트가 Active 또는 Passive Mode를 선택할 수 있다.

능동 연결 (Active Mode)

  1. 클라이언트가 서버의 21번 포트로 접속 후 명령을 송수신하기 위해 제어 채널을 생성한다. 이후 사용자가 ls 명령을 입력하면 클라이언트가 사용할 5150포트(1024 이상의 포트)를 서버에 알려준다.
  2. 서버는 이에 대해 ACK로 응답한다.
  3. 서버의 20번 포트는 클라이언트가 알려준 두 번째 포트로 접속 후 데이터 채널을 생성한다.
  4. 마지막으로 클라이언트가 ACK로 응답한다.

서버에서 클라이언트로 요청을 하기 때문에 클라이언트 PC에 방화벽이 설치되어 외부에서의 접속을 허용하지 않는다면 FTP 접속은 되지만 이후 데이터 채널 연결이 불가능하여 파일을 받을 수 없는 문제가 발생할 수 있다.

수동 연결 (Passive Mode)

  1. 클라이언트가 서버의 21번 포트로 접속 후 제어 채널을 생성한다. 이후 사용자가 명령어를 입력하면 클라이언트는 Passive Mode로 연결하기 위해 PASV 명령어를 전송한다.
  2. 서버에서는 서버가 사용할 1024 이상의 임시 포트를 알려준다.
  3. 클라이언트는 서버가 알려준 포트 번호로 접속을 시도하여 데이터 채널을 생성한다.
  4. 서버는 ACK로 응답한 후 데이터를 송신, 데이터 채널 연결을 종료한다.

두 번째 데이터 포트로서 active 모드가 사용했던 20번을 사용하지 않고 1024 이후의 임시 포트를 사용한다. 서버에서 포트 번호를 알려주기 때문에 해당 대역의 방화벽 포트를 열어두어야 하며 대부분의 웹 브라우저는 ftp://를 사용하여 FTP에 접속할 때 수동모드만 지원한다.

접속시

FTP2

FTP3

Passive 포트 확인

FTP4

FTP5

만일 Active 모드라면 PC(FTP Client)를 출발하는 소스 포트는 랜덤 포트로 부여되고 Server(FTP Server)의 소스 포트는 20번이 되지만 위 경우 Passive 모드를 사용하였으므로 PC(FTP Client)와 Server(FTP Server) 모두 랜덤 포트를 할당해 데이터를 교환하는 모습이다.