26 ноября 2013 г.

Как работает FTP вообще

По материалам
http://www.nsoft-s.com/forum/viewtopic.php?f=1&t=2875
Во-первых, следует подробнее рассказать, как работает FTP вообще и FTP в MyChat Server в частности, чтобы вы чётко понимали, где может крыться причина проблемы. Будет "многабукафф", но прочитайте вдумчиво.


1. Первичная аутентификация клиента на сервере и процесс обмена файлами.
Итак, FTP - это протокол передачи файлов, работает всегда по двум портам. Порты эти могут быть произвольными. Например, 20 и 21. Или 20000 и какой-нибудь порт из диапазона (так работает MyChat Server), как настроите сервер. Но портов всегда два.

Один порт нужен для первичной аутентификации подключающегося клиента на сервере (проверка логина/пароля) и для обмена технической информацией в процессе работы (копируем файл, удаляем файл, создаём каталог и т.п.), а второй порт всегда нужен для передачи бинарных данных (файлов) в ту или иную сторону. Важный момент, о номере второго порта клиент узнаёт только после того, как он уже аутентифицировался на сервере, сервер сообщает клиенту номер порта, по которому будут передаваться непосредственно файлы. Вы можете быть удивлены - но получение списка файлов в каталоге - это тоже передача бинарных данных по второму порту.

2. Как клиент работает через NAT, файрволы и т.п. препятствия?
Есть такое понятие в FTP - пассивный режим, или Passive Mode, если на англицком. Если кратко - это специальный режим работы, когда соединение с сервером по порту передачи файлов (второй порт, о котором я говорил в предыдущем пункте) открывает клиент. В классическом FTP соединение с клиентом по второму порту - открывает сервер. Понятное дело, что при наличии NAT такое соединение будет невозможным. Поэтому клиент сам должен открыть соединение с сервером по второму порту. Это и называется пассивный режим работы.

Важный момент заключается в том, что об этом нужно сказать явно, иначе по умолчанию будет работать активный режим и клиент не сможет работать с сервером, ему будет мешать NAT. Опция пассивного режима настраивается в любом FTP клиенте, будь то Проводник, Total Commander, FAR или что-то ещё.

3. Как правильно подключиться к FTP серверу через Проводник? Что нужно указать в адресной строке?
Общая схема записи: ftp://user:password@host:port/dir
Предположим, что IP сервера - 192.168.10.1, логин для подключения к MyChat FTP серверу - mcuser, а пароль - mychat.

Тогда строка будет выглядеть так: ftp://mcuser:mychat@192.168.10.1
Подразумевается, что сервер работает на 21-м порту и тогда его указывать не нужно.

Если FTP будет работать, например, на 20000 порту, тогда строка будет выглядеть так: ftp://mcuser:mychat@192.168.10.1:20000

Это справедливо не только для MyChat, но и для любого FTP сервера.

Думаю, теперь понятно, почему в Проводнике вы не могли подключиться к FTP серверу, вводя адрес вручную.

4. Как работать с FTP из других подсетей?
Прочитав предыдущие нравоучения :), вы уже поняли, что вам необходимо использовать пассивный режим (passive mode) для работы клиента с сервером. Я не могу знать точно, как у вас устроена сеть, однако могу точно сказать, какая настройка сервера точно не помешает. Не буду вдаваться в технические подробности, об этом сможете спросить потом, если будет необходимость, но в MyChat Server стоит сделать вот такую настройку:

Ярлыки: ,