어제 메일로 서버 서비스의 문을 열었다면, 오늘은 파일을 주고받는 가장 오래된 서비스 **FTP(File Transfer Protocol)**를 해부한다. FTP는 단순해 보이지만 실기에서 발목을 잡는 함정이 가득하다. 핵심은 FTP가 제어와 데이터를 두 개의 별도 연결로 처리한다는 점, 그리고 이 데이터 연결을 누가 여느냐에 따라 능동(Active) 모드와 수동(Passive) 모드가 갈린다는 점이다. 방화벽·NAT 시대에 왜 수동 모드가 표준이 됐는지를 이해하면 절반은 끝난다.
오늘의 핵심 통찰: FTP는 명령용 21번 포트와 데이터용 별도 포트를 따로 쓰는 "두 채널 프로토콜"이며, 데이터 연결의 방향이 곧 능동/수동의 차이다. 능동은 서버가 클라이언트로 연결을 거꾸로 열고, 수동은 클라이언트가 서버로 연결을 연다. 이 방향성 하나가 방화벽 통과 여부를 결정한다.
FTP는 다른 프로토콜과 달리 연결을 두 개 쓴다.
| 채널 | 포트 | 역할 |
|---|---|---|
| 제어 채널 | 21 | 로그인, 명령(LIST, RETR, STOR) 전달 |
| 데이터 채널 | 20(능동) 또는 임의 고포트(수동) | 실제 파일·디렉터리 목록 전송 |
명령을 주고받는 21번 연결은 세션 내내 유지되고, 실제 데이터를 옮길 때마다 별도의 데이터 연결이 새로 열린다. 바로 이 데이터 연결을 누가 시작하느냐가 모드를 가른다.