[지식창고]/네트워크

[컴퓨터 네트워크] 2.3 FTP

개발새발주발 2023. 3. 28. 12:08
728x90

FTP(File transfer protocol)은 TCP/IP, HTTP 다음으로 일반인에게 잘 알려진 네트워크 프로토콜이 아닐까 .. 라고 하시는데

전공자지만 몰랐다 (진짜 열심히 공부해야겠다 ~ )

 

전공에서 배우는 FTP에 들어가기 앞서 간략하게 소개하고 넘어가보도록 하겠다! 

 

그럼 FTP라 함은 무슨 프로토콜이냐 ~ 하니 약어 뜻에 다 나와있다. 바로 파일 전송을 위해 만든 파일 전송 프로토콜 ! 

파일 전송만 할 수 있는 것은 아니지만 FTP 프로토콜의 목적이 파일 전송이기에 아주 단순하게 동작하는 프로토콜이다 

 

FTP 프로토콜 역시 TCP프로토콜 위에서 동작하기 때문에 TCP/IP프로토콜이 필요하다 

FTP의 구성 및 개략도

FTP는 두개의 연결을 사용한다. 

- 제어 데이터(Control Data)를 주고 받기 위해 사용하는 연결

- 파일을 주고받기 위해 사용하는 연결 

 

**제어 데이터 : 최초 FTP 클라이언트가 FTP서버로 연결할 때 사용자 계정이나 암호 등을 주고 받거나, 사용자가 입력하는 명령과 그에 대한 결과를 주고 받는 등에 사용하는 데이터 

 

그럼 FTP로 파일 전송은 어떻게 ? ! 

→ 파일을 전송하기 위해 우선 수신측 호스트에게 나 파일 전송할게 ~ (이때 전달되는 메세지는 제어 연결을 통해 전달된다)라는 메세지를 보낸다.

수신측 호스트는 새로운 연결을 만들 준비를 하고 송신측 호스트에게 나 준비 다했어 ~~ 보내줘 ~ 라고 알려준다. 

송신측 호스트는 파일을 보는 데 사용할 연결을 수신측 호스트와 맺게되고, 연결이 형성되면 바로 파일을 보낸다. 

수신측 호스트는 파일을 받는 동안 계속해서 제어 메세지 연결로 받은 패킷에 대한 응답 메세지를 송신측 호스트로 보내준다. 

*FTP는 대량의 파일 전송을 목적으로 만들어진 프로토콜이기에 패킷 하나하나에 대한 응답이 아닌 한참을 받고난 뒤 응답 보냄

→ 파일 전송이 마치면 제어 연결로 야 나 전송 다했어 !! 라고 전송을 마쳤다는 것을 수신측 호스트에게 알려주며 수신측 호스트는 파일 전송을 위한 연결을 끊는 것으로 한 번의 파일 전송을 끝냄 

* 이 때도 제어 연결은 끊기지 않은 상태 = 계속해서 파일을 보낼 수 있다 ! 

 

이제 간단한 설명은 끝났다. 그대들은 이제 우리들의 최 교수님과 함께한 수업에 대해서 배워보도록 한다. 


1. FTP 정의 : File Transfer Protocol 

- FTP를 통해 원격 호스트에게 파일을 전송하거나 받아올 수 있음 

- 클라이언트/ 서버 모델 

  ** 클라이언트 : 전송을 시작하는 side 

  ** 서버 : 원격 호스트 

- FTP: RFC 959 → FTP는 RFC 959에 정의되어 있음 

- FTP server : port 21 → FTP클라이언트를 사용하여 FTP서버에 연결하는데 이때 일반적을 21번 포트를 사용함 

 

 

2. FTP 역할 : separate control, data connections 

①클라이언트는 TCP프로토콜을 사용하여 21번 포트를 통해 FTP서버에 접속한다. 
이 때, 클라이언트는 제어 연결을 통해 서버에 인증을 한다 ! 


** 제어 연결 : 클라이언트와 서버 간의 통신을 위한 연결 

 

② 클라이언트는 제어 연결을 통해 원격 디렉토리를 탐색하고, 명령을 서버로 전송한다. 

③ 파일 전송 명령을 받으면, 서버는 클라이언트에게 파일 전송을 위한 별도의 2차 TCP 데이터 연결(Data Connection)을 생성한다. 

④ 한번의 파일 전송이 완료되고 나면 서버는 데이터 연결을 종료한다. 

⑤ FTP 서버는 파일전송 명령을 받으면 다른 파일을 전송하기 위해 새로운TCP데이터 연결을 연다

⑥ Control connection (제어 연결) : 'out of band' 

* 제어 연결이 파일 전송과 별개로 처리되기 때문에 out of band라고 표현 

⑦FTP 서버: state ! → 현재 디렉토리와 인증 정보 등을 유지함 

 

 

3. FTP commands(명령어), responses

명령어 → ASCII로 보냄 ! 

수신 코드 → 상태 코드와 phrase

 

 

4. FTP : Active Mode vs Passive Mode 

 

- Active Mode : 

클라이언트가 서버로 데이터 연결을 설정한다. 클라이언트는 PORT명령을 사용하여 데이터 전송을 위한 임시 포트를 생성하고 이 포트 정보를 서버로 보낸다. 서버는 클라이언트가 보낸 포트로 데이터 전송을 위한 연결을 생성함 

 

Active Mode는 방화벽 뒤에 있는 클라이언트에서는 문제가 발생할 수 있음! → 클라이언트가 임시 포트를 열어 서버에게 포트 정보를 보내기 때문 ㅜㅜ ~ 

** 방화벽이 임시 포트를 차단하거나 NAT(Network Address Translation)을 사용하는 경우 문제가 발생할 수 있다. 

 

 

 

 

 

 

- Passive Mode :

서버가 클라이언트로 데이터 연결을 설정한다. 클라이언트는 PASV 명령을 사용하여 서버로부터 데이터 포트 정보를 받는다. 서버는 클라이언트에게 데이터 포트 정보를 전송하고, 클라이언트는 해당 포트로 데이터 전송을 위한 연결을 생성한다.

 

1. PASV(Passive Mode):

서버는 PASV명령을 사용하여 클라이언트에게 사용 가능한 데이터 포트를 전달한다. 클라이언트는 서버가 전달한 포트를 사용하여 데이터 연결을 생성한다 ! PASV명령은 서버에서 IP주소와 포트를 전달한다. 

 

2. EPSV(Extended Passive Mode): 

EPSV는 FTP Extended Passive Mode를 나타낸다. 서버는 EPSV명령을 사용하여 클라이언트에게 사용 가능한 데이터 포트 정보를 전달한다. 

 

 

 

 

PASV와 EPSV모두 Passive mode에서 사용되며 클라이언트가 데이터 포트 정보를 받아 데이터 연결을 생성하는 방식은 동일하다. 

 

그 러 나 ! EPSV 명령은 IPv6와 같은 다양한 프로토콜에서 사용할 수 있기에 IPv6와 같은 다양한 프로토콜을 지원하는 경우, EPSV를 사용하는 것이 좋다.