🔹 FTP, 기본 개념
FTP(File Transfer Protocol)는 말 그대로 파일을 전송하기 위한 프로토콜.
TCP/IP 위에서 동작하고, 클라이언트-서버 구조를 가진다.
클라이언트: 파일을 업로드하거나 다운로드하는 사용자
서버: 파일을 제공하거나 저장하는 쪽
👉 윈도우에서 FileZilla 같은 프로그램을 쓰거나 리눅스에서 ftp 명령을 쓰는 게 바로 클라이언트 역할이다.
🔹 포트 번호, 꼭 알아야 할 두 가지
FTP는 조금 독특하게 포트 두 개를 쓴다.
TCP 21번 → 제어 채널 (명령 전송: 로그인, cd, ls, get, put 등)
TCP 20번 → 데이터 채널 (파일 자체 전송, Active 모드일 때만)
즉, 21번은 "말하기(명령)", 20번은 "일하기(파일 데이터)"라고 생각하면 쉽다.
🔹 Active 모드 vs Passive 모드
FTP가 까다로운 이유 중 하나가 바로 모드 차이다.
Active 모드
클라이언트가 서버 21번에 연결 (명령 채널)
서버가 자기 20번 포트에서 클라이언트의 랜덤 포트로 접속 → 데이터 전송 시작
문제: 클라이언트 방화벽이 서버의 역방향 연결을 막으면 실패
Passive 모드
클라이언트가 21번에 연결
서버가 “내가 12345번 포트 열었으니 여기로 접속해라” 하고 알려줌
클라이언트가 서버의 해당 포트로 연결해서 파일 전송
장점: 모든 연결을 클라이언트가 시작하므로 방화벽 환경에서 안정적
👉 요즘은 Passive 모드를 주로 쓴다.
🔹 FTP의 단점과 보안 문제
FTP는 태생이 오래된 프로토콜이라 보안에 취약하다.
아이디/비밀번호가 평문(암호화 X)으로 전송됨
데이터도 그대로 노출돼 스니핑에 취약
그래서 대체 프로토콜이 등장했다.
FTPS: FTP + SSL/TLS (21번 그대로, 데이터 암호화 추가)
SFTP: 이름만 FTP고 사실은 SSH 기반 (22번 포트 사용)
👉 요즘은 SFTP가 더 많이 쓰이고, 실제 서버 운영에서도 안전하다.
🔹 정리
FTP = 파일 전송 프로토콜
기본 포트 = 21 (명령), 20 (데이터, Active 모드)
Active vs Passive → 데이터 채널 연결 방식 차이
보안 문제 때문에 실무에서는 FTPS/SFTP 많이 사용
리눅스에서 FTP 서버를 띄우려면 vsftpd가 대표적이다