FTP 파일 전송 구조와 Active·Passive 모드 이해
FTP의 제어·데이터 채널 구조, Active와 Passive 연결 방식, 보안 대안과 운영 시 고려할 설정을 정리한다.
2026-08-14 · 최초 발행 2025-08-10
파일 전송을 제어 채널과 데이터 채널로 나눈 프로토콜
FTP(File Transfer Protocol)는 TCP/IP 네트워크에서 컴퓨터 사이의 파일을 옮기기 위한 표준 네트워크 프로토콜이다. 1971년 RFC 114로 처음 제안됐으며, OSI 7계층에서는 응용 계층(Application Layer)에 속한다.
클라이언트-서버 구조로 동작하며 파일 업로드와 다운로드, 디렉터리 관리 기능을 제공한다. 일반적으로 제어 연결에는 TCP 포트 21을, 데이터 전송에는 포트 20 또는 별도 포트를 사용한다.
데이터 연결을 여는 주체가 다른 Active와 Passive
FTP에서는 명령을 주고받는 연결과 파일을 전달하는 연결이 분리된다. 이 데이터 연결을 서버가 클라이언트 쪽으로 여느냐, 클라이언트가 서버 쪽으로 여느냐에 따라 Active와 Passive 모드가 갈린다.
서버가 데이터 연결을 시도하는 Active 모드
Active FTP에서는 클라이언트가 먼저 서버의 21번 포트에 제어 연결을 맺는다. 이어 PORT 명령으로 데이터 수신 포트를 서버에 알리고, 서버는 자신의 20번 포트에서 클라이언트가 지정한 포트로 데이터 연결을 시도한다.
- 클라이언트는 임의의 포트(N>1023)에서 서버의 21번 포트로 제어 연결을 수립한다.
- 클라이언트는
PORT명령으로 데이터 수신 포트 정보(N+1)를 서버에 전달한다. - 서버는 20번 포트에서 클라이언트의 지정 포트(N+1)로 데이터 연결을 시도한다.
- 전송이 끝나면 데이터 연결을 종료한다.
클라이언트가 방화벽 또는 NAT 뒤에 있으면 서버가 클라이언트로 연결하지 못할 수 있다.
클라이언트가 데이터 연결도 여는 Passive 모드
Passive FTP에서는 클라이언트가 제어 연결과 데이터 연결을 모두 시작한다. 서버는 클라이언트의 PASV 요청에 따라 대기 포트를 열고, 클라이언트는 그 포트로 새 데이터 연결을 맺는다.
- 클라이언트는 임의의 포트(N>1023)에서 서버의 21번 포트로 제어 연결을 수립한다.
- 클라이언트는
PASV명령으로 서버에 데이터 연결 대기를 요청한다. - 서버는 임의의 포트(P>1023)를 열고 해당 포트 정보를 클라이언트에 전달한다.
- 클라이언트는 새로운 임의의 포트(N+1)에서 서버의 지정 포트(P)로 데이터 연결을 수립한다.
- 전송이 끝나면 데이터 연결을 종료한다.
클라이언트가 방화벽 뒤에 있어도 서버로 연결을 시작할 수 있어 현대 네트워크 환경에 더 적합하다.
세션 상태와 전송 형식을 함께 관리한다
FTP의 제어 채널은 명령과 응답을 담당하고, 데이터 채널은 실제 파일 내용을 전달한다. 제어 채널은 21번 포트를 사용하며, 데이터 채널은 Active 모드에서 20번 포트, Passive 모드에서 임의 포트를 사용한다.
FTP는 상태 유지(Stateful) 프로토콜이다. 세션이 유지되는 동안 로그인 상태, 현재 디렉터리, 전송 모드 같은 클라이언트 상태 정보를 보관한다.
전송 형식도 선택할 수 있다. ASCII 모드는 텍스트 파일에 적합하며 줄 바꿈 문자를 시스템에 맞춰 변환한다. 바이너리(Binary) 모드는 변환 없이 전송하므로 실행 파일과 압축 파일에 사용한다. EBCDIC 모드는 메인프레임 컴퓨터 시스템에서 쓰는 문자 인코딩 방식이다.
명령과 응답 코드로 세션을 제어한다
인증과 디렉터리 이동, 파일 전송, 연결 방식 지정은 제어 채널의 명령으로 수행한다.
USER: 사용자 이름 지정PASS: 패스워드 전송CWD: 작업 디렉터리 변경LIST: 디렉터리 내용 나열RETR: 파일 다운로드STOR: 파일 업로드PORT: Active 모드 데이터 연결 준비PASV: Passive 모드 데이터 연결 준비QUIT: FTP 세션 종료
서버의 응답 코드는 처리 상태를 나타낸다. 1xx는 명령이 수락됐지만 처리 중인 긍정적 예비 응답이고, 2xx는 명령 완료를 뜻한다. 3xx는 추가 정보가 필요한 중간 응답이다. 4xx는 일시적 문제로 수행할 수 없는 오류, 5xx는 명령 구문 오류 또는 구현되지 않은 명령에 따른 영구적 오류다.
평문 FTP의 위험과 보안 전송 대안
기본 FTP는 암호화 없이 평문으로 통신한다. 사용자 인증 정보와 데이터가 모두 암호화되지 않은 상태로 전송되므로 중간자 공격에 취약하다. 브루트 포스 공격에 취약한 인증 방식과, 특히 Active 모드에서의 방화벽 우회 가능성도 고려 대상이다.
FTPS는 FTP에 SSL/TLS 암호화를 추가한 방식이다. 명시적 모드는 기본 포트 21을, 암시적 모드는 기본 포트 990을 사용하며 기존 FTP 명령 구조를 유지하면서 보안을 강화한다.
SFTP(SSH File Transfer Protocol)는 SSH 기반 파일 전송 프로토콜이다. 기본 포트 22를 사용하고 명령과 데이터를 모두 암호화한다. FTP와는 완전히 다른 프로토콜이지만 유사한 기능을 제공한다.
SCP(Secure Copy Protocol) 역시 SSH 기반 파일 복사 프로토콜이다. 단순한 파일 복사에 최적화되어 있으며 기본 포트 22를 사용한다.
파일 배포와 장비 관리에서 남아 있는 활용
웹 호스팅 환경에서는 개발자가 웹 서버에 사이트 파일을 업로드하거나 CMS와 연동해 웹사이트를 자동 배포하는 데 FTP를 사용할 수 있다. 대규모 사이트에서는 CDN과 연계해 콘텐츠를 배포한다.
기업 환경에서는 부서 간 대용량 파일 공유, 외부 파트너와의 안전한 데이터 교환, 백업 시스템의 데이터 이관에 활용된다. 임베디드 환경에서는 IoT 기기 펌웨어 업데이트, 네트워크 장비 구성 파일의 백업·복원, 임베디드 리눅스 시스템 파일 관리에 적용할 수 있다.
운영 정책은 연결 방식과 함께 잡아야 한다
FTP 서버를 구성할 때는 익명 FTP 허용 여부와 그에 따른 보안 위험을 먼저 결정해야 한다. 사용자별 업로드·다운로드·삭제 권한을 설정하고, 대역폭 관리를 위한 데이터 전송 한계도 정한다. 보안 감사와 트래픽 모니터링을 위한 로깅, Active와 Passive 모드를 반영한 방화벽 설정도 필요하다.
클라이언트는 사용 방식에 따라 고를 수 있다. ftp, lftp, curl 같은 명령줄 도구는 자동화 스크립팅에 적합하다. FileZilla와 WinSCP 같은 GUI 도구는 사용자 친화적 인터페이스를 제공한다. 애플리케이션 통합에는 libcurl, Apache Commons Net 같은 프로그래밍 라이브러리를 사용할 수 있다.
클라우드 환경에서 검토할 전송 방식
클라우드에서는 Amazon S3, Azure Blob Storage, Google Cloud Storage 같은 객체 스토리지 서비스를 사용할 수 있다. HTTP/HTTPS를 이용하는 REST API 기반 파일 전송, HTTP 확장으로 웹 서버 파일 관리를 제공하는 WebDAV, Dropbox·Google Drive·OneDrive 같은 클라우드 동기화 서비스도 대안이다.
FTP는 40년 이상의 역사를 가진 프로토콜로 TCP/IP 네트워크의 파일 전송 기반을 만들었다. 연결 방식과 보안 특성을 구분하면, 기존 호환성이 필요한 환경과 보안 강화 전송 방식을 요구하는 환경을 함께 판단할 수 있다.