FTP(File Transfer Protocol)

FTP(File Transfer Protocol)

  • 파일 공유를 목적으로 개발 됐다.
  • 네트워크 상에서 파일을 전송하기 위한 TCP 기반의 프로토콜
  • 1971년에 최초로 공개 됐다.
  • 파일 전송 시 데이터의 손실을 피하기 위해 TCP를 통해 전송 된다.
  • 사용자 인증과 명령 전달을 위한 제어 연결과파일 전송을 위한 DATA 연결이 분리되어 있다.
  • 제어 연결용 Port: TCP 21번 , Data 전송용 Port : TCP 20번 or Random Port

익명(anonymous) FTP

  • 계정(ID/Password)이 없는 사용자가 서버 자원에 한정된 접근을 할 수 있는 권한을 제공한다.
  • 일반적으로 공유해야 하는 정보공유 시 사용된다.
    • 고객 지원, 파일 배포 등의 위한 목적으로 사용된다.

FTP 동작 방식

FTP1

FTP 제어 연결(Control Connection)

제어 연결

  • FTP 세션이 연결될 때 생성되는 TCP연결
    • FTP 세션이 유지되는 동안 계속 연결 상태를 유지 한다.
  • FTP 명령과 응답과 같은 제어 정보를 전달
  • PI(Protocol Interpreter, 프로토콜 해석기)가 제어 연결을 관리하고 명령을 처리 한다.
    • 허용된 사용자만 서버에 접근하도록 통제 한다. -> 자원 선별

동작 순서

  • Client -> 서버로 TCP 연결 요청
  • Server -> 클라이언트의 요청을 받고 220 “Ready” 응답을 전달
  • Client -> 서버의 응답을 받고 사용자 명(USER) 전달
  • Server -> 사용자 명을 전달 받고 331 “Need Password” 응답을 전달
  • Client -> 서버의 응답을 받고 비밀번호(PASS) 전달
  • Server -> 비밀번호를 전달 받고 인증 후 성공하면 230 “Greeting(환영 메시지)” 전달
  • Client -> 서버의 응답을 받으면 제얻연결 수립 완료

FTP2

데이터 연결

  • 서버와 클라이언트칸 공유되는 데이터가 전달될 떄 마다 따로 생성되는 TCP연결
  • 실제 파일을 보내고 받는 작업을 처리한다.
  • DTP(Data Transfer Process, 데이터 전송 프로세스)가 실제 데이터를 전달하는 동작을 처리 한다.
    • DTP 사이에서 연결을 수립 한다.
    • 서버의 디렉터리 목록 출력 등의 데이터 전송에도 데이터 연결이 필요한다.
  • 연결 방식
    • ACTIVE 방식
      • 클라이언트에서 데이터 전송port를 지정하여 서버에게 전달
      • 서버에서 데이터 연결을 시도 한다.
      • 클라이언트 측에서 방화벽이 동작 중이면 서버가 시도하는 데이터 연결 요청이 차단될 수 있다.
    • PASSIVE 방식
      • 서버에서 데이터 연결 port를 지정하여 클라이언트에게 전달
      • 클라이언트에서 데이터 연결을 시도 한다.
    • 연결 방식은 Client 측에서 결정한다.

Active Mode

  • Client엣 Server로 FTP 제어 연결 요청
  • Client에서 제어 연결을 통해 자신의 Data 전송 port(Random Port)를 Server 측에 알려준다.(Port)
  • Server에서 Client로 Data 전송 연결 요청

FTP3

Passive Mode

  • Client에서 제어 연결을 통해 Server 측에 Passive 연결 요청(PASV)
  • Server에서 제어 연결을 통해 자신의 Data 전송 Port를 Client 측에 알려준다.
  • Client에서 Server로 Data 전송 연결 요청

FTP4

FTP DATA 전송

스트림 모드(Stream Mode)

  • 특별한 구조 없이 단순한 바이트의 연속으로 데이터를 전송 한다.
    • TCP의 신뢰성, 연결에 의존 한다.
    • 특정 헤더를 가지지 않는다. -> 오버헤드가 적다(헤더 크기 = 0byte)
  • 일반적으로 사용되는 전송 모드(기본 모드)
    • 구현이 쉽고 호환성이 좋다.
    • 파일의 내용과 상관없이 단순 바이트의 연속 -> 범용적이다.

블록 모드(Block Mode)

  • 데이터를 블록단위로 나워서 개별적인 FTP 블록, 레코드로 캡슐화 하여 전송한느 방식
  • 헤더 크기 = 3byte
    • 길이, 데이터 블록
  • 전송된 데이터를 기록하고 중단된 전송을 감지하여 재전송하기 위한 알고리즘이 사용된다.

압축 모드(Compression Mode)

  • Run-Length Encoding(런-랭스 부호화) 압축방식을 사용 한다.

FTP Protocol

FTP Request

FTP5

FTP Response

FTP6