Может кто-нибудь просто объяснить разницу между пассивным режимом FTP (PASV) и расширенным пассивным режимом FTP (EPSV)?
Может кто-нибудь просто объяснить разницу между пассивным режимом FTP (PASV) и расширенным пассивным режимом FTP (EPSV)?
Ответы:
Разница лишь в том, что PORT/PASV
они ограничены IPv4 , а EPRT/EPSV
работают с любым сетевым протоколом (хотя на практике используется только IPv6).
Стандартные PORT
(активные) и PASV
(пассивные) команды в протоколе управления FTP обмениваются адресом и информацией о порте в виде шести 1-байтовых десятичных знаков , из которых другой конец должен восстановить четырехбайтовый IP-адрес и двухбайтовый номер порта TCP.
PORT <address[4]>,<port[2]>
PORT 132,235,1,2,24,131
Но затем стали появляться другие протоколы. IPv4 собирался заменить на «IPng», в котором было довольно много конкурирующих предложений по замене (OSI CLNP, TUBA, SIP, SIPP, CATNIP - в разное время в истории), некоторые с более короткими, длинными и даже переменными размерами адресов хостов, пока IPv6 с 16-байтовыми адресами, наконец, не будет определен.
Просто отправка большего количества байтов не сработала бы - нельзя было ожидать, что серверы и клиенты будут знать правильный протокол, основанный исключительно на длине адреса. (Например, что если у вас есть один протокол с 16-байтовым адресом + 4-байтовый порт, другой с 12-байтовым адресом + 12-байтовый порт?)
Кроме того, хотя 20 лет назад это было не так важно, в наши дни в Интернете существуют миллионы устройств NAT , которые проверяют и манипулируют управляющими соединениями FTP, чтобы «внешний» хост видел только глобальные адреса IPv4, даже если «внутри» хост отправил RFC1918 локальный. Даже без NAT межсетевые экраны с отслеживанием состояния часто следят за командами управления, чтобы автоматически разрешить соединение для передачи данных без ручных правил.
Это в основном означает, что просто отправка большего числа номеров PORT
или PASV
гарантированно сломается для многих людей. Возможно, некоторые брандмауэры будут спокойно неверно истолковывать некоторые байты адреса как порт и тихо отбрасывать остальные; другие могут разорвать соединение или просто сломаться.
Чтобы избежать различных проблем, подобных описанным выше, необходимо было ввести новые команды для поддержки нескольких протоколов в FTP.
В 1993 RFC 1639 (первоначально RFC 1545 ) представил «длинный адрес» LPRT
иLPSV
команды, которые были похожи на PORT
&, PASV
но имели переменную длину адреса ; они также включали идентификатор типа протокола. (Хотя синтаксис не изменился - адрес IPv6: порт будет просто отправлен как 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 также быстро устарел; когда IPv6 вышел только через год, его нельзя было использовать с LPRT, потому что для него не был назначен идентификатор протокола LPRT (только для различных ранних предложений).
Чтобы исправить это, в RFC 2428 в 1998 году добавлены EPRT
и EPSV
, также называемые «расширенный порт» и «расширенный пассив» , которые также имели метод согласования протокола, который поддерживают оба конца. «Расширенные» команды также отправляют адреса в удобочитаемой форме - для IPv6, что означает использование шестнадцатеричной и двоеточия, а не серии отдельных десятичных чисел.
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
делает ответ). Это позволяет избежать распространенной проблемы, когда FTP-сервер, расположенный за NAT, не знает своего внешнего IP-адреса и сбивает с толку FTP-клиента, отправляя ему свой внутренний адрес.
Разница между активным и пассивным уже устранена. Расширенная пассивная (EPSV) просто пассивна с IPv4 и IPv6, потому что синтаксис ответа на PASV был специфичен для IPv4, и, следовательно, для IPv6 потребовалась новая команда. То же самое с EPTR против PORT в активном режиме. EPRT и EPSV ведут себя несколько иначе, поскольку они могут содержать только порт, а не IP и порт, как это делают PORT и PASV. Таким образом, передача данных может осуществляться только между системами, имеющими управляющее соединение. С помощью PORT и PASV можно создать соединение для передачи данных между другими системами (хотя сегодня это считается плохим дизайном и угрозой безопасности).