В активном режиме FTP-сервер использует два порта: 21 для командных сигналов и 20 для данных. В пассивном режиме FTP после того, как клиент подключается к серверу через порт 21, сервер, на котором сервер предоставляет клиенту случайный временный порт для подключения, для подключения к данным, которое он начинает прослушивать. Почему сервер не предоставляет порт 20 (как обычно для активного режима) для подключений к данным?
PS: Я просмотрел Почему для пассивного режима FTP требуется диапазон портов, а не только один порт? , но это не касается моего конкретного вопроса.
В активном режиме FTP
сервер не «предоставляет» порт 20 клиенту. Он инициирует соединение от порта 20 к клиенту. Это входящее (с точки зрения брандмауэра клиента) соединение будет заблокировано большинством современных брандмауэров. Кроме того, довольно сложно заставить активный режим работать через NAT
.
Пассивный режим лишен всех этих недостатков, поскольку в пассивном режиме FTP
сервер не инициирует никаких соединений.
Я не знаю, почему первоначальные авторы спецификации FTP решили именно так. Но это решение имеет преимущества по сравнению с тем, как сегодня работает Интернет.
Если бы вы подключались к одному и тому же порту (20) каждый раз, сервер не смог бы определить, для какого файла вы подключаетесь. Номер порта служит связующим звеном между запросом передачи в управляющем соединении и соединением для передачи данных. Обратите внимание, что в соединении для передачи данных нет «протокола», который мог бы использовать клиент, чтобы сообщить, что он запрашивает. Номер порта - единственная уникальная информация, которую имеет сервер.
Если два клиента должны были запросить передачу одновременно, и сервер принимал соединения для передачи данных через один порт, сервер не смог бы сказать, что файл для передачи. Конечно, сервер может использовать IP-адрес клиента для принятия решения (на самом деле многие FTP-серверы действительно подтверждают, что IP-адрес клиента соответствует IP-адресу, используемому в управляющем соединении для безопасности).
Но это не сработает для:
Ни один из вышеперечисленных, вероятно, не подходил Причина, по которой в спецификации FTP был введен диапазон портов, поскольку в то время (1980 г.) корпоративных сетей не существовало, и множественные соединения с одной машины, вероятно, также были маловероятны. С другой стороны, в таких случаях диапазон портов может значительно упростить реализацию сервера.
Поскольку в FTP отсутствует концепция сеанса , использование одного порта, скажем 20, внесет неоднозначность при подключении нескольких клиентов, поскольку сервер не может сопоставить клиента с файлом. Чтобы преодолеть это ограничение, для каждой передачи есть выделенный порт. IOW, каждый порт - это уникальный идентификатор передачи.