FTP(File Transfer Protocol)란
FTP는 하나의 호스트에서 다른 호스트로 파일을 복사 하기위해 TCP/IP에 의해 제공되는 표준 기능이다.
FTP 호스트 간에 두개의 연결을 설정한다는 점에서 다른 클라이언트 서버 응용들과 다르다. 이러한 제어와 데이터 전송의 분리는 FTP를 좀 더 효율적으로 사용할 수 있다.
클라이언트와 서버가 Control Session을 맺고 dir, get, put
등의 명령을 수행하면 실제 데이터를 전송할 Data Session을 생성한다.
이 때 Active Mode
냐 Passive Mode
냐에 따라 통신 구조가 달라진다.
Active 모드
- FTP Client에서는 FTP Server의 21번 포트로 인증 요청을 한다. 그리고 Client 자신의 DATA 전송 포트번호(2223)를 패킷에 포함하여 서버에 전송한다.
- FTP Server에서는 FTP Client에게 OK 응답을 보낸다.
- FTP Server에서 생성한 20번 포트에서 -> Client의 2223포트로 데이터 채널 연결을 요청한다.
- FTP Client는 Server에게 OK 응답을 보내고, 이로서 데이터 채널 연결까지 완료한다.
- Client PC에서 사용되는 포트번호 222, 2223은 PC에서 생성된 포트번호입니다.
- Client에서 생성되는 포트번호 “1024이상” 중에서 사용 가능한 임의의 포트로 사용됩니다.
- FTP의 21/tcp, 20/tcp는 사용자가 마음대로 설정 가능합니다.
Passive Mode
- FTP Client에서는 FTP Server의 21 포트로 인증 요청을 한다. 그리고 Client 자신이 연결하려는 서비스가 Passive Mode로 연결 할 것임을 알린다.
- FTP Server에서는 FTP Client에게 OK 응답을 보낸다. 그리고 FTP Server는 데이터 채널 포트번호가 1025라는 것을 Client에게 알려준다.
- FTP Client에서 생성한 2223번 포트에서 -> Server의 1025포트로 데이터채널 연결을 요청한다.
- FTP SErver는 Client에게 OK응답을 보내고, 이로서 데이터 채널 연결까지 완료한다.
- Client PC에서 사용되는 포트번호 222, 2223은 PC에서 생성된 포트번호입니다.
- Client에서 생성되는 포트번호 “1024이상” 중에서 사용 가능한 임의의 포트로 사용됩니다.
- FTP의 21/tcp, 20/tcp는 사용자가 마음대로 설정 가능합니다.
- Passive Mode에서는 데이터 채널 포트번호를 특별하게 지정하지 않을 경우, “1023 < x < 65536” 중에서 사용가능한 임의의 포트로 자동 사용된다.
방화벽 설정 주의
Active Mode
Active Mode에서는 데이터 채널 요청을 Server -> Client
방향으로 접속 한다.
그래서 Client PC에서 20번 포트가 차단되어 있을 경우 데이터 채널 연결이 불가능하다.
따라서 Server에서는 20번 포트가 OUTPUT 방향으로 허용
, Client에서는 20번 포트가 INPUT 방향으로 허용
되어야 한다.
Passive Mode
Passive Mode는 데이터 채널 요청을 Client -> Server
방향으로 접속 한다.
그래서 Server에서 데이터채널 포트가 차단 되어있을 경우에는 데이터 채널 연결이 불가능하다.
별도로 지정하지 않을 경우 Server에서 1023 < x < 65535
포트들을 INPUT방향으로 허용되어야 한다.
Client PC에서는 1024~65534 범위를 모두 OUTPUT 방향으로 허용되어야 한다.
언어별 Default 모드
- C# : Passive Mode
- Java :
Active Mode
- Python : Passive Mode