FTP는 원래 시스템과의 파일 송수신 기능을 지원한다. FTP와 함께 개발된 프로그램으로 텔넷, 전자메일 프로그램 등이 있는데 이들과 비교하면 FTP 구조는 상당히 복잡하다.
FTP 구조
FTP는 일반 응용 프로그램과 달리 클라잉너트와 서버 사이에 제어 채널과 데이터 채널이라는 두 가지 연결이 존재한다. 제어 채널은 FTP 명령을 전송하고, 데이터 채널은 복사하려는 파일의 내용을 전송한다.
제어 채널과 데이터 채널
FTP 클라이언트와 서버 사이의 연결 설정 과정을 설명한다. 왼쪽의 FTP 사용자로부터 연결 요청이 들어오면 사용자 인터페이스 모듈이 로그인 이름, 암호 등을 해석하여 명령 송수신 모듈에 전달한다. 명령 송수신 모듈은 FTP 서버와 연결을 시도하여 제어 채널을 설정한다. 이후 사용자 명령이 입력될 때마다 사용자 인터페이스를 통해 명령을 해석하고, 명령 송수신 모듈을 통해 FTP 서버에 전달된다. 사용자로부터 원격 파일을 복사하기 위한 데이터 전송 요구가 발생하면 데이터 채널을 추가로 설정하고, 이 채널을 통해 파일 내용을 송수신 한다.
원으로 표시한 모듈은 별도의 프로세스가 아니다. 또한 클라이언트와 서버는 개별 프로그램으로 작성되므로 이 둘은 독립적인 하나의 프로세스로 실행된다. 그림에서 주의할 점은 데이터 채널의 경우 연결 설정 요구가 FTP 클라이언트가 아니라 fTP 서버에서 발생한다는 점이다. 즉, FTP 클라이언트가 get이나 put 명령으로 파일의 송수신을 요청하면 FTP 서버가 해당 파일을 전송하기 위한 데이터 채널을 설정한다. 이때 FTP 클라이언트는 미리 정해진 포트에서 대기 상태로 들어가기 때문에 FTP 서버의 연결 요청을 받을 수 있다. 참고로 FTP에서 제어 채널과 데이터 채널의 연결은 다른 인터넷 응용 프로그램 처럼 소켓 기능을 이용한다.
Well-Known 포트와 관련해 FTP 서버는 클라이언트의 제어 채널 설정 요구를 받아들이기 위해 21번 포트에서 대기한다. 데이터 채널과 관련된 FTP 서버의 포트는 20번으로 고정되어있고, 클라이언트는 자신의 데이터 채널용 포트를 생성한 후에 이 포트 번호를 제어 채널을 통해 서버에 넘겨준다. FTP 서버는 자신의 20번 포트를 통해 FTP 클라이언트가 전송한 클라이언트의 포트 번호와 데이터 채널 연결을 시도한다. 데이터 채널은 파일 송수신 요구가 발생할 때마다 새로 설정되고, 해당 파일의 송수신을 완료하면 즉시 연결을 해제한다.
데이터 채널의 설정
- 사용자의 파일 송수신 명령이 입력되면 FTP 클라이언트는 데이터 채널을 위한 포트를 생성한다.
- 생성된 포트 x를 서버에 전송하려고 PORT 명령을 사용하는데, 이 과정은 제어 채널을 통해 이루어진다.
- 이후 데이터 송수신 명령이 제어 채널을 통해 전송된다.
- 이때 전송되는 명령은 크게 3가지 가능하다. FTP 클라이언트는 FTP 명령 전송 후 포트 번호 x에서 대기 상태로 들어가 FTP 서버의 연결 요청을 기다린다.
- STOR: 파일 송신 명령
- RETR: 파일 수신 명령
- LIST: 파일 목록 수신 명령
- FTP 서버는 제어 채널을 통해 수신한 포트 번호 x로 연결 설정을 시도한다.
- 연결이 설정되면 클라이언트와 서버는 데이터 채널을 사용해 파일 데이터를 송수신한다.
FTP 명령과 응답
FTP 클라이언트와 서버는 FTP 명령을 처리하기 위해 제어 채널을 사용하며, 클라이언트가 전송한 명령에 대해 서버가 응답하는 방식으로 진행된다. FTP 명령과 응답은 모두 제어 채널을 통해 전달된다. 사용자가 파일 송수신 기능을 사용하지 않으면 데이터 채널을 생성되지 않는다.
FTP 명령
FTP에서 사용하는 명령은 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 응답
다른 인터넷 응용 프로그램에서 사용하는 프로토콜처럼 FTP 응답 내용은 세자리의 응답 코드와 설명문으로 구성된다. 응답 코드의 첫 번쨰 숫자가 2인 경우는 성공을, 5인 경우는 실패를 의미한다. 첫 번째 숫자가 2나 5가 아니라면 클라이언트와 서버의 연속 동작을 지원하는데 사용된다.
두 번째, 세 번째 숫자는 부가적인 응답 정보를 제공한다.
응답 코드 | 의미 |
125 | 데이터 채널이 설정되었으며, 이어서 데이터 전송을 시작할 예정이다. |
200 | 명령 처리를 완료했다. |
230 | 사용자 로그인을 처리했다. |
250 | 요청한 파일 동작을 처리했다. |
331 | 로그인 이름을 정상적으로 처리했으므로, 암호를 처리해야 한다. |
425 | 데이터 채널의 연결이 이루어지지 않았다. |
426 | 연결을 취소하였다. |
450 | 파일 관련 처리를 완료하지 못했다. |
451 | 동작 처리를 완료하지 않았다. |
500 | 잘못된 명령이다. |
501 | 명령의 인수가 잘못되었다. |
FTP 로그인 과정
FTP 로그인은 FTP 클라이언트가 서버와 제어 채널 연결을 설정한 후에 로그인 이름과 암호를 전송하여 FTP 세션 연결을 설정하는 것이다.
클라이언트는 FTP 서버의 21번 포트와 TCP 연결 설정을 시도한다. 서버로부터 FTP 서비스를 이용할 수 있음을 의미하는 응답코드 220을 수신하면 TCP 연결이 성공한 경우이다.
이후 USER 명령을 사용해 로그인 이름을 제공하고, PASS 명령으로 로그인 암호를 전송한다. 서버는 해당 사용자에 대한 인증 절차를 통해 로그인 가능 여부를 판단한다. 부적절한 사용자는 오류로 처리되지만, 정상적인 경우는 응답 코드 230을 회신하여 로그인 절차가 성공적으로 이루어졌음을 알려준다. 성공적으로 로그인하면 FTP 세션이 설정되어 다른 FTP 명령을 사용해 파일 송수신 기능 등을 수행한다.
FTP 파일 송수신 과정
FTP의 로그인 과정이 성공적으로 이루어져 FTP 세션이 설정되면 파일 송수신 기능을 사용해 원격 파일을 복사할 수 있다.
파일을 송수신하려면 데이터 채널이 먼저 설정되어야 한다. 데이터 채널 설정은 FTP 클라이언트에서 데이터 채널용 포트를 생성하는 것으로 시작한다. 생성된 포트 번호는 PORT 명령에 의해 FTP 서버로 전달되며, 이 후 FTP 클라이언트가 필요한 파일 송수신 명령을 서버에 전송한다. RETR 명령은 서버에서 파일을 복사해 올때 사용하며, STOR 명령은 파일을 서버로 복사할 때 사용한다. 데이터 채널이 사용되는 또 다른 예는 LIST 명령으로 파일 정보를 얻어준다.
파일 송수신 명령의 전송이 완료되면 FTP 서버가 클라이언트와 데이터 채널의 연결을 시도하고, 데이터 채널이 설정되면, 파일 전송이 이루어진다. 파일 전송을 완료하면 설정된 데이터 채널의 연결은 즉시 끊기며, 제어 채널을 이용해 파일 송수신 명령에 대한 응답 코드가 클라이언트에 회신된다. 마지막 줄의 응답 코드 226이 이에 해당한다.
Reference
쉽게 배우는 데이터 통신과 컴퓨터 네트워크
https://soso-hyeon.tistory.com/114
[쉽게 배우는 데이터 통신과 네트워크] CH16. 파일 전송
01 파일 전송을 위한 사용자 환경1 FTP 로그인FTP: File Transfer Protocol (원격 시스템과의 파일 송수신 기능 지원)원격 시스템에 접속하려면 FTP 서버에 등록된 로그인 계정과 암호가 필요하다. 1.1 익명
soso-hyeon.tistory.com
'CS > Network' 카테고리의 다른 글
[Chapter 17] 암호화와 네트워크 보안 (암호화의 이해) (0) | 2025.02.19 |
---|---|
[Chapter 16] 파일 전송 (TFTP 동작 과정과 예) (0) | 2025.02.19 |
[Chapter 16] 파일 전송 (파일 전송을 위한 사용자 환경) (0) | 2025.02.19 |
[Chapter 15] 전자 메일 (POP 서비스) (0) | 2025.02.19 |
[Chapter 15] 전자 메일 (SMTP) (0) | 2025.02.19 |