FTP서버에 대해서 알아야할 사항이 있다.
첫번째로 FTP는 두개의 PORT를 사용한다는 것이다. 하나는 COMMAND PORT이며, 다른 하나는 DATA PORT이다. 두번째로 FTP는 TCP를 기반으로 만들어져 있다. UDP를 사용하지 않는다.
위의 두 가지 사항을 토대로 두가지 모드의 차이점을 설명 해보도록 하겠다. 차이점 중 눈여겨 볼 사항으로는 데이터전송 포트부분과 전송방향에 대한 부분이다.
ACTIVE mode
가장 많이 알려진 21번 port를 FTP Server port로 알고 있다. 이는 Command를 위한 port이고 실제 Data를 전송하기 위해서는 Data전송을 위한 port를 사용 한다.
보통 Data전송 port는 20번 port를 사용한다. 클라이언트는 1024번 이상의 빈 port를 골라서 Command port로 사용하고 해당포트에 +1을 더한 port를 Data port로 사용한다.
세션을 맺는 과정
- 클라이언트가 1025번 CMD port를 이용하여 FTP서버에 자신의 CMD port에 +1를 하여 1026번 Data port도 같이 보낸다.
- 서버 ftp의 21번 포트에서 해당 클라이언트의 요청을 수락하고 서버의 Data port에서 클라이언트의 Data port로 접속 및 응답을 한다.
- 클라이언트는 서버측의 응답을 받았다는 ACK를 보냄으로써 세션이 맺어진다.
- 클라이언트에서 데이터를 요청하면 서버측에서 클라이언트로 해당 데이터를 넣어준다.
PASSIVE mode
passive mode 일때 서버의 CMD port는 21번이며 Data port는 1024번 이상의 사용하지 않는 port 중 하나를 사용한다. 클라이언트는 1024번 이상의 빈 port를 골라서 CMD port로 사용하고 해당포트에 +1을 더한 port를 data port로 사용된다.
세션을 맺는 과정
- 클라이언트는 CMD port 1025를 이용해 서버의 CMD port에 접속을 하여 임의의 Data port를 할당해 달라고 요청한다.
- 서버는 1024번 이상의 포트중에 남는 포트를 임의로 택해 클라이언트측에 보낸다.
- 클라이언트는 서버측으로부터 받은 포트에 자신의 CMD port에 +1를 더한 값의 포트로 세션을 맺는다.
- 서버의 Data port는 클라이언트의 세션 요청에 ACK를 보냄으로써 세션이 완료된다. 클라이언트가 서버에서 데이터를 가져옵니다.
TIP
위의 내용을 보시면
Active mode의 경우 서버가 -> 클라이언트에 데이터를 넣어주는 방식.
Passive mode의 경우 클라이언트가 -> 서버에서 데이터를 가져오게 된다.
간혹 Active mode로 전송이 이루어지지 않으면 Passive로 하라고 하는데 Active mode의 경우는 클라이언트에 서버가 접속을 맺는 방식이기 때문이다.
[서버] –> [방화벽(필터링:대부분 80만 허용)] –> [클라이언트]
클라이언트 앞에 방화벽이 있다면 접속이 되지 않을 것이다. 하지만 Passive mode의 경우는 클라이언트가 서버에 접속을 하니 클라이언트의 방화벽과는 무관하게 접속이 잘 이뤄지게 된다.
간혹 FTP 클라이언트 프로그램으로 ftp에 접속하면 잘 되는데, 브라우저로 FTP서버에 접속하면 잘되지 않는 경우가 있다. 이는 브라우저의 default 방식이 Passive mode 방식이고, 클라이언트 프로그램의 default 방식이 Active mode 방식이기 때문이다.
서버측 입장에서는 Passive mode를 좋아하지 않는다.
실제로도 Passive mode를 꺼두는 경우가 많은데 해킹의 위협이 많이 있기 때문 이다. 서버에서 클라이언트로 접속할때는 위험이 적지만 클라이언트가 서버로 직접 접속할 때의 위험도는 상당히 커지기 때문이다.