15

Может кто-нибудь просто объяснить различия между пассивным режимом FTP (PASV) и расширенным пассивным режимом FTP (EPSV)?

2 ответа2

17

Единственное отличие состоит в том, что 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 является единственным отличием.

1

Разница между активным и пассивным уже устранена. Расширенная пассивная (EPSV) просто пассивна с IPv4 и IPv6, потому что синтаксис ответа на PASV был специфичен для IPv4, и, следовательно, для IPv6 потребовалась новая команда. То же самое с EPTR против PORT в активном режиме. EPRT и EPSV ведут себя несколько иначе, поскольку они могут содержать только порт, а не IP и порт, как это делают PORT и PASV. Таким образом, передача данных может осуществляться только между системами, которые имеют управляющее соединение. С помощью PORT и PASV можно создать соединение для передачи данных между другими системами (хотя сегодня это считается плохим дизайном и угрозой безопасности).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .