✔︎ FTP (File Transfer Protocol)이란 ?
- FTP란 서버와 클라이언트 사이에서 TCP/IP를 통해 파일을 송수신하기 위해 고안된 프로토콜이다.
- 파일 전송 전용 서비스라는 특징과 인터넷을 통한 송수신을 위해 고안된 프로토콜이기 때문에 동작 방식이 단순하고 직관적이며 사용 방법이 간단하고 빠른 속도로 많은 파일을 주고 받을 수 있다.
- 빠른 파일 송수신만을 목적으로 두고 고안되었기 때문에 보안 부분에서는 상당히 취약하다.
- HTTP 프로토콜을 통해 접속되는 WWW(Word Wide Web) 방식에서 많이 사용한다.
- FTP를 사용하기 위해서는 서버가 존재해야 하며 클라이언트와 이어주는 통신 포트가 생성되어야 한다.
- 21번 포트 : 데이터 전송을 제어하기위한 신호
- 20번 포트 : 실제 데이터 전송에 사용
✔︎ FTP 동작 원리
FTP는 다른 프로토콜과는 다르게 포트(port) 번호를 기본적으로 두개 사용하도록 설계되었다.
첫번째 포트는 포트번호 21번으로 클라이언트와 서버 사이의 명령, 제어 등을 송수신하는 제어 포트이다.
두번째 포트는 포트번호 20번으로 클라이언트와 서버 사이의 직접적인 파일 송수신을 담당하는 데이터 포트이다.
FTP 서버에 접속할 때는 사용자 계정과 암호를 입력하는데 이러한 정보들은 데이터 제어 신호를 통해 주고 받는다.
그리고 실제 파일 송수신 작업은 데이터 전송(20번 포트)에서 처리된다.
FTP 클라이언트 프로그램은 여러 파일을 연속으로 송수신해야 하기 때문에 서버와의 지속적인 응답 메세지 전송을 위해 연결 상태(세션)을 유지한다.
FTP 통신은 TCP 통신을 하기 때문에, 처음 3-way handshake 과정을 거친 후 클라이언트가 명령어를 입력하면, 서버는 숫자 코드로 응답한다.
1. User PI가 Control connection을 통해 명령(command)을 보낸다.
2. command를 받은 Server PI는 그에 대해 응답(Reply)을 보내준다.
3. 명령을 받은 Server는 Data connection(전이중 통신)을 생성해 User와 연결하여 데이터 송수신을 진행한다.
4. 진행이 완료된 Data connection은 다시 제거한다.
✔︎ FTP 통신 모드
FTP는 데이터(파일)을 전송함에 있어 수동 모드(Passive Mode)와 능동 모드(Active Mode) 두가지를 지원한다.
기본 설정은 Active Mode로 설정되어 있다.
- Active Mode : 클라이언트 → 서버에게 연결할 데이터 포트를 알려주는 모드
- Passvie Mode : 서버 → 클라이언트에게 연결할 데이터 포트를 알려주는 모드
처음 연결을 시도할 때 21번 포트로 서로 신호를 주고 받고 그 후 데이터 포트를 연결할 때 Active Mode는 클라이언트가 서버에게 20번 포트로 연결해 달라고 알려주면 서버는 클라이언트의 20번 포트로 연결 하는 것이다.
하지만 이런 동작이 방화벽으로 인해 제대로 이어지지 않는 일이 발생할 때가 있는데 그 때문에 존재하는 것이 Passive Mode이다.
Passive Mode를 사용해 서버쪽에서 클라이언트에게 연결할 포트를 알려주고 연결한다.
좀 더 자세히 알아보자.
✔︎ Active Mode
클라이언트 → 서버에게 연결할 데이터 포트를 알려주는 모드
① 클라이언트에서 FTP 서버의 21번 포트로 접속을 시도하고, 사용할 두번째 포트를 서버에게 알려준다.
② 서버는 ACK로 응답한 후 서버의 20번 포트는 클라이언트가 알려준 두번째 포트로 접속을 시도한다.
③ 마지막으로 클라이언트가 ACK로 응답한다.
Active Mode의 문제점
③ 마지막으로 클라이언트가 ACK로 응답한다. 에서 TCP/IP의 특징인 클라이언트가 서버에 접속을 시도하는 것이 아닌,
서버가 클라이언트에게 접속을 시도한다는 점
클라이언트 PC에 내부적인 환경 요인(ex 방화벽)과 외부적인 환경 요인(FTP를 제대로 인지하지 못하는 공유기)으로 FTP가 접속이 제대로 되지 않거나 접속이 된다 하더라도 이후 데이터 목록을 받아오지 못하는 에러가 발생할 수 있다.
✔︎ Passive Mode
서버 → 클라이언트에게 연결할 데이터 포트를 알려주는 모드
서버 → 클라이언트로 접속을 시도하는 '비정상적 Active Mode'에 대한 문제점을 해결하기 위해 Passive Mode가 등장했다.
① 클라이언트에서 FTP 서버의 21번 포트로 접속을 시도하고
② 서버에서는 서버가 사용할 두번째 포트를 알려준다.
③ 클라이언트는 다른 포트를 열어 서버가 알려준 이 포트로 접속을 시도한다.
④ 서버는 ACK로 응답한다.
📌 Passive Mode에서는 두번째 data 포트로써 Active Mode에서 사용했던 20번 포트가 아닌 1024~65535 사이의 임의의 비특권 포트를 사용한다.
✔︎ SFTP
SFTP란 Secure FTP 즉, 보안이 강화된 FTP이다. Secure Shell을 통해 파일을 전송하는 프로토콜이다.
리눅스를 설치하게 되면 SSH는 기본적으로 설치가 되고 보통 SSH는 터미널로 리눅스에 원격으로 접속하는 프로토콜인데 SSH를 통해 FTPF를 구현한 것이다.
✔︎ TFTP
TFTP란 Trival FTP를 의미하며 FTP나 SFTP와 다르게 UDP를 사용한다.
UDP는 전송 중 데이터의 유실 가능성이 높지만 사용자에게 디렉토리를 보여주지 않을 때 사용한다.
FTP | TFTP |
TCP 기반 | UDP 기반 |
20, 21번 Port 사용 | 69번 사용 |
로그인 절차가 있다. | 로그인 절차가 없다. |
파일 디렉토리 볼 수 있다.(DIR) | 파일 디렉토리를 볼 수 없다. |
✔︎ FTPS
FTPS는 공개키 암호화 방식을 이용해 통신 라인을 거쳐 21, 20번 포트를 안전하게 암호화하는 방식이다. (TLS/SSL)
공개키 암호화 방식은 결국 서버 공개키로 암호화하면 서버가 가진 비공개 개인키로만 풀 수 있다 라는 전제하에 공개키가 노출되어도 문제가 없으므로 할 수 있는 암호화 방식이다.
FTPS 장점
- SFTP와 다르게 사람이 통신을 이해하고 읽을 수 있다.
- 서버 간 파일 전송 실행을 허용한다.
- SSL/TLS는 강력한 인증 메커니즘 역할을 하는 X.509 인증서 기능과 함께 제공된다.
- 여러 인터넷 통신 인프라에 FTP 및 SSL 지원이 내장되어 있다.
FTPS 단점
- 프로토콜에 디렉토리 목록에 대한 표준화된 형식이 포함되지 않는다.
- FTPS는 보조 데이터 채널의 사용을 요구하므로 방화벽 뒤에서 사용이 복잡해진다.
- 프로토콜에는 인코딩 또는 파일 이름 문자 집합에 대한 지침이 없다.
- 모든 FTP 서버에서 SSL/TLS를 사용할 수 있는 것이 아니다.
- 프로토콜은 디렉토리 또는 파일 속성을 보호하고 수정하는 표준 방법을 정의하지 않는다.
🧷참고
'CS > 네트워킹' 카테고리의 다른 글
[네트워킹] SSH (Secure Shell Protocol) (1) | 2022.03.22 |
---|---|
[네트워킹] ICMP (Internet Control Message Protocol) (0) | 2022.03.22 |
[네트워킹] Proxy (프록시)란 ? (0) | 2022.03.18 |
[네트워킹] NAT (Network Address Translation) (0) | 2022.03.10 |
[네트워킹] DNS(Domain Name System) (0) | 2022.03.08 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!