본문 바로가기

Network/L7

FTP 프로토콜의 Active모드와 Passive모드 이해하기

이번 문서에서는 FTP 프로토콜과 그 특징에 대해서 알아보겠습니다.

 

FTP(File Tranfer Protocol) 이란?

TCP/IP 프로토콜을 가지고 서버와 클라이언트 사이의 파일 전송을 하기 위한 프로토콜이다.

- 출처 : 위키백과 -

 

FTP 프로토콜은 OSI 7 모델에서 애플리케이션 계층에 속하는 프로토콜로, 서버와 클라이언트 사이의 파일을 전송하기 위해 사용되는 프로토콜입니다. 원격지로 파일을 전송하는 FileZilla나 Cyberduck 같은 프로그램을 사용할 때, 이 FTP 프로토콜이 동작합니다.

 

 

FTP 프로토콜은 전송계층 하위 프로토콜로 TCP 프로토콜을 사용합니다.

이때 TCP 패킷 헤더의 목적지 포트는 FTP 를 의미하는 20번과 21번이 사용됩니다.

 

그런데 뭔가 이상합니다. 대부분 우리가 아는 프로토콜들은 단일 포트번호를 사용하는데, 왜 FTP 는 사용하는 포트가 두 개 일까요?

데이터 프로토콜과 컨트롤 프로토콜

그 이유는 알기 위해 데이터 프로토콜과 컨트롤 프로토콜을 이해해야 합니다.

데이터 프로토콜은 실제 데이터를 전송하는데 사용되는 프로토콜 입니다. HTTP나 HTTPS, SMTP 같은 프로토콜들이 그 예시이지요.

컨트롤 프로토콜은 네트워크 통신을 관리하고 제어하는데 사용되는 프로토콜 입니다. TCP나 ICMP 같은 프로토콜들이 그 예시입니다.

 

FTP 프로토콜의 등장 배경

RFC 959 에 따르면, FTP 프로토콜은 1971 년에 개발된 파일 전송 프로토콜입니다.

현재 인터넷의 전신인 ARPANET(미 국방부에서 군용 프로젝트로 개발한 패킷 교환 방식 네트워크) 의 파일 전송을 위해 개발되었고, 당시에는 네트워크 보안이나 암호화 등이 고려되지 않았습니다. 먼저 파일을 전송한다는 기능에 집중했기 때문이지요.

따라서 당시에는 컨트롤 채널과 데이터 채널을 분리함으로써, 통신 제어와 에러 핸들링을 더 용이하게 하는 편이 더 직관적이었습니다.

 

FTP Protocol

FTP 프로토콜의 Actice 모드는 위 그림과 같이 동작합니다. 

 

FTP 클라이언트와 FTP 서버 간 Control Connection 할때는 서버의 21번 포트를, Data Connection 할때는 서버의 20번 포트를 사용하지요.

TCP 프로토콜을 사용하므로 3-Way Handshake 로 연결을 수립함은 물론입니다. 

하지만 위 그림을 잘 보시면, 의아한 점이 있습니다. 

Controal Connection 과정에서는 클라이언트의 1024번 포트에서 서버의 21번 포트로 컨트롤 연결을 시도하는데, Data Connection 과정에서는 서버가 클라이언트 측으로 데이터 연결을 시도합니다.

 

즉, Control 프로토콜과 Data 프로토콜의 동작 방향이 반대입니다.

만약 FTP 클라이언트와 FTP 서버 사이에 방화벽이 있다면, Active 모드의 동작 방식에 맞게 방화벽의 반대 방향도 열어주어야 합니다.

 

또한 NAT 를 통해 외부 인터넷과 통신하는 상황이라면, FTP 프로토콜의 동작을 이해할 수 있도록 NAT의 ALG(Application Layer Gateway) 기능을 활성화 해야 합니다.

 

FTP  Passive

이러한 FTP 프로토콜의 Active 모드의 단점을 보완하기 위해 Passive 모드가 개발되었습니다.

FTP Passive

FTP Passive 모드는 위 그림과 같이 동작합니다.

Control Connection 은 클라이언트에서 서버로, Data Connection 도 클라이언트에서 서버로 동작합니다.

이 경우, 데이터 채널 연결은 서버의 20번 포트를 사용합니다. 또한 데이터 다운로드를 위한 서버측의 추가 포트를 열어주어야 합니다.

 

Wireshark

패킷 캡쳐 분석 프로그램인 Wireshark 를 통해 실제 FTP 프로토콜의 동작 과정을 알아보겠습니다.

실습  환경은 아래와 같습니다.

 

FTP 서버 :  ubuntu 24.04 (vsftp.d 사용), 192.168.10.11
FTP 클라이언트 : Mac OS(inetutils 사용), 192.168.10.15

 

FTP Active

1528 번째 패킷을 보면 192.168.10.15(FTP Client)에서 192.168.10.11(FTP Server) 로 TCP 3-way-handkshake 연결을 수립하고 있는 과정을 확인할 수 있습니다. 이 경우, 최초에 SYN 플래그를 클라이언트 측에서 먼저 전송하고 있습니다. 

2193 번째 패킷을 보면 192.168.10.11(FTP Server) 에서 192.168.10.15(FTP Client) 로 TCP 3-way-handshake 과정을 수행하는걸 확인할 수 있습니다. 

즉, 1528 번째 패킷은 컨트롤 커넥션, 2193 번째 패킷은 데이터 커넥션이라고 볼 수 있습니다.

 

FTP Passive

FTP Passive 모드에서는 176 번째 패킷과 460번째 패킷에서 컨트롤 커넥션과 데이터 커넥션의 출발지가 모두 192.168.10.15(FTP Client) 에서 시작되는것을 확인할 수 있습니다.

추가로 10025번 포트는 데이터 다운로드를 위해 사용되는 서버측의 포트이며, ufw 에서 방화벽을 오픈해주었습니다.

 

이번 글에서는 FTP 프로토콜의 액티브모드와 패시브모드, 데이터 프로토콜과 컨트롤 프로토콜에 대해 알아보았습니다.

 

지적 및 질문은 댓글로 남겨주세요.

감사합니다.

'Network > L7' 카테고리의 다른 글

Telnet Over SSL/TLS 과 SSH  (0) 2024.09.12