W trybie pasywnym FTP przeczytałem, że serwer wysyła losowy numer portu do klienta, w którym może ustanowić kanał danych.
Następnie klient ustanawia kanał danych od losowego numeru portu do tego numeru portu przesłanego przez serwer.
Moje pytanie brzmi: dlaczego serwer wysyła losowy numer portu do klienta? Dlaczego klient nie może bezpośrednio ustanowić kanału danych do portu nr 20 po stronie serwera?
Odpowiedzi:
W ten sposób protokół FTP został zaprojektowany do pracy w trybie pasywnym. Prawdopodobnie nie był to dobry pomysł, ponieważ nie sądzę, aby ten model był kiedykolwiek powtarzany w jakimkolwiek innym protokole (i to jest tym bardziej prawdziwe w przypadku aktywnego trybu FTP).
Na porcie połączenia danych nie ma protokołu. Wszystko, co serwer wie - jedyne, co przenosi jakiekolwiek informacje w tym połączeniu - to numer portu, z którym się łączysz.
Jeśli za każdym razem łączysz się z tym samym portem, serwer nie byłby w stanie stwierdzić, z jakim plikiem się łączysz. Numer portu służy jako łącze między żądaniem transferu połączenia sterującego a połączeniem danych - numer portu jest zawarty w odpowiedzi na
PASV
polecenie.Gdyby dwóch klientów zażądało transferu w tym samym czasie, gdy serwer akceptuje połączenie na jednym porcie, serwer nie byłby w stanie powiedzieć, który plik ma zostać przesłany. Oczywiście, serwer może użyć adresu IP klienta do podjęcia decyzji (w rzeczywistości wiele serwerów FTP sprawdza, czy adres IP klienta odpowiada adresowi IP użytemu w połączeniu kontrolnym, dla bezpieczeństwa).
Ale to nie zadziała dla:
Częściowo skopiowane z mojej odpowiedzi na pytanie: Dlaczego tryb pasywny FTP wymaga zakresu portów, a nie tylko jednego portu? na błąd serwera.
źródło
Zazwyczaj serwer nie wysyła losowego portu, ale wolny z określonego (instalacyjnego) zakresu / puli - dla klienta wygląda to losowo. Ten port musi być przekazany do zapory ogniowej, która wymaga zdefiniowania zakresu.
Niestety FTP jest starożytny. Wydaje mi się, że starożytne serwery nie potrafiły rozróżnić sesji danych wielu klientów poza portem. Zasadniczo lepiej jest przejść na bardziej aktualne protokoły, w których wszystko jest starannie spakowane w ramach jednej sesji gniazda.
źródło