-
FTP PORT(능동) 모드와 PASV(수동) 모드case Computer : 2009. 9. 2. 18:19
기본적으로 FTP서버에 대해서 알아야할 사항이 있습니다.
1. FTP는 두개의 PORT를 사용한다는 것입니다. 하나는 COMMAND PORT이며, 다른 하나는 DATA PORT입니다.
2. FTP는 TCP를 기반으로 만들어져 있습니다. UDP를 사용하지 않습니다.
위의 두 가지 사항을 토대로 두가지 모드의 차이점을 설명하겠습니다.
차이점 중 눈여겨 볼 사항으로는 데이터전송 포트부분과 전송방향에 대한 부분입니다.
1. ACTIVE mode
전통적으로 21번 port를 server ftp port로 알고 있습니다.
이는 command를 위한 port이고
실제 data를 전송하기 위해서는 data전송을 위한 port를 사용합니다.
보통 data전송 port는 20번 port를 사용합니다.
클라이언트는 1024번 이상의 빈 port를 골라서 command port로 사용하고
해당포트에 +1을 더한 port를 data port로 사용합니다.
예를 들어)
1. 클라이언트가 서버 ftp에 접속하려고 1080번 port를 이용하여 서버 ftp에
접속 요청을 날립니다. 이때 +1더한 1081번 port의 정보를 같이 서버에 보냅니다.
2. 서버 ftp의 21번 포트에서 해당 클라이언트의 요청을 수락하고 21번 command port는
1080번과 20번 data port는 1081번과 connection을 맺습니다.
3. 클라이언트에서 데이터를 요청하면
서버측에서 클라이언트로 해당 데이터를 넣어줍니다.
2. PASSIVE mode
passive mode 일때 서버의 command port는 21번이며
data port는 1024번 이상의 사용하지 않는 port 중 하나를 사용합니다.
클라이언트는 1024번 이상의 빈 port를 골라서 command port로 사용하고
해당포트에 +1을 더한 port를 data port로 사용합니다.
예를 들어)
1. 클라이언트가 서버 ftp에 접속하려고 1080번 port를 이용하여 서버 ftp에
접속 요청을 날립니다. 이때 +1더한 1081번 port의 정보를 같이 서버에 보냅니다.
2. 서버 ftp의 21번 port에서 해당 클라이언트의 요청을 수락하고 21번 command port는
1080번과 connection을 이루며
서버측의 1024이상의 빈 port와 클라이언트의 1081번 port와 connection을 맺습니다.
3. 클라이언트에서 데이터를 요청하고
클라이언트가 서버에서 데이터를 가져옵니다.
------------------------------------------------------------------------------
위의 내용을 보시면 active mode의 경우
서버가 -> 클라이언트에 데이터를 넣어주고
passive mode의 경우
클라이언트가 -> 서버에서 데이터를 가져옵니다.
간혹 active mode로 전송이 이루어지지 않으면 passive로 하라고 하는데
active mode의 경우는 서버가 클라이언트에 접속을 하는 방식이니까
[서버] --> [클라이언트쪽 방화벽(필터링:대부분 80port 만 허용)] --> [클라이언트]
클라이언트 앞에 방화벽이 있다면 접속이 되지 않을 것입니다.
하지만 passive mode의 경우는 클라이언트가 서버에 접속을 하니
클라이언트의 방화벽과는 무관하게 접속이 잘이루어 집니다.
간혹 ftp 클라이언트 프로그램으로 ftp에 접속하면 잘 되는데 브라우저로 ftp서버에 접속하면 잘되지 않는 경우가 있습니다.
이는 브라우저의 default 방식이 passive mode 방식이고 클라이언트 프로그램의 default 방식이 active mode 방식이기 때문입니다.
서버측 입장에서는 passive mode를 좋아하지 않습니다.
실제로도 passive mode를 꺼두는 경우가 많은데 해킹의 위협이 많이 있기 때문입니다.
서버에서 클라이언트로 접속할때는 위험이 적지만 클라이언트가 서버로 직접 접속할 때의 위험도는 상당히 커지기 때문입니다.
첨부자료
:: FTP 데이터 연결 설정 절차
1) FTP 데이터 연결 설정을 위해 먼저 클라이언트 데이터 전송 프로세스가 소동 개방 작업을 수행한다. 수동 개방 작업은 데이터 전송 프로세스를 위한 임시 포트설정, 자신의 호스트 IP 주소와 임시 포트 번호를 소켓 주소로 가지는 클라이언트 소켓 생성, 그리고 생성된 클라이언트 소켓으로의 메시지 도착에 대한 관찰 동작을 포함한다.
2) 클라이언트 데이터 전송 프로세스의 수동 개방 작업이 완료되면 클라이언트 제어 프로세스는 미리 설정된 제어 연결을 통해 클라이언트 데이터 전송 프로세스를 위한 포트 번호를 서버 제어 프로세스에게 전달한다. 포트 번호 전달을 위한 명령은 PORT이다.
3) 서버 제어 프로세스는 설정될 데이터 연결을 통한 파일 전송을 담당할 자식 서버 데이터 전송 프로세스를 생성하고, 클라이언트 데이터 전송 프로세스의 소켓 주소를 전달한다. 생성된 자식 서버 데이터 전송 프로세스는 자신의 호스트 IP 주소와 영구 포트 번호 20번을 수켓 주소로 가지는 서버 데이터 연결 소켓을 생성하고, 생성된 서버 연결 소켓과 클라이언트 데이터 소켓간 TCP 연결 설정을 요청하는 능동 개방 작업을 수행한다.
4) 클라이언트 데이터 전송 프로세스가 클라이언트 데이터 소켓으로부터 TCP 연결 설정 요청 메시지를 수신하면 데이터 연결 설정이 완료된다.
첨부자료 출처:
인터넷 중심의 데이터 통신과 컴퓨터 네트워크 박승철 저.
----------------------------------------------------------------------------------------------------
위에 정보가 맞는지는 모르겠다...
내가 이해를 잘못한건지는 모르겠지만...반응형'case Computer :' 카테고리의 다른 글
[Unix/Linux] scp / expect 이용한 파일 전송 스크립트 (2) 2009.09.10 Mail Header (0) 2009.09.05 Microsoft IIS 5.0 FTP Server Remote Stack Overflow Exploit (win2k sp4) (0) 2009.09.02 fireCAT 1.5 (0) 2009.09.02 INODE (0) 2009.08.30