본문 바로가기
연관있는 이야기

Passive Mode ftp와 Active Mode (non-passive mode) ftp

by 치세 2009. 10. 5.

Passive Mode ftp와 Active Mode (non-passive mode) ftp


FTP 는 대부분의 다른 TCP기반의 서비스들과는 다르게 2개의 서비스 포트번호를 가지고 있습니다. 명령어와 응답이 오가는 command Port(control 포트 – 21번)와 실제 데이터가 오가는 data Port(20번)로 구성된 TCP기반의 서비스입니다. 흔히 알려진 21번 포트는, 서버에서 일반적으로 사용하는 command포트의 번호입니다.

그러나 FTP의 모드에 따라, data포트가 항상 20번이 아니라는 점이 혼동의 시작이 됩니다.

일반적으로 웹 브라우저에는 Passive mode가 설정되어 있지만, FTP 프로그램들에는 Active mode가 기본으로 설정되어 있습니다.

원래 ftp는 21번 포트로 command 를 보내고 20번 Port로 데이터를 보냅니다.
이러한 관점에서 어떤 포트를 사용하느냐 어떤 식으로 접속을 하느냐에 따라 Passive Mode ftp와 Active Mode (non-passive mode) ftp로 나뉩니다.

Active Mode에서는 command포트를 통해 클라이언트가 보내준 정보를 바탕으로, 서버가 클라이언트의 data포트에 접속을 시도한 후, 클라이언트의 요청에 따라 데이터를 클라이언트에 전송해 줍니다.

Passive Mode에서는 command포트에 접속하는 것뿐만 아니라, 데이터 접속도 클라이언트에서 시도하여, 서버에 데이터를 요청하고 전송받는 방식을 취합니다.

방화벽이나 공유기 환경의 Client에서는 Active모드의 전송이 이루어지지 않는 경우가 있습니다.

기본적으로 FTP서버에 대해서 알아야 할 사항이 입니다.
1. FTP는 두 개의 Port를 사용한다는 것입니다.   하나는 Commend Port이며, 다른 하나는 Data Port입니다.
2. FTP는 TCP를 기반으로 만들어져 있습니다.  UDP를 사용하지 않습니다.

1) Active Mode

Active Mode는 21번 port를 server ftp port 입니다. 이는 command를 위한 port이고 실제 data를 전송하기 위해서는 data전송을 위한 port를 사용합니다.
보통 data전송 port는 20번 port를 사용합니다.

Client는 1024번 이상의 빈 port를 골라서 command port로 사용하고 해당포트에 +1을 더한 port를 data port로 사용합니다.

Active mode에서는 서버에 접속할 때 서버가 응답하여 보내주는 정보를 사용중인 접속방법 이외에 별도의 TCP/IP 연결이 되어야 합니다. 이때 연결된 FTP를 끊지 않고 연결된 정보를 재설정하는 것은 불가능합니다. 그러나 Passive mode에서는 시스템에서 예약해 놓지 않는 1024 이상의 포트를 이용하여 연결된 정보를 재설정하기 때문에 방화벽이 설치된 곳에서도 사용이 가능할 수 있습니다.

예를 들면
① 클라이언트에서 서버의 21번 포트로 접속 후 클라이언트가 사용할 두 번째 포트를 서버에 알려줍니다.
② 서버는 이에 대해 ack로 응답하고
③ 서버의 20번 포트는 클라이언트가 알려준 두 번째 포트로 접속을 시도합니다.
④ 마지막으로 클라이언트가 ack로 응답합니다.
즉 Client는 서버 21번 Control port로 접속하고, 실제 데이터를 전송 받기 위해 자신의 임의의 Dynamic port를 연 후 서버측에 port번호를 보내며, 명령형식은 “PORT 192.168.0.1.192.2” (192x256+2=29154) 입니다. 서버는 자신의 20번 TCP port 를 통하여 client와 접속을 초기화한 후 파일을 전송합니다.

Active 모드의 문제점은 바로 3번째 단계 즉, 일반적인 TCP/IP의 특징인 ‘Client가 서버에 접속을 시도하는 것’이 아니라 ‘서버가 Client에 접속을 시도한다’는 것입니다. 이 때문에 만약 Client PC등에 방화벽이 설치되어 있거나 FTP를 잘 이해하지 못하는 공유기 등을 사용하여 외부에서의 접속을 허용하지 않는다면 세 번째 프로세스가 작동하지 않게 되어 FTP 접속이 제대로 되지 않는 문제점이 있습니다. 이러한 경우 FTP 접속은 되지만 이후 데이터 목록을 받아오지 못하여 에러가 발생하게 됩니다.

active 모드는 Client에서 서버측 21번 포트로 접속시도 하고 데이터 포트는 서버에서 Client로 접속 하여 데이터를 보내는 방식입니다.

2) Passive-Mode

서버가 클라이언트에 접속시도를 하는 비정상적인 active 모드와 관련된 문제를 해결하기 위한 대안으로 Passive 모드가 디자인되었습니다.

Passive mode일 때 서버의 command port는 21번이며, data port는 1024번 이상의 사용하지 않는 port 중 하나를 사용합니다

Client는 1024번 이상의 빈 port를 골라서 command port로 사용하고 해당포트에 +1을 더한 Port를 Data Port로 사용합니다.

예를 들면
Passive 모드에서는
① 먼저 클라이언트가 command 포트로 접속을 시도하면
② 서버에서는 서버가 사용할 두 번째 포트를 알려줍니다.
③ 클라이언트는 다른 포트를 열어 서버가 알려준 이 포트로 접속을 시도하고,
④ 서버는 ack로 응답합니다. Passive 모드에서는 두 번째 data포트로서 active 모드가 사용했던 20번을 사용하지 않고 대신 1024 이후의 임의의 비 특권 포트를 사용하게 됩니다.

즉 Client는 서버의 21번 port로 접속하여, 실제 전송 받기 전에 PASV(Passive Mode)명령을 전송하고 서버는 “227 Entering Passive Mode(192.168.0.1.192.2)으로 응답합니다. 이 경우 서버가 49154번 port에서 접속을 기다린다는 뜻입니다.

따라서 passive Mode는 서버에서 Client로 연결을 시도하는 active Mode의 문제점을 해결하기는 했지만, 서버의 비 특권포트(1024 ~ 65535)를 방화벽에서 모두 열어 두어야 한다는 또 다른 문제점을 낳았습니다.

그러나 wu-ftp나 proftpd등 대부분의 ftp 데몬에서는 Client가 Passive Mode로 접속 시 사용할 수 있는 Port를 제한설정 할 수 있는 기능을 지원하므로 이의 문제점을 미봉책이나마 어느 정도는 해결할 수 있습니다.

Passive Mode는 Client에서 서버쪽 21번 Port로 접속을 시도하고 Data Port도 Client에서 서버의 20번 Port로 접속하여 데이터를 받아오는 방식입니다.

'연관있는 이야기' 카테고리의 다른 글

광케이블 커넥터 종류  (0) 2009.10.05
UTP(Unshielded Twisted Pair) 케이블  (0) 2009.10.05
tcp header  (0) 2009.10.05
ocx 분석기법  (0) 2009.07.01
LPI ID 만들기  (0) 2009.06.28

댓글