FTP 기본 구조
FTP(File Transfer Protocol)는 제어 연결(Control)과 데이터 연결(Data)이 따로 존재하는 이중 연결 구조
- 제어 연결: 명령 내리고 응답 받는 통로 (예: USER, PASS, LIST 등)
- 데이터 연결: 실제 파일을 보내고 받는 통로
제어 연결은 항상 클라이언트 → 서버 (TCP 21포트)
데이터 연결은 모드에 따라 달라짐 (요게 핵심)
1. Active Mode (능동 모드)
기본 전통 방식 (default)
연결 흐름
1. 클라이언트 → 서버 : TCP 21번 포트로 제어 연결 생성
2. 클라이언트 : "내가 192.168.0.10의 포트 1024 열어놨음! 연결 ㄱ"
3. 서버 → 클라이언트 : 20번 포트에서 클라 1024번 포트로 데이터 연결함
| 제어 연결 | 클라이언트 → 서버 | 서버 21번 포트 |
| 데이터 연결 | 서버 → 클라이언트 | 서버 20번 → 클라 임의포트 (ex. 1024) |
Active Mode의 단점 : 클라이언트 방화벽이 외부 접속 차단하면 서버가 역접속 못함 = 데이터 연결 실패 = 파일 전송 안 됨
2. Passive Mode (수동 모드)
방화벽/NAT 환경 대비를 위해 추가된 방식
연결 흐름
1. 클라이언트 → 서버 : TCP 21번 포트로 제어 연결 생성
2. 클라이언트 : "패시브 모드로 부탁요"
3. 서버 : "내 40000번 포트 열어놨음. 그리로 와라"
4. 클라이언트 → 서버 : 40000번 포트로 데이터 연결 시도 (클라이언트가 직접 연결함)
| 제어 연결 | 클라이언트 → 서버 | 서버 21번 포트 |
| 데이터 연결 | 클라이언트 → 서버 | 서버 고포트 (예: 40000) |
Passive Mode 장점 : 클라이언트가 두 연결 다 여니까 방화벽/NAT 안에 있어도 문제 없음
비교
| 데이터 연결 방향 | 서버 → 클라이언트 | 클라이언트 → 서버 |
| 서버 포트 | 20번 사용 | 임의 고포트 사용 (ex. 40000 이상) |
| 클라이언트 포트 | 열어야 함 | 클라이언트가 알아서 연결 |
| 방화벽 문제 | 클라이언트 방화벽에서 막힘 | 방화벽 문제 적음 |
| 사용 상황 | 전통 구조, 내부망 | 인터넷 환경, NAT, 사설망 |