Skip to content

FTP Active, Passive mode

image

FTP는 파일을 전송하기 위해 두 개의 세션을 사용한다. 컨트롤 프로토콜과 데이터 프로토콜이 완전히 분리되어있고, 통신 방법이 다른 두가지 모드를 가지고 있다.

Active 모드

FTP의 기본적인 구동 방식은 Active 모드이다. 컨트롤 프로토콜을 클라이언트에서 서버로 통신을 시작하고, 데이터 프로토콜은 서버에서 클라이언트 쪽으로 데이터를 푸시하는 방식이다.

image

Active 모드의 작동 흐름은 다음과 같다.

  1. 클라이언트가 FTP 서버에 접속. 클라이언트는 1023번 이상의 TCP 포트를, 서버는 21번 포트 사용
  2. 클라이언트가 1025번 포트로 데이터를 수신하겠다 알림
  3. 서버는 송신하겠다고 응답
  4. 서버에서 데이터를 보냄

Active 모드를 사용할 때 중간에 방화벽이나 세션 장비가 있으면 동작 방식에 맞춰 반댓방향의 방화벽을 열어줘야 한다.

특히 NAT 환경인 경우, FTP가 동작하는 프로토콜을 모두 이해할 수 있는 별도 기능을 동작시켜야 한다. 이 기능을 ALG(Application Layer Gateway)라고 한다. ALG가 동작하는 방화벽은 FTP 명령어를 이해하고 반대 방향으로 시작하는 데이터 세션을 인지해 방화벽과 NAT를 자동으로 동작시켜준다.

Passive 모드

Passive 모드는 Acive 모드의 단점을 보완하기 위해 만들어졌다. Active 모드의 가장 큰 문제는 컨트롤 프로토콜과 데이터 프로토콜의 방향이 반대라는 것 이었다. Passive 모드는 컨트롤, 데이터 프로토콜이 분리되어 있는 것은 같지만 클라이언트에서 서버쪽으로 데이터를 요청해 다운받도록 동작한다.

image

Passive 모드의 작동 흐름은 다음과 같다.

  1. 클라이언트가 FTP 서버에 접속. 클라이언트는 1023번 이상의 TCP 포트를, 서버는 21번 포트 사용(Active 모드와 동일)
  2. 클라이언트가 Passive 모드를 사용하겠다고 알림
  3. 서버는 클라이언트에 데이터 수신에 사용할 포트를 알림 2024번 포트를 사용해 수신하겠다고 응답
  4. 클라이언트에서 서버에 데이터를 요청, 2번 과정에서 알려준 2023번 포트에 요청
  5. 데이터 전송

Passive 모드에서 클라이언트 쪽에 방화벽이나 세션 장비가 있을 경우, 특별한 작업 없이 동작할 수 있다는 장점이 있지만 서버 쪽에 방화벽이 있으면 데이터 다운로드를 위한 추가 포트를 열어줘야 한다. FTP 모드에서 사용하는 데이터 포트의 범위를 설정할 수 있다.