[WinAPI] FTP에 대하여(특징, 포트, 모드 차이점) – 1

최근에 회사에서 FTP 기능을 도입하기 위해 FTP에 대해 조사 할 일이 생겼는데, 조사한 내용을 정리하려 합니다.

FTP(File Transfer Protocol)는 파일을 전송하기 위해 만들어진 프로토콜로서, 파일 전송 프로토콜이라고도 합니다.
FTP는 TCP/IP 프로토콜을 가지고, 서버와 클라이언트의 사이의 파일 데이터를 전송하기 위해 만들어진 프로토콜입니다.

HTTP 프로토콜은 문자, 사진, 음악, 동영상, 컨텐츠 등등 간단하게 사용할 수 있습니다. 하지만 큰 크기를 가진 데이터를 주고 받기에는 어렵습니다. 그에 따라 대용량의 데이터를 주고 받기 위해 FTP 프로토콜을 사용되고 있습니다.

특징

FTP의 특징을 나열하면 아래와 같습니다.

  • 빠르고 직관적입니다.
  • 명령(Command) 포트와 데이터(Data) 포트를 사용합니다.
  • 능동(Active) 모드와 수동(Passive) 모드가 있습니다.
  • FTP 모드는 보안에 취약하여, 보안성이 개선된 SFTP 모드가 있습니다.
  • OSI 계층, TCP/IP 프로토콜의 응용 계층에 속합니다.

포트

FTP 서버는 명령을 주고받기 위해 21번 포트를 사용하며 데이터를 주고받기 위해 20번 포트를 기본적으로 사용합니다.
FTP 서버의 명령 포트(21)에 클라이언트가 접속하게 되고, 이 때 클라이언트는 서버에 자신의 데이터 포트를 알려줍니다.

클라이언트의 데이터 포트에 서버의 데이터 포트(20)이 접속합니다.

Active Mode

  1. 클라이언트는 5000번 포트로 FTP 서버의 21번 포트(명령 포트)에 접속하면서, 자신의 데이터 포트 5001번을 알려줌
  2. 서버 응답
  3. 서버는 20번 포트(데이터 포트)를 클라이언트가 알려준 5001번 포트로 접속
  4. 클라이언트 응답

모드

FTP 서버와 클라이언트의 접속은 능동 모드(Active Mode)와, 수동 모드(Passive Mode)가 있습니다.
우선, 위에서 설명드린 방식은 능동 모드 입니다. 능동 모드에서는 한가지 유의 사항이 있습니다.
서버의 데이터 포트가 클라이언트에 접속할 경우(4번), 클라이언트의 방화벽이 5001번 포트의 인바운드 하는 경우를 막아두면, 서버와 클라이언트의 명령 포트는 접속되지만, 데이터 포트가 접속이 되지않는 경우가 생깁니다.
서버는, 접속하는 모든 클라이언트의 방화벽 상태를 알 수 없습니다.
수동 모드에서 능동 모드에서 나타나는 증상을 해결할 수 있습니다.

Passive mode

예를 들어 설명드리겠습니다.
클라이언트는 서버의 명령 포트에 접속합니다. 이때 서버는 클라이언트에게 자신의 3000번 포트 번호를 클라이언트에 알려줍니다.
클라이언트는 5001번 포트를 이용하여 서버의 3000번 포트로 접속하게 됩니다.
능동 모드와 수동 모드의 차이점은 아래와 같습니다.

능동 모드

  • 서버는 21번 데이터 포트 사용
  • 서버는 클라이언트의 데이터 포트에 접속

수동 모드

  • 서버는 1024 ~ 65535 중 임의의 포트를 데이터 포트로 사용(지정되지 않는 경우)
  • 클라이언트는 서버의 데이터 포트에 접속

이상으로 FTP에 대해 알아보았습니다.

다음 글에서는 윈도우에서 FTP 서버를 만들어 보고, 설정을 해보겠습니다.