답변:
FTP는 FTP를 실행할 수있는 두 가지 모드입니다.
백그라운드에서 FTP는 실제로 클라이언트와 서버 사이에 명령 및 데이터 채널이라는 두 개의 채널을 사용하며 실제로는 별도의 TCP 연결입니다.
명령 채널은 명령 및 응답을위한 것이고 데이터 채널은 실제로 파일을 전송하기위한 것입니다.
이렇게 명령 정보와 데이터를 별도의 채널로 분리하면 현재 데이터 전송이 완료 될 때까지 기다릴 필요없이 서버로 명령을 보낼 수 있습니다. RFC에 따라 종료, 현재 전송 중단 및 상태 가져 오기와 같은 명령의 하위 집합에 대해서만이 명령이 의무화됩니다.
에서 액티브 모드, 클라이언트는 명령 채널을 설정하지만, 서버는 데이터 채널을 확립 할 책임이있다. 예를 들어, 클라이언트 시스템이 방화벽으로 보호되고 외부 당사자의 무단 세션 요청을 허용하지 않는 경우 실제로 문제가 될 수 있습니다.
에서 수동 모드, 클라이언트는 설정 두 채널을. 우리는 이미 활성 모드에서 명령 채널을 설정하고 여기에서도 동일하게 작동한다는 것을 알고 있습니다.
그러나 그런 다음 클라이언트에 다시 연결을 시도하지 않고 서버 ( 명령 채널) 에서 서버의 재량에 따라 포트에서 청취 를 시작하도록 요청합니다 .
이 과정에서 서버는 수신 대기하도록 선택한 포트 번호도 클라이언트에 반환하므로 클라이언트는 연결 방법을 알 수 있습니다.
클라이언트가이를 알게되면 데이터 채널을 성공적으로 생성하고 계속 진행할 수 있습니다.
자세한 내용은 RFC에서 확인할 수 있습니다 : https://www.ietf.org/rfc/rfc959.txt
나는 최근에 내 직장 에서이 질문에 부딪 치므로 여기에 더 많은 것을 말해야한다고 생각합니다. 이미지를 사용하여 FTP가 이전 답변의 추가 소스로 작동하는 방법을 설명합니다.
활성 모드 :
패시브 모드 :
활성 모드 구성에서 서버는 임의의 클라이언트 측 포트에 연결을 시도합니다. 따라서 해당 포트는 사전 정의 된 포트 중 하나가 아닐 수 있습니다. 결과적으로 방화벽에 의해 연결 시도가 차단되고 연결이 설정되지 않습니다.
클라이언트가 연결을 시작하는 것이기 때문에 수동 구성에는이 문제가 없습니다. 물론 서버 측에도 방화벽이있을 수 있습니다. 그러나 서버는 클라이언트에 비해 더 많은 수의 연결 요청을 수신해야하므로 서버 관리자가 상황에 적응하고 수동 모드 구성을 만족시키기 위해 포트 선택을 여는 것이 논리적 일뿐입니다.
따라서 수동 모드 FTP를 지원하도록 서버를 구성하는 것이 가장 좋습니다. 그러나 수동 모드는 클라이언트가 임의의 서버 포트에 연결되어 있기 때문에 시스템이 공격에 취약 해집니다. 따라서이 모드를 지원하려면 서버에서 여러 포트를 사용할 수 있어야 할뿐만 아니라 방화벽에서 모든 포트에 대한 연결을 통과해야합니다!
위험을 줄이려면 서버에서 포트 범위를 지정한 다음 방화벽에서 해당 포트 범위 만 허용하는 것이 좋습니다.
자세한 내용은 공식 문서 를 참조하십시오 .
내 기사 FTP 연결 모드 의 수정 된 버전 (활성 및 수동) :
FTP 연결 모드 (활성 또는 수동)는 데이터 연결 설정 방법을 결정합니다. 두 경우 모두 클라이언트는 FTP 서버 명령 포트 21에 대한 TCP 제어 연결을 만듭니다. 이는 다른 파일 전송 프로토콜 (SFTP, SCP, WebDAV) 또는 다른 TCP 클라이언트 응용 프로그램 (예 : 웹 브라우저)과 마찬가지로 표준 발신 연결입니다. ). 따라서 일반적으로 제어 연결을 열 때 문제가 없습니다.
FTP 프로토콜이 다른 파일 전송 프로토콜에 비해 더 복잡한 경우 파일 전송입니다. 다른 프로토콜은 세션 제어 및 파일 (데이터) 전송에 동일한 연결을 사용하지만 FTP 프로토콜은 파일 전송 및 디렉토리 목록에 별도의 연결을 사용합니다.
에서 활성 모드에서, 클라이언트는 서버로부터 수신 된 데이터 연결을위한 임의의 포트에서 수신 시작 (클라이언트는 FTP 송신 명령 PORT
이 수신 된 포트에 서버를 알리는 참조). 요즘 클라이언트는 방화벽 (예 : 내장 Windows 방화벽) 또는 NAT 라우터 (예 : ADSL 모뎀) 뒤에있어 들어오는 TCP 연결을 수락 할 수 없습니다.
이러한 이유로 수동 모드가 도입되었으며 현재 대부분 사용됩니다. 수동 모드를 사용하는 것이 가장 복잡한 구성은 경험이없는 사용자가 클라이언트 쪽에서 개별적으로 수행하는 것이 아니라 숙련 된 관리자가 서버 쪽에서 한 번만 수행하기 때문에 바람직합니다.
에서 수동 모드에서, 클라이언트는 전송하도록 제어 연결을 사용 PASV
하여 서버에 명령하고, 클라이언트가 그 서버의 IP 주소와 서버와의 데이터 연결을 열기를 사용하는 서버에서 서버의 IP 주소와 서버 포트 번호를 수신 포트 번호가 수신되었습니다.
으로 수동 모드, 구성 부담의 대부분은 서버 측에 있습니다. 서버 관리자는 아래 설명에 따라 서버를 설정해야합니다.
FTP 서버 쪽의 방화벽과 NAT는 FTP 포트 21에서 들어오는 연결을 허용 / 라우팅 할뿐만 아니라 들어오는 데이터 연결을위한 포트 범위를 구성해야합니다. 일반적으로 FTP 서버 소프트웨어에는 서버가 사용할 포트 범위를 설정하는 구성 옵션이 있습니다. 그리고 방화벽 / NAT에서 동일한 범위를 열거 나 라우팅해야합니다.
FTP 서버가 NAT 뒤에 있으면 외부 IP 주소를 알아야 PASV
명령 에 대한 응답으로 클라이언트에게 제공 할 수 있습니다 .
으로 활성 모드로 구성 부담의 대부분은 클라이언트 측에 있습니다.
클라이언트 측의 방화벽 (예 : Windows 방화벽) 및 NAT (예 : ADSL 모뎀 라우팅 규칙)는 들어오는 데이터 연결을위한 포트 범위를 허용 / 라우팅하도록 구성해야합니다. Windows에서 포트를 열려면 제어판> 시스템 및 보안> Windows 방화벽> 고급 설정> 인바운드 규칙> 새 규칙으로 이동하십시오 . NAT의 포트 (있는 경우)를 라우팅하려면 해당 설명서를 참조하십시오.
네트워크에 NAT가있는 경우 FTP 클라이언트는 WinSCP가 PORT
명령을 사용하여 FTP 서버에 제공해야하는 외부 IP 주소를 알아야합니다 . 서버가 클라이언트에 올바르게 다시 연결하여 데이터 연결을 열 수 있습니다. 일부 FTP 클라이언트는 외부 IP 주소를 자동 감지 할 수 있으며 일부는 수동으로 구성해야합니다.
일부 방화벽 / NAT는 FTP 제어 연결을 검사하여 데이터 포트를 자동으로 열고 닫거나 제어 연결 트래픽에서 데이터 연결 IP 주소를 변환하려고합니다.
이러한 방화벽 / NAT를 사용하면 암호화되지 않은 일반 FTP에는 위의 구성이 필요하지 않습니다. 그러나 제어 연결 트래픽이 암호화되어 방화벽 / NAT가이를 검사하거나 수정할 수 없으므로 FTPS에서는 작동하지 않습니다.
활성 모드 : -server가 연결을 시작합니다.
수동 모드 : -client가 연결을 시작합니다.
활성 모드 — 클라이언트는 서버에 PORT 명령을 발행하여 클라이언트에게 데이터 연결을 다시 열 수 있도록 IP 및 포트 번호를 "활성"으로 제공함을 알려줍니다.
수동 모드 — 클라이언트는 PASV 명령을 실행하여 서버가 IP 및 포트 번호를 제공하기 위해“수동으로”기다린 후 클라이언트가 서버에 대한 데이터 연결을 생성 함을 나타냅니다.
위에 좋은 답변이 많이 있지만이 블로그 게시물에는 유용한 그래픽이 포함되어 있으며 https://titanftp.com/2018/08/23/what-is-the-difference-between-active-and -수동 -ftp /