[CS] FTP란?

FTP 구성

FTP란?

https://peemangit.tistory.com/66

File Transfer Protocol, 파일 전송만을 위한 인터넷 연결 프로토콜

img

- TCP/IP 표준 기능

- 호스트 간 두 개의 연결 설정 ➡ 다른 클라이언트 서버 응용과 다른점

- 2개의 Port 사용(프로토콜 TCP 20, 21)

  제어 연결 데이터 연결
Port 21 20
정의 클라이언트에서 서버로 명령과 서버의 응답을 위한 연결 파일이 전송될 때 생성되는 연결
특징 - 명령 또는 응답 형태의 제어정보 전송 - 전체 FTP 세션 동안 연결 상태 유지 - 파일 전송 때마다 설정 - 전송 완료 시 폐쇄

####

FTP 2가지 접속 방식

1. Active 모드

클라이언트가 서버에게 연결할 데이터 포트를 알려주는 모드, 서버가 클라이언트에 접속

클라이언트에서 서버측 21번 포트로 접속하여 제어채널을 생성 ➡ 데이터는 서버에서 클라이언트로 접속하여 데이터를 보내는 방식

img

작동 방식

1️⃣ 클라이언트의 서버 21번 포트로 접속 후 클라이언트가 사용할 두 번째 포트를 서버에 알려줌

2️⃣ 서버가 ACK로 응답

3️⃣ 서버의 20번 포트는 클라이언트가 알려준 두 번째 포트로 접속 시도

4️⃣ 클라이언트가 ACK로 응답

문제점

- 서버가 클라이언트에게 접속을 시도 할 때(3번) 방화벽이나 공유기 문제 발생 ▶ FTP 접속은 되지만 이후 데이터 목록을 받아오지 못해 에러 발생

2. Passive 모드

서버가 클라이언트에게 연결할 데이터 포트를 알려주는 모드

클라이언트에서 서버측 21번 포트로 접속하여 제어채널을 생성하고 데이터 채널도 클라이언트에서 서버로 접속하여 데이터를 보내는 방식

img

1️⃣ 클라이언트가 Command 포트로 접속 시도 ➡ Passive Mode요청

2️⃣ 서버에서 서버가 사용할 두 번째 포트를 알려줌 ➡ 1024 이후의 임의의 비 특권 포트 사용

3️⃣ 클라이언트는 다른 포트를 열어 서버가 알려준 포트로 접속 시도

4️⃣ 서버에서 ACK 응답

문제점

- 서버의 비 특권 포트(1024 ~ 65535)를 방화벽에서 모두 열어 두어야 하는 문제점 발생

- passive mode로 접속 시 사용할 수 있는 포트 제한 설정 기능 지원