본문 바로가기
느리게 변하는 지식/Network

FTP

by oncerun 2021. 2. 8.
반응형

FTP는 파일 전송 프로토콜이다.

 TCP/IP 프로토콜을 가지고 서버와 클라이언트 사이의 파일을 전송하기 위한 프로토콜로 응용 계층에 존재하고 있다.

 

크게 익명 FTP와 계정 FTP가 존재한다.

익명 FTP는 공식적인 사용자 계정 및 암호 입력이 필요 없는 공개형 FTP Server를 사용해 모든 사용자가 간편하게 접속해 원하는 파일을 다운로드할 수 있다. 보안상으로 파일을 올리는 것은 권한 락을 걸어 방지한다.

- 다운로드만 가능하다.

 

계정 ftp는 쉽게 네이버 클라우드나 구글 드라이브 서비스를 사용한다면 어느 정도 이해를 할 것이다.

즉  업체의 ftp 서버의 하드디스크를 무료 혹은 유료로 가지고 파일을 업로드한 후  공유나 저장 목적으로 사용할 수 있다.

 

서비스를 받는 입장에서는 다양한 방법이 존재한다.

1. 그냥 브라우저에서 파일을 다운로드하는 방법.

2. 파일 질라라는 ftp 클라이언트 프로그램을 이용하는 방법.

3. cmd창을 활용해 받는 방법.

 

cmd창을 활용해 kaist의 서버에 접속해 원하는 파일을 내려받아보자!

 

우선 D드라이브의 ftpDownload라는 파일을 생성한 후 위치를 변경합니다.

이후 다음과 같은 명령어로 서버에 연결합니다.

 

ftp ftp.kaist.ac.kr 을 통해 접속한 후 id는 ftp, 비밀번호는 없기 때문에 enter키를 누르면 로그인에 성공할 것입니다.

 

우선 apache폴더에 들어간후 pwd를 사용해 현재 위치를 한번 확인해보죠

?를 통해 도움말을 출력해 볼 수 있습니다.

dir을 통해 어떤 파일들이 있는지 확인해 보죠.

d는 디렉터리를 의미합니다. 뒤에있는 rwx는 권한 설정이므로 찾아보시면 됩니다.

 

위치를 /apache/httpd로 옮겨주시고 ls를 통해 해당 디렉터리에 어떠한 파일들이 있는지 확인하고 get명령어를 통해 다운로드하도록 해보죠. 다운로드하는 폴더의 위치는 d드라이브에 ftpDownload폴더입니다.

 

다운로드가 잘된 것을 확인할 수 있습니다. 여기까지는 익명 ftp로 원하는 파일을 cmd창에서 멋있게 받는 방법이라 할 수 있습니다. 그냥 브라우저에서 받으세요.

 

윈도에서 해봤으니 리눅스에서도 해보자.

 

리눅스는 하나의 파일 트리로 되어 있으니 사용자 계정의 홈 디렉터리의 down이라는 디렉터리를 생성해서 받아 보겠습니다.

명령어는 cd ~ , mkdir /down , cd /down까지 하면 폴더 생성 후 작업위치가 down입니다.

 

이과정에서  만약 접근권한이 없다고 나오면 sudo 키워드를 붙여서 root 권한을 위임받아 실행할 수 있다.

그리고 umask설정이나 chown으로 만든 down소유자를 root에서 일반 사용자로 변경하여서 실행하자.

 

 

 

접속까지 했다.

 

여기서 ls 명령이 안먹는다면  ftp의 passive mode설정을 진행해야 하는데 간단히 설명하고 넘어간다.

 

 

 ftp는 active 모드와 passive모드 두 가지가 존재한다.

일반적으로 21번 포트로는 접속 및 명령어 전송에 사용되고 20번 포트는 데이터 전송에 이용된다.

 

1. Active 모드

 - 클라이언트에서 서버의 21번 포트로 접속을 시도한다. (이 경우 리눅스에서 카이스트의 ftp에 접속을 시도하는 경우) 이와 동시에 ftp 서버가 passive connetion을 사용하는지 확인. 이때 클라이언트는 임의 포트번호를 사용한다.

 

- 클라이언트가 서버로 접속을 시도하는 동시에 데이터 전송에 사용할 또 다른 포트를 서버 쪽에 알려준다. 

- 서버에서는 클라이언트가 알려준 또 다른 포트에 접속을 시도한다.

 

2. Passive 모드

 - 동일하게 서버 21번 포트로 접속 시도하며, 클라이언트는 임의의 포트를 사용한다.

 - 서버쪽에서 클라이언트에 응답을 해줌과 동시에 서버 쪽에서 사용할 또 다른 포트를 알려준다.(21번 포트가 아닌 다른 포트) 

- 해당 포트로 클라이언트는 접속하는 포트가 아닌 데이터 전송에 사용할 포트로 서버가 알려준 포트에 접속을 시도한다.

 

두 가지의 차이점은 액티브 모드인경우 서버 쪽에서 클라이언트 포트로 접속을 한다는 것

패시브 모드인 경우 클라이언트에서 서버 쪽으로 접속을 시도한다는 것.

아까는 왜 안됫을까? 바로 방화벽 때문이다.  서버가 클라이언트에게 접속하려고 시도를 하지만 방화벽에 막혀 안 되는 경우이다. 이경우는 반대로 클라이언트가 서버에 접속하도록 해야 한다.

 

 

자 다시 시작하면 ls명령이 안되면 passive 명령을 통해 모드를 변경하자.

 

cd putty로 가서 changes.html 파일을 받아보자

 

계정 FTP를 서버로 활용하려면  sftp-server를 활용하면 되고, vsftpd를 서버에 설치하면  익명 ftp를 사용하게 할 수 있으며,  내부적으로 서버 설정을 많이 해야 합니다.  

반응형

'느리게 변하는 지식 > Network' 카테고리의 다른 글

ICMP  (0) 2021.02.20
SMTP  (0) 2021.02.08
HTTP  (0) 2020.04.07
인터넷의 작동원리와 프로토콜  (0) 2020.04.06
Web  (0) 2020.04.06

댓글