반응형
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 서버는 클라이언트의 제어 채널 설정 요구를 받아들이기 위해 21번 포트에서 대기한다.
- 사용자로부터 원격 파일을 복사하기 위한 데이터 전송 요구가 발생하면 데이터 채널을 추가로 설정하고, 파일 내용을 송수신한다.
- 연결 설정 요구가 FTP 서버에서 발생한다.
- FTP 클라이언트가 get이나 put 멸령으로 파일의 송수신을 요청하면 FTP가 데이터 채널을 설정한다.
- 데이터 채널은 파일 송수신 요구가 발생할 때마다 새로 설정되고, 해당 파일의 송수신을 완료하면 즉시 연결을 해제한다.
1.2 데이터 채널의 설정
- 사용자의 파일 송수신 명령이 입력되면 FTP 클라이언트는 데이터 채널을 위한 포트를 생성한다.
- 생성된 포트 x를 서버에 전송하려고 PORT 명령을 사용하는데, 이 과정은 제어 채널을 통해 이루어진다.
- 이후 데이터 송수신 명령이 제어 채널을 통해 전송된다.
- 이때 전송되는 명령은 크게 3가지 가능하다. FTP 클라이언트는 FTP 명령 전송 후 포트 번호 x에서 대기 상태로 들어가 FTP 서버의 연결 요청을 기다린다.
- STOR: 파일 송신 명령
- RETR: 파일 수신 명령
- LIST: 파일 목록 수신 명령
- FTP 서버는 제어 채널을 통해 수신한 포트 번호 x로 연결 설정을 시도한다.
- 연결이 설정되면 클라이언트와 서버는 데이터 채널을 사용해 파일 데이터를 송수신한다.
2 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 서버의 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 메시지를 이용해 데이터를 전송한다.
- RRQ 메시지를 이용해 TFTP 서버로부터 파일을 읽어온다.
- TFTP 클라이언트가 RRQ 메시지를 서버에 보내 세션 연결 요청을 수행한다.
- TFTP 서버는 요청을 검토하여 오류가 있으면 ERROR 메시지를 회신한다. 그렇지 않으면 TFTP 세션이 설정되고, DATA 메시지를 이용해 첫 번째 블록부터 전송을 시작한다.
- 파일 전송을 완료하면 TFTP 세션 연결을 종료한다. (512바이트보다 작은 크기의 블록 전송)
- WRQ 메시지를 이용해 TFTP 클라이언트가 서버에 파일을 전송한다.
- TFTP 서버는 오류가 없으면 ACK 메시지를 전송해 데이터 파일을 수신할 수 있음을 나타낸다. (아니면 ERROR)
- 이후 새로 설정된 TFTP 세션을 사용해 데이터를 전송한다. DATA와 ACK 명령에 의한 파일 송수신 절차와 연결 해제 과정은 읽기 기능과 동일하다.
- 읽기 기능과 반대로 DATA 명령은 클라이언트가 전송하고, 이에 대한 ACK 응답은 서버가 전송한다.
1.3 데이터 전송
- 데이터 블록 전송을 하나씩 처리하는 흐름 제어 방식을 사용한다. (UDP의 데이터 도착 순서 문제 해결)
- DATA나 ACK 메시지를 분실하면 송신자가 타임아웃 기능을 수행한다. (데이터 재전송)
- 수신 데이터의 일부가 변형되는 오류가 발생하면 데이터 분실처럼 처리된다. (부정 응답 기능 지원 X)
- 데이터 블록의 중복 문제는 DATA와 ACK 메시지에 정의된 블록 번호로 처리한다.
2 TFTP 데이터 전송 예
- RRQ 메시지로 세션 연결이 설정되고, 1번으로 지정한 첫 번째 데이터 블록이 정상 처리되었다.
- 2번 데이터 블록은 DATA 명령에 의한 전송 과정에서 데이터 변형/분실이 발생했다.
- TFTP 클라이언트는 서버로부터 어떠한 데이터 블록도 수신하지 않았기 때문에 ACK 메시지를 전송하지 않는다.
- 클라이언트로부터 ACK 메시지를 수신하지 못한 TFTP 서버는 타임아웃 기능을 통해 데이터 블록을 재전송하여 전송 오류를 해결한다.
- 오류 검출은 UDP의 체크섬 기능을 이용한다. (자체적인 체크섬 기능 불가)
- 3번 데이터 블록은 ACK 메시지가 전송 과정에서 분실되었다.
- TFTP 서버는 클라이언트로부터 ACK 메시지를 수신하지 않았기 때문에 다음에 전송할 데이터의 송신을 시작할 수 없다.
- 4번 데이터 블록이 전송되지 않았으므로 TFTP 클라이언트에서 타임아웃 기능을 통해 ACK 메시지를 재전송한다.
Reference
쉽게 배우는 데이터 통신과 컴퓨터 네트워크
반응형
LIST
'독서 > 쉽게 배우는 데이터 통신과 네트워크' 카테고리의 다른 글
[쉽게 배우는 데이터 통신과 네트워크] CH17. 암호화와 네트워크 보안 (최종) (0) | 2024.06.23 |
---|---|
[쉽게 배우는 데이터 통신과 네트워크] CH15. 전자 메일 (0) | 2024.06.18 |
[쉽게 배우는 데이터 통신과 네트워크] CH14. DNS (0) | 2024.06.15 |
[쉽게 배우는 데이터 통신과 네트워크] CH13. 웹(WWW) (0) | 2024.06.14 |
[쉽게 배우는 데이터 통신과 네트워크] CH12. 소켓을 이용한 네트워크 프로그래밍 (0) | 2024.06.12 |