FTP
FTP(File Transfer Protocol, 파일 전송 프로토콜)는 TCP/IP 프로토콜을 기반으로 서버와 클라이언트 사이에서 파일을 전송하기 위한 표준 통신 프로토콜이다. TCP/IP 프로토콜 계층 구조에서 응용 계층에 속하며, 인터넷에서 오랫동안 널리 사용되어 온 프로토콜 중 하나이다.
역사
FTP의 최초 사양은 아바이 부샨(Abhay Bhushan)이 작성하였으며, 1971년 4월 16일 RFC 114로 게시되었다. 초기에는 TCP/IP의 전신인 NCP(Network Control Program) 위에서 실행되었으며, 이후 1980년 6월 TCP/IP 기반 버전인 RFC 765로 대체되었고, 1985년 10월 현재의 표준 사양인 RFC 959로 개정되었다. 이후 RFC 1579(1994년, 방화벽 친화적 수동 모드), RFC 2228(1997년, 보안 확장), RFC 2428(1998년, IPv6 지원 및 새로운 수동 모드 정의) 등 여러 제안 표준이 RFC 959를 보완하였다.
동작 방식
FTP는 클라이언트-서버 모델을 기반으로 동작하며, HTTP와 달리 제어 연결과 데이터 전송 연결의 두 가지 연결을 사용한다. 제어 연결은 포트 21을 사용하며, 실제 파일 전송은 필요할 때 새로운 데이터 연결을 생성하여 이루어진다.
데이터 전송 방식에는 두 가지 모드가 있다. 능동 모드(액티브 모드)에서는 서버가 자신의 데이터 포트인 20번 포트에서 클라이언트가 지정한 포트로 데이터 연결을 생성한다. 수동 모드(패시브 모드)에서는 클라이언트가 서버가 지정한 포트로 연결을 시도한다. 클라이언트가 방화벽이나 NAT 환경에 있을 때 능동 모드가 제대로 동작하지 않을 수 있어, 이러한 경우 수동 모드를 사용한다.
보안
FTP는 보안을 고려하여 설계된 프로토콜이 아니므로 여러 보안 취약점이 존재한다. 1999년 5월 발표된 RFC 2577에서는 무차별 대입 공격, FTP 바운스 어택, 패킷 가로채기, 포트 훔치기, 스푸핑 공격, 사용자 이름 열거 등의 취약점이 지적되었다. 특히 FTP는 사용자 이름과 암호가 암호화되지 않은 채 전송되므로 보안이 중요한 환경에서는 SFTP, FTPS, SCP 등 암호화된 파일 전송 방식을 사용하는 것이 권장된다.
파생 프로토콜
FTP에서 파생된 프로토콜로는 FTPS(FTP over SSL/TLS), SSH 파일 전송 프로토콜(SFTP), 트리비얼 파일 전송 프로토콜(TFTP), 심플 파일 전송 프로토콜(SFTP, RFC 913) 등이 있다. FTPS는 FTP 표준의 확장으로 세션 암호화를 지원하며, SFTP는 시큐어 셸(SSH) 프로토콜을 기반으로 파일을 전송한다. TFTP는 UDP를 사용하며 파일 전송 기능만을 지원하는 단순한 프로토콜로, FTP와 내부 규격이나 호환성이 없는 별개의 프로토콜이다.
활용
최초의 FTP 클라이언트 애플리케이션은 그래픽 사용자 인터페이스가 보편화되기 이전에 개발된 명령 줄 프로그램이었으며, 대부분의 윈도우, 유닉스, 리눅스 운영 체제에 현재도 기본 포함되어 있다. 이후 수많은 FTP 클라이언트 및 자동화 유틸리티가 데스크톱, 서버, 모바일 장치, 하드웨어용으로 개발되었으며, 웹 페이지 편집기 등 생산성 응용 프로그램에도 통합되어 사용되고 있다.