답변:
유일한 차이점은 PORT/PASV
IPv4로 제한되고 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를 사용하면 다른 시스템간에 데이터 연결을 만들 수 있습니다 (현재는 잘못된 설계 및 보안 위험으로 간주되지만).