adsense

FTP와 TFTP에 대하여

FTP(File Transfer Protocol)

하나의 호스트에서 다른 호스트로 파일을 복사하기 위해 TCP/IP에 의해 제공되는 표준 기능이다.
간단히 파일 전송 프로토콜

호스트간 두 개의 연결 설정이 필요하다

  • 데이터 전송 연결(포트 20)
  • 명령과 응답 등의 제어 연결(포트 21) 


종류

  • 공개 FTP - 누구나 접속해서 다운로드 가능
  • 비공개 FTP - 계정과 비밀번호가 필요


FTP는 보안 프로토콜로 계획되지 않아서 수많은 보안 취약점이 존재한다.


연결 과정

제어 연결
  1. 서버는 잘 알려진 포트 21로 수동 설정 시도 후 클라이언트의 응답 대기
  2. 클라이언트는 임시 포트 사용하여 능동적 연결 시도




TCP_IP Protocol Suite 4th ed. - B. Forouzan (McGraw-Hill, 2010)

데이터 연결
  1. 서버가 아닌 클라이언트가 임시 포트를 사용하여 수동적 연결 시도
  2. 클라이언트는 이 포트 번호를 서버에 전송
  3. 서버는 잘 알려진 포트 20과 임시 포트 번호 사용하여 능동적 연결 설정 시도



TCP_IP Protocol Suite 4th ed. - B. Forouzan (McGraw-Hill, 2010)





우선 위에서 설명한 기본적인 방식을 Active Mode 라고 하고, 좀 더 간단히 그림으로 보면 아래와 같다.




  • 클라이언트에서 서버측 21번 포트로 접속 시도하고 데이터 포트는 서버에서 클라이언트로 접속하여 데이터 전송
  • 클라이언트가 방화벽 뒤에 있는 경우 외부에서 이 클라이언트에게 접근이 어려움(passive mode 사용)



위의 20, 21번 포트는 너무나 잘 알려져 있다. 방화벽과 관련된 문제 혹은 악용 문제가 발생하기도 한다.
그래서 포트를 다르게 설정하는 방식이 있다. 이를 Passive Mode라고 하며, 아래와 같다.




  • 클라이언트에서 서버측 21번 포트로 접속 시도하고 데이터 포트는 클라이언트에서 서버의 임의의 포트로 접속하여 데이터 전송 





TFTP(Trivial FTP)

이름에서 느껴지듯 FTP의 복잡성 없는 간단한 파일 전송 프로토콜이다. 
보다 단순하고 빠르게 전송해야 할 데이터가 존재할 경우 사용할 수 있다.
그러다보니 자연스럽게 TCP가 아닌 UDP 서비스를 사용한다.

간단히 정리하면 다음과 같다.


UDP 서비스 사용

연속적인 데이터 블록으로 파일 전송하기 위해 흐름 제어오류 제어 수행

흐름 제어
  • 데이터 블록에 번호 부여하여 송신하고 이에 대한 ACK 기다리는 방식으로 흐름 제어

오류 제어
  • 송신자 수신자 모두 타임아웃 사용하여 재전송





위의 흐름제어와 오류제어로 인해서 발생하는 문제가 있다.

마법사의 초보 버그(Sorcerer's apprentice bug)

TCP_IP Protocol Suite 4th ed. - B. Forouzan (McGraw-Hill, 2010)

ack 메시지가 유실되지 않고 지연되는 경우에 발생한다.

그림에서와 같이 모든 데이터 블록과 응답이 두번씩 송수신되는 문제가 발생할 수 있다.