티스토리 뷰

FTP 통신 동작과정 및 기본 원리




  FTP( File Transfer Protocol ,FTP )



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

  파일 전송 프로토콜은 TCP/IP 프로토콜 테이블의 응용 계층에 속하며, 오래 되었지만 최근까지도 인터넷에서 자주 사용

  되곤 한다. 


  현재는 HTTP 프로토콜을 통해 접속되는 WWW( World Wide Web ) 방식이 주된 방식으로 WWW는 일반분자를 비롯, 사진 

  음악/동영상 콘텐츠까지 간편하게 사용할 수 있고, 네이버 클라우드, 구글 드라이브 등 간편하고 빠른 웹 하드 서비스를 쉽게

  접할 수 있다. 이런점에서 FTP를 왜 써야하는가에대한 의문을 가질 수 있지만 FTP를 써야한다기보다는 FTP의 동작원리와

  통신과정을 알아둠으로써 어플리케이션 통신을 이해하는데 큰 도움이된다.


  FTP는 파일 전송 전용 서비스라는 특징과 인터넷을 통한 파일 송수신 만을 고안된 서비스( 프로토콜 ) 이기때문에 동작 

  방식이 대단히 단순하고 직관적이다. 그렇기 때문에 사용법도 간단하고, 빠른속도로 많은 파일을 주고 받을 수 있다는 

  장점이 있다.






  FTP - 동작원리



  FTP통신은 서비스를 제공하는 서버와 여기에 접속하는 클라이언트 사이에 두 개의 연결이 생성되는데, 하나는 데이터

  전송을 제어하기 위한 신호를 주고 받기 위함이고( 네트워크 21번 포트 ), 다른 하나는 실제 데이터( 파일 ) 전송에

  사용된다. ( 네트워크 20번 포트



  ↑21번 포트는 신호/명령제어 채널, 20번포트는 데이터( 파일 ) 전송 채널




  FTP통신은 TCP통신을 하기 때문에, 처음 3-way handshaking 과정을 거친 후 클라이언트가 명령어를 입력하면, 서버는

  숫자 코드로 응답한다. 



   1. 클라이언트 명령어 



  ↑List of FTP commands ( 클라이언트 명령어 )

    # 주요 커맨드는 외에는 외우기보다는 필요에따라 참고하는게 좋다.

    # 출처 : 위키백과



   2.FTP 서버 응답 코드  



  ↑List of FTP server return codes ( FTP 서버 응답 코드 )

    # 주요 응답코드는 외에는 외우기보다는 필요에따라 참고하는게 좋다.

    # 출처 : 위키백과







  FTP 통신- 데이터 전송 



  FTP는 데이터 ( 파일 )를 전송 함에 있어, 수동 모드( Passive Mode )와 능동모드( Active Mode ) 두 가지를 지원한다.

  Active Mode 데이터 전송을 할때 서버는 20번 포트를 사용하고, Passive Mode 데이터 전송을 할때  서버는 

  1024~65535 사이의 랜덤한 비특권 포트를 사용한다.

  


   1.능동 모드( Active Mode ) 



  ↑Active Mode 작동 방식



  능동 모드는 클라이언트 에서 ① FTP서버의 21번 포트로 접속을 시도하고, 사용할 두 번째 포트를 서버에 알려준다.

  ②서버는 ACK로 응답 후 서버의 ③20번 포트는 클라이언트가 알려준 두 번째 포트로 접속을 시도하고, ④ 마지막으로

  클라이언트가 ACK로 응답한다.



  


  ↑능동 모드 ( Active Mode ) : 최초 접속 요청

    #.1 그림과 같이 먼저 클라이언트는 서버의 21번 포트로 접근하여 로그인 요청을 한다.

    #.2 서버는 정상적인 접근일 경우 그에 대한 승인을 하고 로그인이 이루어진다. 




  ↑능동 모드 ( Active Mode ) : 데이터 전송을 위한 절차

    #.1 클라이언트가 로그인하게되면 서버에게 " 데이터 전송을 위해서 내쪽의 xxxx포트로 접속해 " 알려준다. 이에 서버는

         20번 포트를 이용하여 클라이언트가 알려준 포트로 접속을 하고 데이터를 전송한다.




  이때 능동모드의 문제점이 바로 ③단계 이다. TCP/IP의 특징인 '클라이언트가 서버에 접속을 시도하는 것' 이 아니라

  ' 서버가 클라이언트에 접속을 시도한다. '는 것이기 때문이다. 이때 클라이언트PC에 내부적인 환경요인 ( 방화벽 ) 과 

  외부적인환경 요인( FTP를 제대로 인지하지 못하는 공유기 )으로 FTP가 접속이 제대로 되지 않거나, 접속이 된다 

  하더라도 이후 데이터 목록을 받아오지 못하는 에러가 발생할 수 있다.

  





   2.수동 모드( Passive Mode ) 



  ↑Passive Mode 작동 방식



  서버가 클라이언트에 접속을 시도하는 비정상적인 능동모드에 대한 문제점을 해결하기위해서 수동모드가 등장했다.

  ① 먼저 클라이언트가 21번 포트로 접속을 시도하면 ② 서버에서는 서버가 사용할 두 번째 포트를 알려준다.

  ③ 클라이언트는 다른 포트를 열어 서버가 알려준 이 포트로 접속을 시도하고, ④이에 서버는 ACK로 응답한다.

  수동 모드에서는 두 번째 data포트로써 능동모드에서 사용했던 20번 포트를 사용하지 않고 1024 ~ 65535 사이의

  임의의 비 특권 포트를 사용한다. 

  

  

  



  ↑수동 모드 ( Passive Mode ) : 최초 접속 요청

    # 능동 모드와 동일한 절차를 거쳐 로그인

    # 서버의 21번 포트로 접속을 하게 되고 서버는 승인을한다.




  ↑수동 모드 ( Passive Mode ) : 데이터 전송을 위한 절차

    # 데이터 전송시 능동모드와 달리 클라이언트는 서버쪽에서 알려준 임의포트와 연결하여 데이터를 송수신하게 된다.








  FTP 통신 - 데이터 전송 과정


  실습 환경은 리눅스에 가상의 ftp 서버 생성, 윈도우 명령 프롬프트를 통해 ftp 접속 시도



  ↑와이어 샤크를 통해 ftp 통신과정을 분석 ( Active Mode )

   # 위에서 알아본바와 같이 클라이언트는 서버의 21번 포트로 접속을 시도한다.

   # 이 과정은 TCP/IP의 3-way handshaking과 동일하다.

   # 이때 클라이언트는 ftp 서버로부터 응답 코드를 받는다.

     #.1 220 : 유저를 위한 서비스를 제공할 준비가 되었다.

        → 클라이 언트측에서 아이디를 입력한다.

     #.2 331 : 아이디가 확인되었다.

        → 비밀번호 입력

     #.3 230 : 성공적으로 로그인이 되었다.



  ↑윈도우 명령 프롬프트로 접속을 시도할때, 서버로부터 응답코드를 받을 수 있다.

    # 응답코드에 따라 오류를 확인할 수 있고, 원인을 파악할 수 있다.







'Network' 카테고리의 다른 글

DHCP 프로토콜 통신과정 및 기본 원리  (0) 2017.04.24
Network - ICMP ( 인터넷 제어 메시지 프로토콜)  (0) 2017.04.14
TCP/IP 3 Way-Handshaking  (1) 2017.04.11
Network - OSI Layer 7  (0) 2017.04.07
Network - LAN 과 WAN  (0) 2017.04.07