Чому пасивний режим FTP використовує діапазон ефемерних портів на відміну від одного добре відомого порту? [зачинено]


9

У пасивному режимі FTP я читав, що сервер посилає клієнту випадковий номер порту, де він може встановити канал передачі даних.
Потім клієнт встановлює канал даних зі свого випадкового номера порту до цього номера порту, що надсилається сервером.

Моє запитання, чому сервер надсилає клієнту випадковий номер порту? Чому клієнт не може безпосередньо встановити канал даних до порту номер 20 на стороні сервера?


2
Я думав, що це поза темою.

На жаль, питання щодо протоколів над OSI шаром-4 тут поза темою.
Рон Моупін

Відповіді:


13

Ось так був розроблений протокол FTP для роботи в пасивному режимі. Це, мабуть, не було гарною ідеєю, тому що я не думаю, що ця модель коли-небудь повторювалася в будь-якому іншому протоколі (і це ще більше стосується активного режиму FTP).


На порту з'єднання даних немає протоколу. Все, що знає сервер - єдине, що несе будь-яку інформацію в зв'язку з цим - це номер порту, до якого ви підключаєтесь.

Якби ви підключалися до одного і того ж порту кожного разу, сервер не міг би вказати, до якого файлу ви підключаєтесь. Номер порту служить ланкою між запитом на передачу на з'єднанні управління та з'єднанням даних - номер порту міститься у відповіді на PASVкоманду.

Якщо два клієнти одночасно вимагали передачі, коли сервер приймає з'єднання на одному порту, сервер не зможе повідомити, який файл передавати. Звичайно, сервер міг використовувати клієнтський IP для прийняття рішення (насправді багато FTP-сервери підтверджують, що клієнтський IP-відповідність відповідає IP, використовуваному для з'єднання управління).

Але це не допоможе:

  • Кілька підключень від однієї машини (більшість FTP-клієнтів підтримують паралельні передачі / черги, і ви можете фактично запускати кілька різних FTP-клієнтів на одній машині);
  • Підключення з різних машин у межах однієї (корпоративної) мережі, оскільки ті, що мають однаковий зовнішній IP.

Частково скопійовано з моєї відповіді на « Чому пасивний режим FTP вимагає діапазону портів на відміну від одного порту? за помилкою сервера.


Номер порту, який використовується на стороні сервера, також може бути 20, правда? У кожній відповіді номер порту на стороні сервера відрізняється від 20
Zephyr

Моя відповідь пояснює, чому номер порту повинен бути унікальним для кожного з'єднання / передачі. Тож її неможливо встановити до 20.
Мартін Прикрил

Так, це неможливо виправити, але одна з них може бути 20 правдою?
Зефір

1
Так, але всі інші порти повинні бути вище 1024. І з практичної точки зору краще суміжний порт. Більшість брандмауерів / NAT підтримують правила на основі діапазону. Ви не хочете додавати спеціальне правило для ізольованого порту 20 - Також більшість серверів FTP підтримують лише суміжний діапазон портів.
Мартін Прикрил

1
@ Zac67 ні, клієнт відкриє нове з'єднання (окрім підключення управління) для отримання файлу в пасивному режимі, тому сервер не може використовувати номер вихідного (клієнтського) порту для розмежування між клієнтськими з'єднаннями. Крім того, NAT часто керує портом джерела клієнта (та / або IP-адресою), роблячи такий підхід непридатним на практиці.
jjmontes

4

Зазвичай сервер не надсилає випадковий порт, а вільний з визначеного (за встановленням) діапазону / пулу - для клієнта це виглядає випадково. Цей порт потрібно переадресувати на брандмауер, що вимагає визначення діапазону.

На жаль, FTP є давнім. Я здогадуюсь, стародавні сервери не могли розрізнити сеанси даних декількох клієнтів, крім порту. Як правило, краще перейти до більш сучасних протоколів, де все акуратно упаковано за один сеанс роботи сокета.


Так це може бути і 20, правда? На кожному веб-сайті номер порту сервера для даних відрізняється від 20.
Зефір,

20 - вихідний порт із сервера для активного FTP (який вже не дуже використовується).
Zac67

Не в тому, що стародавні сервери мали проблеми, це те, що дизайнери протоколів все ще намагалися знайти найкращий спосіб зробити речі складнішими, ніж примітивний відповідь на запит.
Марк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.