기술 일반/기타

FTP의 동작 방식 (Active / Passive)

단칸이 2021. 7. 24. 09:48

FTP의 기본 동작

FTP는 TCP를 사용하는 프로토콜로, Active 모드와 Passive 모드가 존재합니다. 각각의 모드에서는 2개의 연결이 생성되는데, 이는 Command 연결과 Data 연결로 구분됩니다.

Command 연결은 명령어의 전달 및 응답을 위한 통신 채널입니다. FTP 통신을 통해 클라이언트가 서버와 파일을 송/수신하려면 먼저 이 연결을 수립해야 하는데, 이 때 클라이언트는 임의의 포트로부터 서버의 21번 포트로(일반적으로) 연결을 생성하게 됩니다.

dATA 연결은 실제 파일의 송/수신을 위한 통신 채널입니다. FTP 모드에 따라 Data 연결이 서버에서(Active) 혹은 클라이언트에서(Passive) 초기화될지 결정되며, 서버가 어떤 Data 포트를 사용할지 여부도 달라지게 됩니다.


FTP의 연결 모드

FTP 서비스에서 제공하는 Active/Passive 모드의 근본적인 차이는 실제 데이터가 오가는 Data 포트의 접속 방식에 있습니다. 

두 가지 방식 모두 Command 연결은 클라이언트에서 서버로의 요청 방향으로 이루어집니다. 그러나 이후 Data 연결 방향에 따라 두 가지 모드가 구분되는데, Active 모드에서는 서버에서 클라이언트 방향으로, Passive 모드에서는 클라이언트에서 서버 방향으로 연결을 시도합니다.

Active 모드

Active 모드는 일반적으로 Command 포트로 20번을 사용하며, Data 전송 용도로 21번 포트를 사용합니다.

Active 모드의 연결 순서

① 클라이언트가 서버의 Command 포트로 접속합니다. 이 때 Data 전송에 사용할 임의의 포트 정보를 서버에 함께 통지합니다.

② 정상적인 접근일 경우 서버는 해당 요청에 대한 Ack를 응답합니다.

③ 서버는 자신의 Data 포트로부터 ① 과정에서 클라이언트에게 통지 받은 포트로 연결을 시도합니다.

④ 정상적인 접근일 경우 클라이언트는 해당 요청에 Ack를 응답합니다.

서버에서 FTP 서비스를 정상적으로 구축했는데도 불구하고 연결이 되지 않는 경우, 대부분의 문제는 ③ 과정에서 발생합니다. 일반적인 TCP/IP의 특징인 '클라이언트가 서버에 접속을 시도'하는 것이 아니라 '서버가 클라이언트에 접속을 시도'하기 때문입니다.

만약 클라이언트 PC에 방화벽이 설치되어 있거나, FTP를 이해하지 못하는 공유기가 있다면 정상적인 연결이 수립되지 않게 됩니다.

Passive 모드

Passive 모드는 Command, Data 연결 모두 클라이언트가 서버로 요청하는 전통적인 방식을 사용합니다.

Passive 모드의 연결 순서

① 클라이언트가 서버의 Command 포트로 접속을 시도합니다.

② 정상적인 접근일 경우 서버는 이를 승인하며, 클라이언트에게 Data 전송에 사용할 임의의 포트를 함께 응답합니다.

③ 클라이언트는 임의의 포트로부터 서버가 알려준 Data 포트로 접속을 시도합니다.

④ 정상적인 접근일 경우 서버는 해당 요청에 Ack를 응답합니다.

Passive 모드에서는 서버가 Data 포트로 20번을 사용하는 대신, 1024번 이후의 사용 가능한 임의의 포트를 활용합니다. 이러한 방식을 통해 앞서 설명해드렸던 Active 모드의 문제점을 해결하기는 했지만, 서버에서 확보한 포트 수에 따라 동시에 연결할 수 있는 클라이언트 수에 제한이 생기게 됩니다.


결론

Active / Passive 모드의 결정은 방화벽이 설치된 위치, 사용 가능한 포트의 제약, 서비스 환경에 따라 달라질 수 있으며, 위에서 살펴본 내용을 정리하면 다음과 같습니다. 

구분 Active 모드 Passive 모드
Command 포트 21 21
Data 포트 20 1024번 이상의 사용 가능한 임의의 포트
Data 연결 방향 서버 -> 클라이언트 클라이언트 -> 서버
문제점 - 클라이언트 PC에 방화벽이 설치된 경우
- FTP를 이해하지 못하는 공유기를 지나는 경우
- 서버의 가용한 포트 수에 따라 동시 접속자수의 한계

참고 자료

FTP는 보안상 상당한 취약점이 있는 프로토콜입니다. 서버로 전송되는 ID/PW를 담은 패킷이 평문이기 때문에 중간에 패킷이 가로채이면 해당 내용이 쉽게 노출된다는 문제점이 발생합니다. 

이러한 문제를 보완하기 위해 FTPS 방식이 많이 사용되는데, 이는 기존의 FTP에 전송 계층 보안(Trans Layer Security, 이하 TLS)을 적용한 것으로 Command 채널과 Data 채널을 모두 보안 속성으로 감싸게 됩니다.

하지만 이러한 방식은 또한 파일의 송/수신 시 오버헤드가 커져 속도의 저하로 이어질 수 있습니다. 이에 따라 FileZilla와 같은 FTP 클라이언트 프로그램에서는 사용자 계정과 같은 정보가 전송되는 Command 채널만 암호화 하고, Data 연결에는 이를 적용하지 않는 패치 등을 제공하기도 합니다.


자료 출처

'기술 일반 > 기타' 카테고리의 다른 글

REST API 응답에 사용되는 HTTP 상태 코드  (0) 2021.08.31
오픈 소스 라이선스  (0) 2021.07.14