본문 바로가기

Computer Science/네트워크

[쉽게 배우는 데이터 통신과 네트워크] CH16. 파일 전송

반응형
SMALL

01 파일 전송을 위한 사용자 환경

1 FTP 로그인

  • FTP: File Transfer Protocol (원격 시스템과의 파일 송수신 기능 지원)
  • 원격 시스템에 접속하려면 FTP 서버에 등록된 로그인 계정과 암호가 필요하다.

 

1.1 익명 FTP 로그인

  • 익명 FTP 서비스를 사용하려면 로그인 이름을 anonymous로 입력하고, 로그인 암호는 관례상 전자 메일 주소를 입력한다.
  • 로그인이 성공하면 FTP 사용자 명령으로 파일 송수신 기능을 수행할 수 있다.

 

1.2 FTP 로그인

% ftp information.korea.co.kr
Connected to information.korea.co.kr.
220 information FTP server (SunOS 5.7) ready.
Name (information.korea.co.kr: hong): hong
331 Password required for hong.
Password:
230 User hong logged in.
ftp>
  • 사용자가 information.korea.co.kr의 FTP 서버와 연결을 시도한다.
  • 서버에 등록된 로그인 이름(hong)과 암호를 FTP 서버에서 인증하면 FTP 로그인 절차가 완료된다.

 


2 사용자 파일 전송 명령

명령 설명
get 원격 시스템에서 파일을 수신한다.
put 원격 시스템으로 파일을 송신한다.
ls 원격 시스템의 현재 디렉토리 아래에 존재하는 파일 목록을 출력한다.
cd 원격 시스템의 현재 작업 중인 디렉토리를 이동한다.
lcd 로컬 시스템의 현재 작업 중인 디렉토리를 이동한다.
bin 8비트 송수신 기능을 지정한다.
quit FTP 프로그램을 종료한다.

🔼 FTP 명령

 

2.1 파일 전송 명령 실행 예

ftp> ls
200 PORT command successful.
150 ASCII data connection for /bin/ls (210.99.58.181, 32801) (0 bytes).
README
Book
hong12.Dec00.tar.Z
226 ASCII transfer complete.
34 bytes received in 0.04 seconds (0.83 Kbytes/s)
ftp>
  • 로그인 사용자(hong)의 홈 디렉토리 내용을 조회한다.
  • README, Book, hong12.Dec00.tar.Z 파일 3개가 존재한다.

 

ftp> get README
200 PORT command successful.
150 ASCII data connection for README (210.99.58.181, 32802) (179 bytes).
226 ASCII transfer complete.
local: README remote: README
189 bytes received in 0.021 seconds (8.90 Kbytes/s)
ftp>
  • 임의의 파일을 가져올 때는 get 명령을 사용하고, 복사할 파일의 이름을 인수로 입력한다.
  • README라는 파일을 복사하려고 get README 명령을 입력했다.
  • 복사된 파일은 클라이언트 호스트의 현재 디렉토리에 저장된다.

 


02 FTP 원리

1 FTP 구조

제어 채널은 FTP 명령을 전송하고, 데이터 채널은 복사하려는 파일의 내용을 전송한다.

 

1.1 제어 채널과 데이터 채널

FTP 구조

  • FTP 클라이언트와 서버 사이의 연결 설정 과정을 설명한다.
  • FTP 사용자로부터 연결 요청이 들어오면 사용자 인터페이스 모듈이 로그인 이름, 암호 등을 해석하여 명령 송수신 모듈에 전달한다.
  • 명령 송수신 모듈은 FTP 서버와 연결을 시도하여 제어 채널을 설정한다.
    • FTP 서버는 클라이언트의 제어 채널 설정 요구를 받아들이기 위해 21번 포트에서 대기한다.
  • 사용자로부터 원격 파일을 복사하기 위한 데이터 전송 요구가 발생하면 데이터 채널을 추가로 설정하고, 파일 내용을 송수신한다.
    • 연결 설정 요구가 FTP 서버에서 발생한다.
    • FTP 클라이언트가 get이나 put 멸령으로 파일의 송수신을 요청하면 FTP가 데이터 채널을 설정한다.
    • 데이터 채널은 파일 송수신 요구가 발생할 때마다 새로 설정되고, 해당 파일의 송수신을 완료하면 즉시 연결을 해제한다.

 

1.2 데이터 채널의 설정

데이터 채널의 설정 과정

  1. 사용자의 파일 송수신 명령이 입력되면 FTP 클라이언트는 데이터 채널을 위한 포트를 생성한다.
  2. 생성된 포트 x를 서버에 전송하려고 PORT 명령을 사용하는데, 이 과정은 제어 채널을 통해 이루어진다.
  3. 이후 데이터 송수신 명령이 제어 채널을 통해 전송된다.
  4. 이때 전송되는 명령은 크게 3가지 가능하다. FTP 클라이언트는 FTP 명령 전송 후 포트 번호 x에서 대기 상태로 들어가 FTP 서버의 연결 요청을 기다린다.
    • STOR: 파일 송신 명령
    • RETR: 파일 수신 명령
    • LIST: 파일 목록 수신 명령
  5. FTP 서버는 제어 채널을 통해 수신한 포트 번호 x로 연결 설정을 시도한다.
  6. 연결이 설정되면 클라이언트와 서버는 데이터 채널을 사용해 파일 데이터를 송수신한다.

 


2 FTP 명령과 응답

FTP 명령과 응답

FTP 클라이언트와 서버는 FTP 명령을 처리하기 위해 제어 채널을 사용하며, 클라이언트가 전송한 명령에 대해 서버가 응답하는 방식으로 진행된다.

 

2.1 FTP 명령

명령 설명
USER <로그인 이름> FTP 서버에 등록된 사용자의 로그인 이름을 전송한다.
PASS <암호> USER 명령이 성공적으로 처리된 직후, 로그인 인증을 위한 암호를 전송한다.
QUIT FTP 세션을 끝내고 로그아웃한다.
CWD <디렉토리> FTP 서버에서 현재의 작업 디렉토리를 변경한다.
CDUP FTP 서버에서 현재의 작업 디렉토리를 상위 디렉토리로 이동한다.
PWD FTP 서버에서 현재의 작업 디렉토리 위치를 회신한다.
MKD <디렉토리> FTP 서버에서 현재 디렉토리 아래에 디렉토리를 새로 생성한다.
RMD <디렉토리> FTP 서버에서 특정 디렉토리를 삭제하며, 삭제할 디렉토리 이름을 인수로 준다.
DELE <파일> FTP 서버에서 디렉토리가 아닌 일반 파일을 삭제한다.
LIST <디렉토리> FTP 서버에서 인수로 지정한 디렉토리의 목록 정보를 요청한다.
TYPE <유형> 전송 데이터의 유형을 의미한다.
RNFR <원래 이름> FTP 서버에서 파일 이름을 변경할 때 RNTO 명령과 함께 사용한다.
RNTO <새로운 이름> FTP 서버에서 파일 이름을 변경할 때 RNFR 명령과 함께 사용한다.
RETR <파일> FTP 서버의 파일을 FTP 클라이언트로 복사할 때 사용한다.
STOR <파일> FTP 클라이언트의 파일을 서버로 복사할 때 사용한다.

🔼 FTP 명령

 

2.2 FTP 응답

응답 코드 의미
125 데이터 채널이 설정되었으며, 이어서 데이터 전송을 시작할 예정이다.
200 명령 처리를 완료했다.
230 사용자 로그인을 처리했다.
250 요청한 파일 동작을 처리했다.
331 로그인 이름을 정상적으로 처리했으므로, 암호를 처리해야 한다.
425 데이터 채널의 연결이 이루어지지 않았다.
426 연결을 취소하였다.
450 파일 관련 처리를 완료하지 못했다.
451 동작 처리를 완료하지 않았다.
500 잘못된 명령이다.
501 명령의 인수가 잘못되었다.

🔼 FTP 응답

 

2.3 FTP 로그인 과정

FTP 로그인 과정

  • 클라이언트는 FTP 서버의 21번 포트와 TCP 연결 설정을 시도한다. (220을 수신하면 연결 성공)
  • USER 명령을 사용해 로그인 이름을 제공하고, PASS 명령으로 로그인 암호를 전송한다. (유효한 사용자일 경우 230을 회신하여 로그인 절차가 성공적으로 이루어졌음을 안내)

 

2.4 FTP 파일 송수신 과정

파일 송수신 과정

  • 데이터 채널 설정은 FTP 클라이언트에서 데이터 채널용 포트를 생성한다.
    • 생성된 포트 번호는 PORT 명령에 의해 FTP 서버로 전달된다.
    • 이후 FTP 클라이언트가 필요한 파일 송수신 명령을 서버에 전송한다.
  • RETR 명령은 서버에서 파일을 복사해 올 때 사용한다.
  • STOR 명령은 파일을 서버로 복사할 때 사용한다.
  • 파일 송수신 명령의 전송이 완료되면 FTP 서버가 클라이언트와 데이터 채널의 연결을 시도하고, 데이터 채널이 설정되면 파일 전송이 이루어진다.
  • 파일 전송을 완료하면 설정된 데이터 채널의 연결은 즉시 끊기고, 제어 채널을 이용해 파일 송수신 명령에 대한 응답 코드(226)가 클라이언트에 회신된다.

 


03 TFTP 동작 과정과 예

TFTP(Trivial File Transfer Protocol)는 임의의 시스템이 원격 시스템으로부터 부팅 코드를 다운로드하는 데 사용하는 프로토콜이다.

 

1 TFTP 동작 과정

UDP 69번 포트를 통해 데이터를 전송한다.

 

1.1 TFTP 메시지

메시지 설명
RRQ 읽기 요청을 의미하는 RRQ는 TFTP 서버로부터 데이터를 읽기 위한 세션을 설정한다.
WRQ TFTP 서버에 데이터를 쓰기 위한 세션을 설정한다.
DATA 클라이언트나 서버가 데이터 블록을 전송할 목적으로 사용한다.
ACK DATA 메시지로 전송된 데이터 블록을 수신하였음을 응답한다.
ERROR 데이터 전송 과정에서 오류가 발생했을 때 사용한다.

🔼 TFTP 메시지

 

1.2 세션 설정

RRQ, WRQ 등의 메시지를 이용해 TFTP 세션을 설정/유지하고, DATA 메시지를 이용해 데이터를 전송한다.

 

TFTP의 데이터 읽기

  • RRQ 메시지를 이용해 TFTP 서버로부터 파일을 읽어온다.
  • TFTP 클라이언트가 RRQ 메시지를 서버에 보내 세션 연결 요청을 수행한다.
  • TFTP 서버는 요청을 검토하여 오류가 있으면 ERROR 메시지를 회신한다. 그렇지 않으면 TFTP 세션이 설정되고, DATA 메시지를 이용해 첫 번째 블록부터 전송을 시작한다.
  • 파일 전송을 완료하면 TFTP 세션 연결을 종료한다. (512바이트보다 작은 크기의 블록 전송)

 

TFTP의 데이터 쓰기

  • WRQ 메시지를 이용해 TFTP 클라이언트가 서버에 파일을 전송한다.
  • TFTP 서버는 오류가 없으면 ACK 메시지를 전송해 데이터 파일을 수신할 수 있음을 나타낸다. (아니면 ERROR)
  • 이후 새로 설정된 TFTP 세션을 사용해 데이터를 전송한다. DATA와 ACK 명령에 의한 파일 송수신 절차와 연결 해제 과정은 읽기 기능과 동일하다.
  • 읽기 기능과 반대로 DATA 명령은 클라이언트가 전송하고, 이에 대한 ACK 응답은 서버가 전송한다.

 

1.3 데이터 전송

  • 데이터 블록 전송을 하나씩 처리하는 흐름 제어 방식을 사용한다. (UDP의 데이터 도착 순서 문제 해결)
  • DATA나 ACK 메시지를 분실하면 송신자가 타임아웃 기능을 수행한다. (데이터 재전송)
  • 수신 데이터의 일부가 변형되는 오류가 발생하면 데이터 분실처럼 처리된다. (부정 응답 기능 지원 X)
  • 데이터 블록의 중복 문제는 DATA와 ACK 메시지에 정의된 블록 번호로 처리한다.

 


2 TFTP 데이터 전송 예

TFTP 데이터 전송의 예

  • RRQ 메시지로 세션 연결이 설정되고, 1번으로 지정한 첫 번째 데이터 블록이 정상 처리되었다.
  • 2번 데이터 블록은 DATA 명령에 의한 전송 과정에서 데이터 변형/분실이 발생했다.
    • TFTP 클라이언트는 서버로부터 어떠한 데이터 블록도 수신하지 않았기 때문에 ACK 메시지를 전송하지 않는다.
    • 클라이언트로부터 ACK 메시지를 수신하지 못한 TFTP 서버는 타임아웃 기능을 통해 데이터 블록을 재전송하여 전송 오류를 해결한다.
    • 오류 검출은 UDP의 체크섬 기능을 이용한다. (자체적인 체크섬 기능 불가)
  • 3번 데이터 블록은 ACK 메시지가 전송 과정에서 분실되었다.
    • TFTP 서버는 클라이언트로부터 ACK 메시지를 수신하지 않았기 때문에 다음에 전송할 데이터의 송신을 시작할 수 없다.
    • 4번 데이터 블록이 전송되지 않았으므로 TFTP 클라이언트에서 타임아웃 기능을 통해 ACK 메시지를 재전송한다.

 


Reference

쉽게 배우는 데이터 통신과 컴퓨터 네트워크

반응형
LIST