FTP란?
FTP는 파일을 전송하는 통신 규약인 File Transfer Protocol의 약자인데요.
FTP 서버에 파일을 업로드, 다운로드할 수 있도록 해주는 프로토콜이며, 이는 FTP 서버와 FTP 클라이언트 간의 통신에 사용됩니다.
FTP 파일 전송에는 두 개의 port가 사용되는데요. 하나는 사용자 인증 및 명령어 입력을 위한 제어 채널(Command Port)이고 다른 하나는 실제 파일 전송을 위한 데이터 채널(Data Port)입니다.
연결 방식에는 Active 모드와 Passive 모드, 두 가지 방식이 있습니다. 기본적인 동작 방식은 Active Mode이며, Active 모드의 단점을 해결하기 위해 나온 것이 바로 Passive 모드인데요. 아래 이어지는 내용을 통해서 각 연결 방식의 차이점과 장단점을 살펴보겠습니다.
Active Mode 연결과정
1. 클라이언트는 서버의 21번 포트로 연결을 요청하는데요. 이때 클라이언트는 자신의 Data 전송 포트번호인 6121을 패킷에 포함하여 요청을 전송합니다.
2. 서버는 클라이언트의 요청에 대한 응답을 보냅니다.
3. 서버의 Data 포트(20 port)는 클라이언트가 알려준 Data 포트(6121 port)로 연결을 요청합니다.
4. 클라이언트가 서버의 요청에 대한 응답을 보내면서 데이터 채널의 연결까지 완료됩니다.
Active Mode
위 연결과정을 통해 알 수 있는 것처럼 Active 모드는 '서버가 클라이언트에 접속하는 방식'으로 동작하는데요.
대부분의 경우 클라이언트 앞에는 방화벽 또는 방화벽과 같은 기능을 하는 NAT가 존재하기 때문에 클라이언트에서 해당 포트를 열어주거나 포트 포워딩(NAT)을 해주지 않으면 FTP 접속이 정상적으로 이루어지지 않는 상황이 발생하는데 이런 문제점을 개선하기 위한 방법이 아래 이어지는 Passsive 모드입니다.
(또는 접속은 되지만 이후 데이터를 받아오지 못하는 상황이 발생)
/*
일반적으로 Active 모드에서는 Server 쪽의 제어 채널(인증 및 명령어 입력) 포트로 :21번을 사용하고, 데이터 채널(실제 파일 전송) 포트로 :20번을 사용하는데요.
해당 포트가 많이 사용되기는 하지만 무조건 해당 포트를 사용해야 하는 것은 아니며, FTP 서버 설정을 통해 변경이 가능합니다.
예시에 있는 Client의 포트 번호 6120, 6121 역시 제가 설정한 임의의 포트로 ">1023(1024 이상)"인 포트 중에서 사용할 포트를 설정할 수 있습니다.
*/
Passive Mode 연결과정
1. 클라이언트는 서버의 21번 포트에 Passive Mode로 연결할 것을 요청합니다.
2. 서버는 클라이언트의 요청에 대한 응답을 보내는데, 이때 서버의 Data 전송 포트번호가 1025라는 것을 함께 알려줍니다.
(Passive 모드에서는 Active 모드에서 사용했던 Data 포트인 20번을 사용하지 않습니다.)
3. 클라이언트의 Data 전송 포트인 6121에서 서버의 Data 전송 포트인 1025 포트로 데이터 채널 연결을 요청합니다.
4. 서버가 클라이언트의 요청에 대한 응답을 보내면서 데이터 채널이 연결이 완료됩니다.
Passive Mode
Passive 모드는 Active 모드와는 반대로 '클라이언트가 서버에 접속하는 방식'으로 동작하는데요.
Passive 모드에서는 데이터 채널의 포트 번호를 지정하지 않은 경우 "1023<x<65536 (1024에서 65535 사이)" 중에서 사용 가능한 임의의 포트가 자동으로 사용됩니다.
이때 역시 서버 측의 데이터 채널 포트가 막혀있는 경우 클라이언트에서의 연결이 불가능한데요. 1024에서 65535 사이의 모든 포트 번호에 대해서 접근 요청을 허용하기에는 위험 부담이 크기 때문에, 서버 측에서 데이터 채널의 포트 범위를 지정하여 해당 범위만 접근 요청을 허가해주는 방법으로 포트 접근에 대한 문제를 해결하고 있습니다.
< 참고 자료 >
https://sata.kr/entry/5BFTP5D20FTPEC9D9820Active20ModeEC998020Passive20Mode20ECB0A8EC9DB4ECA090
< 함께 보면 좋은 자료 >
'Programming > Web' 카테고리의 다른 글
Base64와 Base64UrlSafe 차이점 (Illegal base64 character 발생 이유) (0) | 2022.12.17 |
---|---|
빅 엔디언과 리틀 엔디언(Big Endian & Little Endian) (0) | 2022.11.05 |
루프백 ip란? (127.0.0.1 / localhost) (0) | 2022.09.19 |
BCrypt 동작원리 파헤치기(BCryptPasswordEncoder) (0) | 2022.09.04 |
GCP 인스턴스 SSH 접속하는 방법 (0) | 2022.07.29 |