Czy ktoś może po prostu wyjaśnić różnice między trybem pasywnym FTP (PASV) a rozszerzonym trybem pasywnym FTP (EPSV)?
Czy ktoś może po prostu wyjaśnić różnice między trybem pasywnym FTP (PASV) a rozszerzonym trybem pasywnym FTP (EPSV)?
Odpowiedzi:
Jedyną różnicą jest to, że PORT/PASV
są ograniczone do IPv4 , podczas gdy EPRT/EPSV
działają z dowolnym protokołem sieciowym (chociaż w praktyce używany jest tylko IPv6).
Standardowe PORT
(aktywne) i PASV
(pasywne) polecenia w protokole kontrolnym FTP wymieniają adres i informacje o porcie jako sześć 1-bajtowych miejsc po przecinku , z których drugi koniec musi zrekonstruować czterobajtowy adres IP i dwubajtowy numer portu TCP.
PORT <address[4]>,<port[2]>
PORT 132,235,1,2,24,131
Ale potem zaczęły pojawiać się inne protokoły. IPv4 miał zostać zastąpiony przez „IPng”, który miał sporo konkurencyjnych propozycji zastąpienia (OSI CLNP, TUBA, SIP, SIPP, CATNIP - w różnych okresach historii), niektóre z krótszymi, dłuższymi, a nawet zmiennymi rozmiarami adresów hosta, do momentu zdefiniowania IPv6 z 16-bajtowymi adresami.
Po prostu wysłanie większej ilości bajtów nie zadziałałoby - nie można oczekiwać, że serwery i klienci znają właściwy protokół oparty wyłącznie na długości adresu. (Na przykład, co jeśli masz jeden protokół z 16-bajtowym adresem + 4-bajtowy port, inny z 12-bajtowym adresem + 12-bajtowy port?)
Poza tym - chociaż 20 lat temu było to mniej ważne - w dzisiejszych czasach w Internecie są miliony urządzeń NAT , które sprawdzają i zmieniają połączenia kontrolne FTP, dzięki czemu host „zewnętrzny” będzie widział globalne adresy IPv4, nawet jeśli „wewnątrz” host wysłał lokalny RFC1918. Nawet bez NAT zapory stanowe często obserwują polecenia sterujące, aby automatycznie zezwolić na połączenie danych bez reguł ręcznych.
Oznacza, że po prostu nie może wysyłać więcej numerów z PORT
lub PASV
jest gwarantowane do złamania dla wielu ludzi. Być może niektóre zapory ogniowe po cichu źle interpretują niektóre bajty adresu jako port i po cichu odrzucają pozostałe; inni mogą porzucić połączenie lub po prostu zawiesić się.
Aby uniknąć różnych problemów, takich jak powyższe, konieczne było wprowadzenie nowych poleceń do obsługi wielu protokołów w FTP.
W roku 1993, RFC 1639 (pierwotnie RFC 1545 ) wprowadził „długi adres” LPRT
iLPSV
poleceń, które były jak PORT
& PASV
, ale o długości adresowej zmienna ; zawierały również identyfikator typu protokołu. (Nie zmieniło to jednak składni - adres IPv6: port byłby po prostu wysyłany jako 21 liczb zamiast sześciu).
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
Jednak nadal nie rozwiązało to niektórych problemów, takich jak poproszenie serwera o użycie innego protokołu niż w przypadku połączenia sterującego. RFC również szybko stało się nieaktualne; kiedy IPv6 pojawił się zaledwie rok później, nie można go było używać z LPRT, ponieważ nie przypisano mu identyfikatora protokołu LPRT (tylko dla różnych wczesnych propozycji).
Aby rozwiązać ten problem, RFC 2428 w 1998 dodaje EPRT
i EPSV
, aka „Extended port” i „rozszerzoną pasywne” , który miał także sposób negocjuje protokół, który obsługuje oba końce. Polecenia „rozszerzone” wysyłają również adresy w postaci czytelnej dla człowieka - w przypadku IPv6 oznacza to użycie notacji szesnastkowej i dwukropka zamiast szeregu oddzielnych liczb dziesiętnych.
EPRT x<protocol>x<address>x<port>x
EPRT |1|132.235.1.2|6275|
EPRT |2|1080::8:800:200C:417A|5282|
Podsumowując, obsługa IPv6 jest jedyną różnicą.
EPSV
odpowiedź nie zawiera adresu IP (co PASV
robi odpowiedź). Pozwala to uniknąć typowego problemu, gdy serwer FTP znajdujący się za NAT nie zna swojego zewnętrznego adresu IP i myli klienta FTP, wysyłając mu swój adres wewnętrzny.
Różnica między aktywnym a pasywnym została już rozwiązana. Rozszerzona pasywna (EPSV) jest po prostu pasywna w przypadku IPv4 i IPv6, ponieważ składnia odpowiedzi na PASV była specyficzna dla IPv4 i dlatego potrzebne było nowe polecenie dla IPv6. To samo z EPTR vs. PORT w trybie aktywnym. Z EPRT i EPSV jest nieco inne zachowanie, ponieważ mogą one zawierać tylko port, a nie IP i port jak PORT i PASV. Tak więc transfer danych może odbywać się tylko między systemami, które mają połączenie sterujące. Dzięki PORT i PASV możliwe jest utworzenie połączenia danych między innymi systemami (choć jest to dziś uważane za zły projekt i ryzyko bezpieczeństwa).