답변:
유일한 차이점은 PORT/PASVIPv4로 제한되고 EPRT/EPSV모든 네트워크 프로토콜로 작업 하는 것입니다 (실제로는 IPv6 만 사용됨).
FTP 제어 프로토콜 의 표준 PORT(활성) 및 PASV(수동) 명령은 주소 및 포트 정보를 6 개의 1 바이트 10 진수 로 교환 하며 다른 쪽 끝은 4 바이트 IP 주소와 2 바이트 TCP 포트 번호를 재구성해야합니다.
PORT <address[4]>,<port[2]>
PORT 132,235,1,2,24,131
그러나 다른 프로토콜이 나타나기 시작했습니다. IPv4는 "IPng"로 대체 될 예정인데,이 프로토콜은 역사상 여러 차례에 걸쳐 경쟁이 치열한 대체 제안 (OSI CLNP, TUBA, SIP, SIPP, CATNIP 등)을 가지고 있으며, 일부는 더 짧고 길고 가변적 인 호스트 주소 크기를 가지고 있습니다. 16 바이트 주소를 가진 IPv6가 정의 될 때까지
더 많은 바이트를 전송하는 것만으로는 효과가 없었습니다. 서버와 클라이언트는 주소 길이만으로 올바른 프로토콜을 알 수 없었습니다. (예를 들어, 16 바이트 주소 + 4 바이트 포트가있는 프로토콜 하나와 12 바이트 주소 + 12 바이트 포트가있는 프로토콜 하나가 있다면 어떨까요?)
게다가 20 년 전에는 중요하지 않았지만 오늘날 인터넷에 수백만 개의 NAT 장치 가있어 FTP 제어 연결을 검사하고 조작하여 "내부"호스트가 "내부"호스트 만 글로벌 IPv4 주소 만 볼 수 있도록합니다. 호스트가 RFC1918을 로컬로 보냈습니다. NAT가 없어도 상태 저장 방화벽은 종종 수동 규칙없이 데이터 연결을 자동으로 허용하는 제어 명령을 감시합니다.
이것은 기본적으로 많은 사람들 과 함께 더 많은 번호를 보내 PORT거나 PASV많은 사람들에게 끊어 질 수 있음을 의미합니다 . 아마도 일부 방화벽은 일부 주소 바이트를 조용히 포트로 잘못 해석하고 나머지는 조용히 버릴 것입니다. 다른 사람이 연결을 끊거나 충돌 할 수 있습니다.
위와 같은 다양한 문제를 피하기 위해 FTP에서 다중 프로토콜 지원을위한 새로운 명령을 도입해야했습니다.
1993 년, RFC 1639 (원래 1545 RFC는 ) 도입 "긴 주소" LPRT와LPSV 같았 명령 PORT및 PASV하지만 함께 변수의 주소 길이를 ; 프로토콜 유형 식별자도 포함되었습니다. (구문은 변경되지 않았습니다. – IPv6 address : port는 단순히 6이 아닌 21 개의 숫자로 전송됩니다.)
LPRT <protocol>,<addr-length>,<address...>,<port-length>,<port...>
LPRT 4,4,132,235,1,2,2,24,131
LPRT 6,16,16,128,0,0,0,0,0,0,0,8,8,0,32,12,65,122,2,20,162
그러나 여전히 서버에 제어 연결과 다른 프로토콜을 사용하도록 요청하는 등의 일부 문제는 해결되지 않았습니다. RFC도 빨리 구식이되었습니다. 1 년 후 IPv6가 나왔을 때 LPRT 프로토콜 식별자가 할당되지 않았기 때문에 LPRT와 함께 사용할 수 없었 습니다 (다양한 초기 제안에 대해서만).
이 문제를 해결하기 위해 1998 년 RFC 2428 에는 "확장 포트"및 "확장 수동"이 추가 EPRT되었으며 EPSV, 양쪽 모두 지원을 종료하는 프로토콜을 협상하는 방법도있었습니다. "확장 된"명령은 IPv6의 경우 사람이 읽을 수있는 형식으로 주소를 보냅니다. 즉, 일련의 개별 10 진수 대신 16 진 및 콜론 표기법을 사용합니다.
EPRT x<protocol>x<address>x<port>x
EPRT |1|132.235.1.2|6275|
EPRT |2|1080::8:800:200C:417A|5282|
결론적으로 IPv6 지원은 유일한 차이점입니다.
EPSV응답에 IP 주소가 포함되어 있지 않다는 것입니다 ( PASV응답의 내용 ). 이것은 NAT 뒤에있는 FTP 서버가 외부 IP 주소를 모르고 내부 주소를 보내 FTP 클라이언트를 혼동 할 때 일반적인 문제를 피하기위한 것입니다.
액티브와 패시브의 차이점은 이미 답변되었습니다. PASV에 대한 응답 구문은 IPv4에만 적용되므로 IPv6에 새로운 명령이 필요했기 때문에 EPSSV (Extendeded Passive)는 IPv4 및 IPv6에서 수동적입니다. 활성 모드에서 EPTR 대 PORT와 동일합니다. EPRT 및 EPSV에는 PORT 및 PASV와 같이 IP와 포트가 아닌 포트만 포함 할 수 있다는 점에서 EPRT와 EPSV의 동작이 약간 다릅니다. 따라서 데이터 전송은 제어 연결이있는 시스템간에 만 수행 할 수 있습니다. PORT 및 PASV를 사용하면 다른 시스템간에 데이터 연결을 만들 수 있습니다 (현재는 잘못된 설계 및 보안 위험으로 간주되지만).